aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/rest
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest')
-rw-r--r--src/main/scala/xyz/driver/core/rest/DriverRoute.scala18
-rw-r--r--src/main/scala/xyz/driver/core/rest/HttpRestServiceTransport.scala24
-rw-r--r--src/main/scala/xyz/driver/core/rest/PooledHttpClient.scala10
-rw-r--r--src/main/scala/xyz/driver/core/rest/RestService.scala4
-rw-r--r--src/main/scala/xyz/driver/core/rest/Swagger.scala13
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/AlwaysAllowAuthorization.scala2
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala2
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/Authorization.scala2
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/CachedTokenAuthorization.scala2
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/ChainedAuthorization.scala2
-rw-r--r--src/main/scala/xyz/driver/core/rest/errors/serviceException.scala3
-rw-r--r--src/main/scala/xyz/driver/core/rest/package.scala13
-rw-r--r--src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala17
13 files changed, 59 insertions, 53 deletions
diff --git a/src/main/scala/xyz/driver/core/rest/DriverRoute.scala b/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
index eb9a31a..4c483c6 100644
--- a/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
+++ b/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
@@ -55,10 +55,11 @@ trait DriverRoute {
case cm: ConcurrentModificationException =>
ctx =>
log.warn(s"Concurrent modification of the resource ${ctx.request.method} ${ctx.request.uri}", cm)
- errorResponse(ctx,
- StatusCodes.Conflict,
- "Resource was changed concurrently, try requesting a newer version",
- cm)(ctx)
+ errorResponse(
+ ctx,
+ StatusCodes.Conflict,
+ "Resource was changed concurrently, try requesting a newer version",
+ cm)(ctx)
case se: SQLException =>
ctx =>
@@ -98,10 +99,11 @@ trait DriverRoute {
}
}
- protected def errorResponse[T <: Exception](ctx: RequestContext,
- statusCode: StatusCode,
- message: String,
- exception: T): Route = {
+ protected def errorResponse[T <: Exception](
+ ctx: RequestContext,
+ statusCode: StatusCode,
+ message: String,
+ exception: T): Route = {
val trackingId = rest.extractTrackingId(ctx.request)
MDC.put("trackingId", trackingId)
complete(HttpResponse(statusCode, entity = message))
diff --git a/src/main/scala/xyz/driver/core/rest/HttpRestServiceTransport.scala b/src/main/scala/xyz/driver/core/rest/HttpRestServiceTransport.scala
index 376b154..235c61d 100644
--- a/src/main/scala/xyz/driver/core/rest/HttpRestServiceTransport.scala
+++ b/src/main/scala/xyz/driver/core/rest/HttpRestServiceTransport.scala
@@ -15,12 +15,13 @@ import xyz.driver.core.time.provider.TimeProvider
import scala.concurrent.{ExecutionContext, Future}
import scala.util.{Failure, Success}
-class HttpRestServiceTransport(applicationName: Name[App],
- applicationVersion: String,
- actorSystem: ActorSystem,
- executionContext: ExecutionContext,
- log: Logger,
- time: TimeProvider)
+class HttpRestServiceTransport(
+ applicationName: Name[App],
+ applicationVersion: String,
+ actorSystem: ActorSystem,
+ executionContext: ExecutionContext,
+ log: Logger,
+ time: TimeProvider)
extends ServiceTransport {
protected implicit val execution: ExecutionContext = executionContext
@@ -36,10 +37,11 @@ class HttpRestServiceTransport(applicationName: Name[App],
case (ContextHeaders.TrackingIdHeader, _) =>
RawHeader(ContextHeaders.TrackingIdHeader, context.trackingId)
case (ContextHeaders.StacktraceHeader, _) =>
- RawHeader(ContextHeaders.StacktraceHeader,
- Option(MDC.get("stack"))
- .orElse(context.contextHeaders.get(ContextHeaders.StacktraceHeader))
- .getOrElse(""))
+ RawHeader(
+ ContextHeaders.StacktraceHeader,
+ Option(MDC.get("stack"))
+ .orElse(context.contextHeaders.get(ContextHeaders.StacktraceHeader))
+ .getOrElse(""))
case (header, headerValue) => RawHeader(header, headerValue)
}: _*)
@@ -67,7 +69,7 @@ class HttpRestServiceTransport(applicationName: Name[App],
}
def sendRequest(context: ServiceRequestContext)(requestStub: HttpRequest)(
- implicit mat: Materializer): Future[Unmarshal[ResponseEntity]] = {
+ implicit mat: Materializer): Future[Unmarshal[ResponseEntity]] = {
sendRequestGetResponse(context)(requestStub) flatMap { response =>
if (response.status == StatusCodes.NotFound) {
diff --git a/src/main/scala/xyz/driver/core/rest/PooledHttpClient.scala b/src/main/scala/xyz/driver/core/rest/PooledHttpClient.scala
index 2c9dcac..2854257 100644
--- a/src/main/scala/xyz/driver/core/rest/PooledHttpClient.scala
+++ b/src/main/scala/xyz/driver/core/rest/PooledHttpClient.scala
@@ -14,11 +14,11 @@ import scala.concurrent.duration._
import scala.util.{Failure, Success}
class PooledHttpClient(
- baseUri: Uri,
- applicationName: Name[App],
- applicationVersion: String,
- requestRateLimit: Int = 64,
- requestQueueSize: Int = 1024)(implicit actorSystem: ActorSystem, executionContext: ExecutionContext)
+ baseUri: Uri,
+ applicationName: Name[App],
+ applicationVersion: String,
+ requestRateLimit: Int = 64,
+ requestQueueSize: Int = 1024)(implicit actorSystem: ActorSystem, executionContext: ExecutionContext)
extends HttpClient {
private val host = baseUri.authority.host.toString()
diff --git a/src/main/scala/xyz/driver/core/rest/RestService.scala b/src/main/scala/xyz/driver/core/rest/RestService.scala
index aed8d28..c1d883a 100644
--- a/src/main/scala/xyz/driver/core/rest/RestService.scala
+++ b/src/main/scala/xyz/driver/core/rest/RestService.scala
@@ -24,11 +24,11 @@ trait RestService extends Service {
OptionT[Future, Unit](request.flatMap(_.to[String]).map(_ => Option(())))
protected def optionalResponse[T](request: Future[Unmarshal[ResponseEntity]])(
- implicit um: Unmarshaller[ResponseEntity, Option[T]]): OptionT[Future, T] =
+ implicit um: Unmarshaller[ResponseEntity, Option[T]]): OptionT[Future, T] =
OptionT[Future, T](request.flatMap(_.fold(Option.empty[T])))
protected def listResponse[T](request: Future[Unmarshal[ResponseEntity]])(
- implicit um: Unmarshaller[ResponseEntity, List[T]]): ListT[Future, T] =
+ implicit um: Unmarshaller[ResponseEntity, List[T]]): ListT[Future, T] =
ListT[Future, T](request.flatMap(_.fold(List.empty[T])))
protected def jsonEntity(json: JsValue): RequestEntity =
diff --git a/src/main/scala/xyz/driver/core/rest/Swagger.scala b/src/main/scala/xyz/driver/core/rest/Swagger.scala
index e0efeaf..de785a7 100644
--- a/src/main/scala/xyz/driver/core/rest/Swagger.scala
+++ b/src/main/scala/xyz/driver/core/rest/Swagger.scala
@@ -10,12 +10,13 @@ import io.swagger.models.Scheme
import scala.reflect.runtime.universe._
-class Swagger(override val host: String,
- override val scheme: Scheme,
- version: String,
- override val actorSystem: ActorSystem,
- override val apiTypes: Seq[Type],
- val config: Config)
+class Swagger(
+ override val host: String,
+ override val scheme: Scheme,
+ version: String,
+ override val actorSystem: ActorSystem,
+ override val apiTypes: Seq[Type],
+ val config: Config)
extends SwaggerHttpService with HasActorSystem {
val materializer: ActorMaterializer = ActorMaterializer()(actorSystem)
diff --git a/src/main/scala/xyz/driver/core/rest/auth/AlwaysAllowAuthorization.scala b/src/main/scala/xyz/driver/core/rest/auth/AlwaysAllowAuthorization.scala
index ea29a6a..5007774 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/AlwaysAllowAuthorization.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/AlwaysAllowAuthorization.scala
@@ -7,7 +7,7 @@ import scala.concurrent.Future
class AlwaysAllowAuthorization[U <: User] extends Authorization[U] {
override def userHasPermissions(user: U, permissions: Seq[Permission])(
- implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
+ implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
val permissionsMap = permissions.map(_ -> true).toMap
Future.successful(AuthorizationResult(authorized = permissionsMap, ctx.permissionsToken))
}
diff --git a/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala b/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
index 35b65f7..9c89fc6 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
@@ -14,7 +14,7 @@ import scalaz.Scalaz.futureInstance
import scalaz.OptionT
abstract class AuthProvider[U <: User](val authorization: Authorization[U], log: Logger)(
- implicit execution: ExecutionContext) {
+ implicit execution: ExecutionContext) {
import akka.http.scaladsl.server._
import Directives._
diff --git a/src/main/scala/xyz/driver/core/rest/auth/Authorization.scala b/src/main/scala/xyz/driver/core/rest/auth/Authorization.scala
index 87d0614..1a5e9be 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/Authorization.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/Authorization.scala
@@ -7,5 +7,5 @@ import scala.concurrent.Future
trait Authorization[U <: User] {
def userHasPermissions(user: U, permissions: Seq[Permission])(
- implicit ctx: ServiceRequestContext): Future[AuthorizationResult]
+ implicit ctx: ServiceRequestContext): Future[AuthorizationResult]
}
diff --git a/src/main/scala/xyz/driver/core/rest/auth/CachedTokenAuthorization.scala b/src/main/scala/xyz/driver/core/rest/auth/CachedTokenAuthorization.scala
index 4f4c811..66de4ef 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/CachedTokenAuthorization.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/CachedTokenAuthorization.scala
@@ -13,7 +13,7 @@ import scalaz.syntax.std.boolean._
class CachedTokenAuthorization[U <: User](publicKey: => PublicKey, issuer: String) extends Authorization[U] {
override def userHasPermissions(user: U, permissions: Seq[Permission])(
- implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
+ implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
import spray.json._
def extractPermissionsFromTokenJSON(tokenObject: JsObject): Option[Map[String, Boolean]] =
diff --git a/src/main/scala/xyz/driver/core/rest/auth/ChainedAuthorization.scala b/src/main/scala/xyz/driver/core/rest/auth/ChainedAuthorization.scala
index f5eb402..131e7fc 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/ChainedAuthorization.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/ChainedAuthorization.scala
@@ -12,7 +12,7 @@ class ChainedAuthorization[U <: User](authorizations: Authorization[U]*)(implici
extends Authorization[U] {
override def userHasPermissions(user: U, permissions: Seq[Permission])(
- implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
+ implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = {
def allAuthorized(permissionsMap: Map[Permission, Boolean]): Boolean =
permissions.forall(permissionsMap.getOrElse(_, false))
diff --git a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
index e91a3c2..d842c94 100644
--- a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
+++ b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
@@ -9,8 +9,7 @@ final case class InvalidInputException(override val message: String = "Invalid i
final case class InvalidActionException(override val message: String = "This action is not allowed")
extends ServiceException
-final case class ResourceNotFoundException(override val message: String = "Resource not found")
- extends ServiceException
+final case class ResourceNotFoundException(override val message: String = "Resource not found") extends ServiceException
final case class ExternalServiceException(serviceName: String, serviceMessage: String) extends ServiceException {
override def message = s"Error while calling '$serviceName': $serviceMessage"
diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala
index 03313d1..9ac1b62 100644
--- a/src/main/scala/xyz/driver/core/rest/package.scala
+++ b/src/main/scala/xyz/driver/core/rest/package.scala
@@ -30,7 +30,7 @@ trait ServiceTransport {
def sendRequestGetResponse(context: ServiceRequestContext)(requestStub: HttpRequest): Future[HttpResponse]
def sendRequest(context: ServiceRequestContext)(requestStub: HttpRequest)(
- implicit mat: Materializer): Future[Unmarshal[ResponseEntity]]
+ implicit mat: Materializer): Future[Unmarshal[ResponseEntity]]
}
final case class Pagination(pageSize: Int, pageNumber: Int) {
@@ -40,8 +40,8 @@ final case class Pagination(pageSize: Int, pageNumber: Int) {
object `package` {
implicit class OptionTRestAdditions[T](optionT: OptionT[Future, T]) {
def responseOrNotFound(successCode: StatusCodes.Success = StatusCodes.OK)(
- implicit F: Functor[Future],
- em: ToEntityMarshaller[T]): Future[ToResponseMarshallable] = {
+ implicit F: Functor[Future],
+ em: ToEntityMarshaller[T]): Future[ToResponseMarshallable] = {
optionT.fold[ToResponseMarshallable](successCode -> _, StatusCodes.NotFound -> None)
}
}
@@ -101,9 +101,10 @@ object `package` {
}
def extractServiceContext(request: HttpRequest, remoteAddress: RemoteAddress): ServiceRequestContext =
- new ServiceRequestContext(extractTrackingId(request),
- extractOriginatingIP(request, remoteAddress),
- extractContextHeaders(request))
+ new ServiceRequestContext(
+ extractTrackingId(request),
+ extractOriginatingIP(request, remoteAddress),
+ extractContextHeaders(request))
def extractTrackingId(request: HttpRequest): String = {
request.headers
diff --git a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
index 58ff1f1..5282956 100644
--- a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
+++ b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
@@ -8,9 +8,10 @@ import xyz.driver.core.generators
import scalaz.Scalaz.{mapEqual, stringInstance}
import scalaz.syntax.equal._
-class ServiceRequestContext(val trackingId: String = generators.nextUuid().toString,
- val originatingIp: Option[InetAddress] = None,
- val contextHeaders: Map[String, String] = Map.empty[String, String]) {
+class ServiceRequestContext(
+ val trackingId: String = generators.nextUuid().toString,
+ val originatingIp: Option[InetAddress] = None,
+ val contextHeaders: Map[String, String] = Map.empty[String, String]) {
def authToken: Option[AuthToken] =
contextHeaders.get(AuthProvider.AuthenticationTokenHeader).map(AuthToken.apply)
@@ -44,11 +45,11 @@ class ServiceRequestContext(val trackingId: String = generators.nextUuid().toStr
override def toString: String = s"ServiceRequestContext($trackingId, $contextHeaders)"
}
-class AuthorizedServiceRequestContext[U <: User](override val trackingId: String = generators.nextUuid().toString,
- override val originatingIp: Option[InetAddress] = None,
- override val contextHeaders: Map[String, String] =
- Map.empty[String, String],
- val authenticatedUser: U)
+class AuthorizedServiceRequestContext[U <: User](
+ override val trackingId: String = generators.nextUuid().toString,
+ override val originatingIp: Option[InetAddress] = None,
+ override val contextHeaders: Map[String, String] = Map.empty[String, String],
+ val authenticatedUser: U)
extends ServiceRequestContext {
def withPermissionsToken(permissionsToken: PermissionsToken): AuthorizedServiceRequestContext[U] =