aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/drivergrp/core/rest.scala
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-10-21 16:07:05 -0400
committervlad <vlad@drivergrp.com>2016-10-21 16:07:05 -0400
commit02810f5eac3b4ce6a5d1128281a01b2a2ed0647c (patch)
treea733b421759216a7f12d227d2f912eecdfa842aa /src/main/scala/com/drivergrp/core/rest.scala
parent7c77f5ff23e4b0f8d5e189492bc4f25f847adc00 (diff)
downloaddriver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.tar.gz
driver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.tar.bz2
driver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.zip
Renamed package to xyz, New formatting, authorize directive supporting multiple permissions
Diffstat (limited to 'src/main/scala/com/drivergrp/core/rest.scala')
-rw-r--r--src/main/scala/com/drivergrp/core/rest.scala126
1 files changed, 0 insertions, 126 deletions
diff --git a/src/main/scala/com/drivergrp/core/rest.scala b/src/main/scala/com/drivergrp/core/rest.scala
deleted file mode 100644
index d97e13e..0000000
--- a/src/main/scala/com/drivergrp/core/rest.scala
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.drivergrp.core
-
-import akka.actor.ActorSystem
-import akka.http.scaladsl.Http
-import akka.http.scaladsl.model._
-import akka.http.scaladsl.model.headers.RawHeader
-import akka.http.scaladsl.unmarshalling.Unmarshal
-import akka.stream.ActorMaterializer
-import akka.stream.scaladsl.Flow
-import akka.util.ByteString
-import com.drivergrp.core.auth.{AuthService, AuthToken}
-import com.drivergrp.core.crypto.Crypto
-import com.drivergrp.core.logging.Logger
-import com.drivergrp.core.stats.Stats
-import com.drivergrp.core.time.TimeRange
-import com.drivergrp.core.time.provider.TimeProvider
-import com.github.swagger.akka.model._
-import com.github.swagger.akka.{HasActorSystem, SwaggerHttpService}
-import com.typesafe.config.Config
-
-import scala.concurrent.{ExecutionContext, Future}
-import scala.util.{Failure, Success}
-import scalaz.{Failure => _, Success => _}
-
-object rest {
-
- trait Service
-
- trait ServiceTransport {
-
- def sendRequest(authToken: AuthToken)(requestStub: HttpRequest): Future[Unmarshal[ResponseEntity]]
- }
-
- trait ServiceDiscovery {
-
- def discover[T <: Service](serviceName: Name[Service]): T
- }
-
- class HttpRestServiceTransport(actorSystem: ActorSystem, executionContext: ExecutionContext,
- crypto: Crypto, log: Logger, stats: Stats, time: TimeProvider) extends ServiceTransport {
-
- protected implicit val materializer = ActorMaterializer()(actorSystem)
- protected implicit val execution = executionContext
-
- def sendRequest(authToken: AuthToken)(requestStub: HttpRequest): Future[Unmarshal[ResponseEntity]] = {
-
- val requestTime = time.currentTime()
- val encryptionFlow = Flow[ByteString] map { bytes =>
- ByteString(crypto.encrypt(crypto.keyForToken(authToken))(bytes.toArray))
- }
- val decryptionFlow = Flow[ByteString] map { bytes =>
- ByteString(crypto.decrypt(crypto.keyForToken(authToken))(bytes.toArray))
- }
-
- val request = requestStub
- .withEntity(requestStub.entity.transformDataBytes(encryptionFlow))
- .withHeaders(
- RawHeader(AuthService.AuthenticationTokenHeader, authToken.value.value))
-
- log.audit(s"Sending to ${request.uri} request $request")
-
- val responseEntity = Http()(actorSystem).singleRequest(request)(materializer) map { response =>
- if(response.status == StatusCodes.NotFound) {
- Unmarshal(HttpEntity.Empty: ResponseEntity)
- } else if(response.status.isFailure()) {
- throw new Exception("Http status is failure " + response.status)
- } else {
- Unmarshal(response.entity.transformDataBytes(decryptionFlow))
- }
- }
-
- responseEntity.onComplete {
- case Success(r) =>
- val responseTime = time.currentTime()
- log.audit(s"Response from ${request.uri} to request $requestStub is successful")
- stats.recordStats(Seq("request", request.uri.toString, "success"), TimeRange(requestTime, responseTime), 1)
-
- case Failure(t: Throwable) =>
- val responseTime = time.currentTime()
- log.audit(s"Failed to receive response from ${request.uri} to request $requestStub")
- log.error(s"Failed to receive response from ${request.uri} to request $requestStub", t)
- stats.recordStats(Seq("request", request.uri.toString, "fail"), TimeRange(requestTime, responseTime), 1)
- } (executionContext)
-
- responseEntity
- }
- }
-
- import scala.reflect.runtime.universe._
-
- class Swagger(override val host: String,
- version: String,
- override val actorSystem: ActorSystem,
- override val apiTypes: Seq[Type],
- val config: Config) extends SwaggerHttpService with HasActorSystem {
-
- val materializer = ActorMaterializer()(actorSystem)
-
- override val basePath = config.getString("swagger.basePath")
- override val apiDocsPath = config.getString("swagger.docsPath")
-
- override val info = Info(
- config.getString("swagger.apiInfo.description"),
- version,
- config.getString("swagger.apiInfo.title"),
- config.getString("swagger.apiInfo.termsOfServiceUrl"),
- contact = Some(Contact(
- config.getString("swagger.apiInfo.contact.name"),
- config.getString("swagger.apiInfo.contact.url"),
- config.getString("swagger.apiInfo.contact.email")
- )),
- license = Some(License(
- config.getString("swagger.apiInfo.license"),
- config.getString("swagger.apiInfo.licenseUrl")
- )),
- vendorExtensions = Map.empty[String, AnyRef])
-
- def swaggerUI = get {
- pathPrefix("") {
- pathEndOrSingleSlash {
- getFromResource("swagger-ui/index.html")
- }
- } ~ getFromResourceDirectory("swagger-ui")
- }
- }
-}