akka.http.scaladsl.model.HttpMethod Scala Examples
The following examples show how to use akka.http.scaladsl.model.HttpMethod.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: TestResponseFromUnsupportedApis.scala From ohara with Apache License 2.0 | 5 votes |
package oharastream.ohara.configurator import java.util.concurrent.TimeUnit import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ import akka.http.scaladsl.model.{HttpMethod, HttpMethods, HttpRequest} import akka.http.scaladsl.unmarshalling.Unmarshal import oharastream.ohara.client.configurator.ErrorApi import oharastream.ohara.common.rule.OharaTest import oharastream.ohara.common.util.{CommonUtils, Releasable} import org.junit.{After, Test} import org.scalatest.matchers.should.Matchers._ import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration.Duration import scala.concurrent.{Await, Future} class TestResponseFromUnsupportedApis extends OharaTest { private[this] val configurator = Configurator.builder.fake().build() private[this] implicit val actorSystem: ActorSystem = ActorSystem("Executor-TestResponseFromUnsupportedApis") private[this] val expectedMessage = oharastream.ohara.configurator.route.apiUrl private[this] def result[T](f: Future[T]): T = Await.result(f, Duration(20, TimeUnit.SECONDS)) @Test def testGet(): Unit = sendRequest(HttpMethods.GET, CommonUtils.randomString()).apiUrl.get shouldBe expectedMessage @Test def testPut(): Unit = sendRequest(HttpMethods.PUT, CommonUtils.randomString()).apiUrl.get shouldBe expectedMessage @Test def testDelete(): Unit = sendRequest(HttpMethods.DELETE, CommonUtils.randomString()).apiUrl.get shouldBe expectedMessage @Test def testPost(): Unit = sendRequest(HttpMethods.POST, CommonUtils.randomString()).apiUrl.get shouldBe expectedMessage private[this] def sendRequest(method: HttpMethod, postfix: String): ErrorApi.Error = result( Http() .singleRequest(HttpRequest(method, s"http://${configurator.hostname}:${configurator.port}/$postfix")) .flatMap { response => if (response.status.isSuccess()) Future.failed(new AssertionError()) else Unmarshal(response.entity).to[ErrorApi.Error] } ) @After def tearDown(): Unit = { Releasable.close(configurator) result(actorSystem.terminate()) } }
Example 2
Source File: HttpStats.scala From opencensus-scala with Apache License 2.0 | 5 votes |
package io.opencensus.scala.akka.http.stats import akka.http.scaladsl.model.{HttpMethod, StatusCode} import io.opencensus.scala.Stats import io.opencensus.scala.stats._ private[http] trait HttpStats { private[http] def stats: Stats // As defined in https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/HTTP.md private val latencyBucketBoundaries = List(0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000).map(_.toDouble) private val ServerMethodTagName = "http_server_method" private val ServerRouteTagName = "http_server_route" private val ServerStatusTagName = "http_server_status" private val ClientMethodTagName = "http_client_method" private val ClientRouteTagName = "http_client_route" private val ClientStatusTagName = "http_client_status" private lazy val serverLatency = for { measure <- Measure.double( name = "opencensus.io/http/server/server_latency", description = "Time between first byte of request headers read to last byte of response sent, or terminal error", unit = "ms" ) distribution <- Distribution(latencyBucketBoundaries) view <- View( name = "opencensus.io/http/server/server_latency", description = "Time between first byte of request headers read to last byte of response sent, or terminal error", measure, List(ServerMethodTagName, ServerRouteTagName, ServerStatusTagName), distribution ) _ <- stats.registerView(view) } yield measure private lazy val clientRoundTripLatency = for { measure <- Measure.double( name = "opencensus.io/http/client/roundtrip_latency", description = "Time between first byte of request headers sent to last byte of response received, or terminal error", unit = "ms" ) distribution <- Distribution(latencyBucketBoundaries) view <- View( name = "opencensus.io/http/client/roundtrip_latency", description = "Time between first byte of request headers sent to last byte of response received, or terminal error", measure, List(ClientMethodTagName, ClientRouteTagName, ClientStatusTagName), distribution ) _ <- stats.registerView(view) } yield measure private[http] def measureClientRoundtripLatency( route: String, method: HttpMethod, status: StatusCode, durationInMs: Double ) = for { measure <- clientRoundTripLatency tags <- Tag( ClientMethodTagName -> method.value, ClientRouteTagName -> route, ClientStatusTagName -> status.intValue.toString ) } yield stats.record(tags, Measurement.double(measure, durationInMs)) private[http] def measureServerLatency( route: String, method: HttpMethod, status: StatusCode, durationInMs: Double ) = for { measure <- serverLatency tags <- Tag( ServerMethodTagName -> method.value, ServerRouteTagName -> route, ServerStatusTagName -> status.intValue.toString ) } yield stats.record(tags, Measurement.double(measure, durationInMs)) }
Example 3
Source File: MetricsFactory.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.metrics import akka.http.scaladsl.model.{ HttpMethod, HttpMethods } import com.codahale.metrics.{ JmxReporter, MetricRegistry } object MetricsFactory { val ALL_REQUEST = "requests.status.all.total" val SUCCESS_REQUEST = "requests.status.success.total" val FAILURE_REQUEST = "requests.status.failure.total" val UNAUTHENTICATED_REQUEST = "requests.status.unauthenticated.total" val REQUEST_TIME = "requests.nanoseconds.total" val REQUEST_TIME_HIST = "requests.time.histogram" val HTTP_METHOD = "{httpMethod}" val HTTP_DIRECTION = "{InOut}" val REQUEST_CONTEXT_LENGTH = s"requests.method.$HTTP_METHOD.$HTTP_DIRECTION.context.length.bytes" val REQUEST_CONTEXT_LENGTH_SUM = s"requests.method.$HTTP_METHOD.$HTTP_DIRECTION.context.length.bytes.total" val REQUEST_QUEUE_OCCUPIED = "request.queue.occupied" val REQUEST_USER = "{user}" val REQUEST_QUEUE_OCCUPIED_BY_USER = s"request.queue.occupied.by.$REQUEST_USER" val ERROR_REPORTED_TOTAL = "errors.reported.total" val OBJECTS_UPLOAD_OPERATIONS_TOTAL = s"requests.method.$HTTP_METHOD.operations.total" val KAFKA_SENT_NOTIFICATION_TOTAL = "requests.kafka.notification.sent.total" val KAFKA_SENT_NOTIFICATION_ERROR_TOTAL = "requests.kafka.notification.sent.errors.total" private[this] val metrics = new MetricRegistry() JmxReporter.forRegistry(metrics).inDomain("rokku").build.start() def registryMetrics(): MetricRegistry = metrics def countRequest(name: String, count: Long = 1, countAll: Boolean = true): Unit = { metrics.counter(name).inc(count) if (countAll) metrics.counter(ALL_REQUEST).inc() } def markRequestTime(time: Long): Unit = { metrics.counter(REQUEST_TIME).inc(time) metrics.histogram(REQUEST_TIME_HIST).update(time) } def incrementRequestQueue(name: String): Unit = { metrics.counter(name).inc() metrics.counter(REQUEST_QUEUE_OCCUPIED).inc() } def decrementRequestQueue(name: String): Unit = { metrics.counter(name).dec() metrics.counter(REQUEST_QUEUE_OCCUPIED).dec() } def countLogErrors(name: String): Unit = { metrics.counter(name).inc() } def incrementObjectsUploaded(requestMethodName: HttpMethod): Unit = { requestMethodName match { case HttpMethods.PUT | HttpMethods.POST => metrics.counter(OBJECTS_UPLOAD_OPERATIONS_TOTAL.replace(MetricsFactory.HTTP_METHOD, requestMethodName.value)).inc() case _ => } } def incrementKafkaNotificationsSent(requestMethodName: HttpMethod): Unit = { requestMethodName match { case HttpMethods.PUT | HttpMethods.POST => metrics.counter(KAFKA_SENT_NOTIFICATION_TOTAL).inc() case _ => } } def incrementKafkaSendErrors(): Unit = { metrics.counter(KAFKA_SENT_NOTIFICATION_ERROR_TOTAL).inc() } }
Example 4
Source File: LineageHeaders.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.data import akka.http.scaladsl.model.{ ContentType, HttpMethod } case class LineageHeaders( host: Option[String], bucket: String, pseduoDir: Option[String], bucketObject: Option[String], method: HttpMethod, contentType: ContentType, clientType: Option[String], queryParams: Option[String], copySource: Option[String], classifications: Map[ClassificationFor, Seq[String]], metadata: Option[Map[String, String]]) sealed class ClassificationFor case class BucketClassification() extends ClassificationFor case class DirClassification() extends ClassificationFor case class ObjectClassification() extends ClassificationFor case class UnknownClassification() extends ClassificationFor
Example 5
Source File: AWSMessageEvent.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.data import java.time.Instant import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport import akka.http.scaladsl.model.{ HttpMethod, StatusCode } import com.ing.wbaa.rokku.proxy.handler.parsers.RequestParser.{ AWSRequestType, MultipartRequestType } import com.ing.wbaa.rokku.proxy.provider.aws.{ S3ObjectAction, s3MultipartUpload, s3MultipartUploadComplete } import spray.json.DefaultJsonProtocol case class Records(records: List[AWSMessageEvent]) case class UserIdentity(principalId: String) case class RequestParameters(sourceIPAddress: String) case class ResponseElements(`x-amz-request-id`: String, `x-amz-id-2`: String) case class OwnerIdentity(principalId: String) case class BucketProps(name: String, ownerIdentity: OwnerIdentity, arn: String) case class ObjectProps(key: String, size: Int, eTag: String, versionId: String, sequencer: String) case class S3(s3SchemaVersion: String, configurationId: String, bucket: BucketProps, `object`: ObjectProps) case class AWSMessageEvent( eventVersion: String, eventSource: String, awsRegion: String, eventTime: String, eventName: String, userIdentity: UserIdentity, requestParameters: RequestParameters, responseElements: ResponseElements, s3: S3 ) trait AWSMessageEventJsonSupport extends SprayJsonSupport with DefaultJsonProtocol { implicit val ownerIdentityFormat = jsonFormat1(OwnerIdentity) implicit val bucketFormat = jsonFormat3(BucketProps) implicit val objectPropsFormat = jsonFormat5(ObjectProps) implicit val s3Format = jsonFormat4(S3) implicit val userIdentityFormat = jsonFormat1(UserIdentity) implicit val requestParametersFormat = jsonFormat1(RequestParameters) implicit val responseElementsFormat = jsonFormat2(ResponseElements) implicit val AWSMessageEventFormat = jsonFormat9(AWSMessageEvent) implicit val recordsFormat = jsonFormat1(Records) import spray.json._ def prepareAWSMessage(s3Request: S3Request, method: HttpMethod, principalId: String, userIPs: UserIps, s3Action: S3ObjectAction, requestId: RequestId, responseStatus: StatusCode, awsRequest: AWSRequestType): Option[JsValue] = { val toMultipartRequest: AWSRequestType => Option[MultipartRequestType] = { case r: MultipartRequestType => Some(r) case _ => None } val uploadId: Option[String] = toMultipartRequest(awsRequest).map(_.uploadId) val multipartOrS3Action = toMultipartRequest(awsRequest) match { case Some(r) => if (r.completeMultipartUpload) s3MultipartUploadComplete(method.value) else s3MultipartUpload(method.value) case None => s3Action } for { bucketPath <- s3Request.s3BucketPath s3object <- s3Request.s3Object } yield Records(List(AWSMessageEvent( "2.1", "rokku:s3", "us-east-1", Instant.now().toString, multipartOrS3Action.value, UserIdentity(principalId), RequestParameters(userIPs.toString), ResponseElements(requestId.value, responseStatus.value), S3("1.0", "", BucketProps(bucketPath, OwnerIdentity(""), ""), ObjectProps(s3object, 0, "", "", uploadId.getOrElse(""))))) ).toJson } }
Example 6
Source File: S3Request.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.data import akka.http.scaladsl.model.RemoteAddress.Unknown import akka.http.scaladsl.model.Uri.Path import akka.http.scaladsl.model.{ HttpMethod, MediaType, MediaTypes, RemoteAddress } import com.ing.wbaa.rokku.proxy.util.S3Utils import com.typesafe.scalalogging.LazyLogging case class S3Request( credential: AwsRequestCredential, s3BucketPath: Option[String], s3Object: Option[String], accessType: AccessType, clientIPAddress: RemoteAddress = Unknown, headerIPs: HeaderIPs = HeaderIPs(), mediaType: MediaType = MediaTypes.`text/plain` ) { def userIps: UserIps = UserIps(clientIPAddress, headerIPs) } object S3Request extends LazyLogging { def apply(credential: AwsRequestCredential, path: Path, httpMethod: HttpMethod, clientIPAddress: RemoteAddress, headerIPs: HeaderIPs, mediaType: MediaType): S3Request = { val pathString = path.toString() val s3path = S3Utils.getS3PathWithoutBucketName(pathString) val s3Object = S3Utils.getS3FullObjectPath(pathString) val accessType = httpMethod.value match { case "GET" => Read(httpMethod.value) case "HEAD" => Head(httpMethod.value) case "PUT" => Put(httpMethod.value) case "POST" => Post(httpMethod.value) case "DELETE" => Delete(httpMethod.value) case _ => logger.debug("HttpMethod not supported") NoAccess } S3Request(credential, s3path, s3Object, accessType, clientIPAddress, headerIPs, mediaType) } }
Example 7
Source File: HttpRequestConversionSupport.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.persistence.serializers import java.net.InetAddress import akka.http.scaladsl.model.HttpHeader.ParsingResult import akka.http.scaladsl.model.{ HttpEntity, HttpHeader, HttpMethod, HttpMethods, HttpProtocol, HttpRequest, RemoteAddress, Uri } import com.ing.wbaa.rokku.proxy.data.{ UserAssumeRole, UserRawJson } import spray.json.DefaultJsonProtocol import scala.collection.immutable trait HttpRequestConversionSupport extends DefaultJsonProtocol { case class SimplifiedRemoteAddress(host: String) { def toRemoteAddr: RemoteAddress = { val a = host.split(":") RemoteAddress(InetAddress.getByName(a(0)), Some(a(1).toInt)) } } case class SimplifiedHttpRequest(method: String, uri: String, headers: List[String], entity: String, httpProtocol: String) implicit val httpRequestF = jsonFormat5(SimplifiedHttpRequest) implicit val userRoleF = jsonFormat1(UserAssumeRole) implicit val userSTSF = jsonFormat5(UserRawJson) implicit val remoteAddressF = jsonFormat1(SimplifiedRemoteAddress) private[persistence] def convertAkkaHeadersToStrings(headers: Seq[HttpHeader]): List[String] = headers.map(h => s"${h.name()}=${h.value()}").toList private def convertStringsToAkkaHeaders(headers: List[String]): immutable.Seq[HttpHeader] = headers.map { p => val kv = p.split("=") HttpHeader.parse(kv(0), kv(1)) match { case ParsingResult.Ok(header, _) => header case ParsingResult.Error(error) => throw new Exception(s"Unable to convert to HttpHeader: ${error.summary}") } } private def httpMethodFrom(m: String): HttpMethod = m match { case "GET" => HttpMethods.GET case "HEAD" => HttpMethods.HEAD case "PUT" => HttpMethods.PUT case "POST" => HttpMethods.POST case "DELETE" => HttpMethods.DELETE } private[persistence] def toAkkaHttpRequest(s: SimplifiedHttpRequest): HttpRequest = HttpRequest( httpMethodFrom(s.method), Uri(s.uri), convertStringsToAkkaHeaders(s.headers), HttpEntity(s.entity), HttpProtocol(s.httpProtocol) ) }
Example 8
Source File: MessageProviderKafka.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.provider import akka.Done import akka.http.scaladsl.model.{ HttpMethod, HttpMethods, StatusCodes } import com.ing.wbaa.rokku.proxy.data.{ AWSMessageEventJsonSupport, RequestId, S3Request } import com.ing.wbaa.rokku.proxy.handler.parsers.RequestParser.AWSRequestType import com.ing.wbaa.rokku.proxy.provider.aws.{ s3ObjectCreated, s3ObjectRemoved } import com.ing.wbaa.rokku.proxy.provider.kafka.EventProducer import scala.concurrent.Future trait MessageProviderKafka extends EventProducer with AWSMessageEventJsonSupport { def emitEvent(s3Request: S3Request, method: HttpMethod, principalId: String, awsRequest: AWSRequestType)(implicit id: RequestId): Future[Done] = method match { case HttpMethods.POST | HttpMethods.PUT => prepareAWSMessage(s3Request, method, principalId, s3Request.userIps, s3ObjectCreated(method.value), id, StatusCodes.OK, awsRequest) .map(jse => sendSingleMessage(jse.toString(), kafkaSettings.createEventsTopic, Some(method))) .getOrElse(Future(Done)) case HttpMethods.DELETE => prepareAWSMessage(s3Request, method, principalId, s3Request.userIps, s3ObjectRemoved(method.value), id, StatusCodes.OK, awsRequest) .map(jse => sendSingleMessage(jse.toString(), kafkaSettings.deleteEventsTopic, Some(method))) .getOrElse(Future(Done)) case _ => Future(Done) } }
Example 9
Source File: EventProducer.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.provider.kafka import akka.Done import akka.http.scaladsl.model.HttpMethod import com.ing.wbaa.rokku.proxy.config.KafkaSettings import com.ing.wbaa.rokku.proxy.data.RequestId import com.ing.wbaa.rokku.proxy.handler.LoggerHandlerWithId import com.ing.wbaa.rokku.proxy.metrics.MetricsFactory import org.apache.kafka.clients.CommonClientConfigs import org.apache.kafka.clients.producer.{ KafkaProducer, ProducerConfig, ProducerRecord, RecordMetadata } import org.apache.kafka.common.serialization.StringSerializer import scala.concurrent.{ ExecutionContext, Future } trait EventProducer { private val logger = new LoggerHandlerWithId import scala.collection.JavaConverters._ protected[this] implicit val kafkaSettings: KafkaSettings protected[this] implicit val executionContext: ExecutionContext private lazy val config: Map[String, Object] = Map[String, Object]( "bootstrap.servers" -> kafkaSettings.bootstrapServers, ProducerConfig.RETRIES_CONFIG -> kafkaSettings.retries, ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG -> kafkaSettings.retriesBackOff, ProducerConfig.RECONNECT_BACKOFF_MAX_MS_CONFIG -> kafkaSettings.retriesBackOffMax, CommonClientConfigs.SECURITY_PROTOCOL_CONFIG -> kafkaSettings.protocol, ProducerConfig.MAX_BLOCK_MS_CONFIG -> kafkaSettings.maxblock, ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG -> kafkaSettings.requestTimeoutMs, "ssl.truststore.location" -> kafkaSettings.sslTruststoreLocation, "ssl.truststore.password" -> kafkaSettings.sslTruststorePassword, "ssl.keystore.location" -> kafkaSettings.sslKeystoreLocation, "ssl.keystore.password" -> kafkaSettings.sslKeystorePassword, "ssl.key.password" -> kafkaSettings.sslKeyPassword ) private lazy val kafkaProducer: KafkaProducer[String, String] = new KafkaProducer(config.asJava, new StringSerializer, new StringSerializer) def sendSingleMessage(event: String, topic: String, httpMethod: Option[HttpMethod] = None)(implicit id: RequestId): Future[Done] = { kafkaProducer .send(new ProducerRecord[String, String](topic, event), (metadata: RecordMetadata, exception: Exception) => { exception match { case e: Exception => MetricsFactory.incrementKafkaSendErrors logger.error("error in sending event {} to topic {}, error={}", event, topic, e) throw new Exception(e) case _ => httpMethod.map { m => MetricsFactory.incrementKafkaNotificationsSent(m) } logger.debug("Message sent {} to kafka, offset {}", event, metadata.offset()) } }) match { case _ => Future(Done) } } }
Example 10
Source File: CacheRulesV1Spec.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.cache import akka.actor.ActorSystem import akka.http.scaladsl.model.Uri.Path import akka.http.scaladsl.model.{ HttpMethod, HttpMethods, HttpRequest, Uri } import com.ing.wbaa.rokku.proxy.config.StorageS3Settings import com.ing.wbaa.rokku.proxy.data.RequestId import com.ing.wbaa.rokku.proxy.handler.parsers.RequestParser import org.scalatest.diagrams.Diagrams import org.scalatest.wordspec.AnyWordSpec class CacheRulesV1Spec extends AnyWordSpec with Diagrams with CacheRulesV1 with RequestParser { private implicit val id = RequestId("testRequestId") val system: ActorSystem = ActorSystem.create("test-system") override val storageS3Settings: StorageS3Settings = new StorageS3Settings(system.settings.config) { override val storageS3Authority: Uri.Authority = Uri.Authority(Uri.Host("1.2.3.4"), 1234) } override def getMaxEligibleCacheObjectSizeInBytes(implicit id: RequestId): Long = 5242880L override def getEligibleCachePaths(implicit id: RequestId): Array[String] = "/home/,/test/".trim.split(",") override def getHeadEnabled(implicit id: RequestId): Boolean = true private val uri = Uri("http", Uri.Authority(Uri.Host("1.2.3.4")), Path(""), None, None) private val methods = Seq(HttpMethods.GET, HttpMethods.PUT, HttpMethods.POST, HttpMethods.DELETE, HttpMethods.HEAD) "Cache rules v1 set isEligibleToBeCached " should { methods.foreach { method => testIsEligibleToBeCached(method, "/home/test", HttpRequest.apply(method = method, uri = uri.copy(path = Path("/home/test")))) testIsEligibleToBeCached(method, "/home2/test", HttpRequest.apply(method = method, uri = uri.copy(path = Path("/home2/test")))) testIsEligibleToBeCached(method, "/test/abc", HttpRequest.apply(method = method, uri = uri.copy(path = Path("/test/abc")))) testIsEligibleToBeCached(method, "/testtest/test", HttpRequest.apply(method = method, uri = uri.copy(path = Path("/testtest/test")))) } } private def testIsEligibleToBeCached(method: HttpMethod, path: String, request: HttpRequest): Unit = { method match { case HttpMethods.GET | HttpMethods.HEAD if storageS3Settings.eligibleCachePaths.exists(path.startsWith) => s"for method=$method and path=$path to true" in { assert(isEligibleToBeCached(request)) } case _ => s"for method=$method and path=$path to false" in { assert(!isEligibleToBeCached(request)) } } } "Cache rules v1 set isEligibleToBeInvalidated" should { methods.foreach { method => val request = HttpRequest.apply(method = method, uri) method match { case HttpMethods.POST | HttpMethods.PUT | HttpMethods.DELETE => s"for method=$method to true" in { assert(isEligibleToBeInvalidated(request)) } case _ => s"for method=$method to false" in { assert(!isEligibleToBeInvalidated(request)) } } } } }
Example 11
Source File: ConfigLike.scala From akka-http-oauth2-client with Apache License 2.0 | 5 votes |
package com.github.dakatsuka.akka.http.oauth2.client import java.net.URI import akka.http.scaladsl.model.HttpMethod trait ConfigLike { def clientId: String def clientSecret: String def site: URI def authorizeUrl: String def tokenUrl: String def tokenMethod: HttpMethod def getHost: String def getPort: Int }
Example 12
Source File: Config.scala From akka-http-oauth2-client with Apache License 2.0 | 5 votes |
package com.github.dakatsuka.akka.http.oauth2.client import java.net.URI import akka.http.scaladsl.model.{ HttpMethod, HttpMethods } case class Config( clientId: String, clientSecret: String, site: URI, authorizeUrl: String = "/oauth/authorize", tokenUrl: String = "/oauth/token", tokenMethod: HttpMethod = HttpMethods.POST ) extends ConfigLike { def getHost: String = site.getHost def getPort: Int = site.getScheme match { case "http" => if (site.getPort == -1) 80 else site.getPort case "https" => if (site.getPort == -1) 443 else site.getPort } }
Example 13
Source File: HttpUtil.scala From CM-Well with Apache License 2.0 | 5 votes |
package cmwell.analytics.util import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.RequestEntityAcceptance.Tolerated import akka.http.scaladsl.model.{HttpMethod, HttpRequest, HttpResponse} import akka.stream.ActorMaterializer import akka.stream.scaladsl.Sink import akka.util.ByteString import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper} import com.typesafe.config.ConfigFactory import scala.concurrent.duration.{MILLISECONDS, _} import scala.concurrent.{Await, ExecutionContextExecutor, Future} object HttpUtil { private val mapper = new ObjectMapper() private val config = ConfigFactory.load private val ReadTimeout = FiniteDuration(config.getDuration("extract-index-from-es.read-timeout").toMillis, MILLISECONDS) // Elasticsearch uses the POST verb in some places where the request is actually idempotent. // Requests that use POST, but are known to be idempotent can use this method. // The presence of any non-idempotent request in-flight causes Akka to not retry, and that will tend result in // entire downloads failing more often. val SAFE_POST = HttpMethod( value = "POST", isSafe = true, isIdempotent = true, requestEntityAcceptance = Tolerated) def resultAsync(request: HttpRequest, action: String) (implicit system: ActorSystem, executionContext: ExecutionContextExecutor, actorMaterializer: ActorMaterializer): Future[ByteString] = Http().singleRequest(request).map { case HttpResponse(status, _, entity, _) if status.isSuccess => entity.dataBytes .fold(ByteString.empty)(_ ++ _) .runWith(Sink.head) case HttpResponse(status, _, entity, _) => val message = Await.result(entity.toStrict(10.seconds).map(_.data), 10.seconds).utf8String throw new RuntimeException(s"HTTP request for $action failed. Status code: $status, message:$message") } .flatMap(identity) def result(request: HttpRequest, action: String, timeout: FiniteDuration = ReadTimeout) (implicit system: ActorSystem, executionContext: ExecutionContextExecutor, actorMaterializer: ActorMaterializer): ByteString = Await.result(resultAsync(request, action), timeout) def jsonResult(request: HttpRequest, action: String, timeout: FiniteDuration = ReadTimeout) (implicit system: ActorSystem, executionContext: ExecutionContextExecutor, actorMaterializer: ActorMaterializer): JsonNode = mapper.readTree(result(request, action, timeout).utf8String) def jsonResultAsync(request: HttpRequest, action: String) (implicit system: ActorSystem, executionContext: ExecutionContextExecutor, actorMaterializer: ActorMaterializer): Future[JsonNode] = resultAsync(request, action).map((bytes: ByteString) => mapper.readTree(bytes.utf8String)) }
Example 14
Source File: CorsSettingsImpl.scala From akka-http-cors with Apache License 2.0 | 5 votes |
package ch.megard.akka.http.cors.scaladsl.settings import akka.http.scaladsl.model.{HttpHeader, HttpMethod} import akka.http.scaladsl.model.headers._ import ch.megard.akka.http.cors.scaladsl.model.{HttpHeaderRange, HttpOriginMatcher} import scala.collection.immutable.Seq final private[akka] case class CorsSettingsImpl( allowGenericHttpRequests: Boolean, allowCredentials: Boolean, allowedOrigins: HttpOriginMatcher, allowedHeaders: HttpHeaderRange, allowedMethods: Seq[HttpMethod], exposedHeaders: Seq[String], maxAge: Option[Long] ) extends CorsSettings { override def productPrefix = "CorsSettings" private def accessControlExposeHeaders: Option[`Access-Control-Expose-Headers`] = if (exposedHeaders.nonEmpty) Some(`Access-Control-Expose-Headers`(exposedHeaders)) else None private def accessControlAllowCredentials: Option[`Access-Control-Allow-Credentials`] = if (allowCredentials) Some(`Access-Control-Allow-Credentials`(true)) else None private def accessControlMaxAge: Option[`Access-Control-Max-Age`] = maxAge.map(`Access-Control-Max-Age`.apply) private def accessControlAllowMethods: `Access-Control-Allow-Methods` = `Access-Control-Allow-Methods`(allowedMethods) private def accessControlAllowHeaders(requestHeaders: Seq[String]): Option[`Access-Control-Allow-Headers`] = allowedHeaders match { case HttpHeaderRange.Default(headers) => Some(`Access-Control-Allow-Headers`(headers)) case HttpHeaderRange.* if requestHeaders.nonEmpty => Some(`Access-Control-Allow-Headers`(requestHeaders)) case _ => None } private def accessControlAllowOrigin(origins: Seq[HttpOrigin]): `Access-Control-Allow-Origin` = if (allowedOrigins == HttpOriginMatcher.* && !allowCredentials) `Access-Control-Allow-Origin`.* else `Access-Control-Allow-Origin`.forRange(HttpOriginRange.Default(origins)) // Cache headers that are always included in a preflight response private val basePreflightResponseHeaders: List[HttpHeader] = List(accessControlAllowMethods) ++ accessControlMaxAge ++ accessControlAllowCredentials // Cache headers that are always included in an actual response private val baseActualResponseHeaders: List[HttpHeader] = accessControlExposeHeaders.toList ++ accessControlAllowCredentials def preflightResponseHeaders(origins: Seq[HttpOrigin], requestHeaders: Seq[String]): List[HttpHeader] = accessControlAllowHeaders(requestHeaders) match { case Some(h) => h :: accessControlAllowOrigin(origins) :: basePreflightResponseHeaders case None => accessControlAllowOrigin(origins) :: basePreflightResponseHeaders } def actualResponseHeaders(origins: Seq[HttpOrigin]): List[HttpHeader] = accessControlAllowOrigin(origins) :: baseActualResponseHeaders }