diff options
-rw-r--r-- | src/main/scala/xyz/driver/core/app.scala | 20 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/rest.scala | 2 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala index eb9f7ee..fd31bc0 100644 --- a/src/main/scala/xyz/driver/core/app.scala +++ b/src/main/scala/xyz/driver/core/app.scala @@ -7,10 +7,10 @@ import akka.http.scaladsl.Http import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport import akka.http.scaladsl.model.StatusCodes._ import akka.http.scaladsl.model._ -import akka.http.scaladsl.model.headers.{HttpOriginRange, RawHeader, `Access-Control-Allow-Origin`} +import akka.http.scaladsl.model.headers.{Allow, HttpOriginRange, RawHeader, `Access-Control-Allow-Origin`} import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.RouteResult._ -import akka.http.scaladsl.server.{ExceptionHandler, Route, RouteConcatenation} +import akka.http.scaladsl.server._ import akka.stream.ActorMaterializer import com.github.swagger.akka.SwaggerHttpService._ import com.typesafe.config.Config @@ -69,6 +69,22 @@ object app { private def extractHeader(request: HttpRequest)(headerName: String): Option[String] = request.headers.find(_.name().toLowerCase === headerName).map(_.value()) + protected implicit def rejectionHandler = + RejectionHandler + .newBuilder() + .handleAll[MethodRejection] { rejections => + val methods = rejections map (_.supported) + lazy val names = methods map (_.name) mkString ", " + + respondWithHeader(Allow(methods)) { + options { + complete(s"Supported methods: $names.") + } ~ + complete(MethodNotAllowed -> s"HTTP method not allowed, supported methods: $names!") + } + } + .result() + protected def bindHttp(modules: Seq[Module]): Unit = { val serviceTypes = modules.flatMap(_.routeTypes) val swaggerService = swaggerOverride(serviceTypes) diff --git a/src/main/scala/xyz/driver/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala index f30d1ae..0484ab1 100644 --- a/src/main/scala/xyz/driver/core/rest.scala +++ b/src/main/scala/xyz/driver/core/rest.scala @@ -223,7 +223,7 @@ package rest { object CachedTokenAuthorization { def apply[U <: User](publicKeyFile: Path, issuer: String): CachedTokenAuthorization[U] = { lazy val publicKey: PublicKey = { - val publicKeyBase64Encoded = Files.readAllBytes(publicKeyFile) + val publicKeyBase64Encoded = new String(Files.readAllBytes(publicKeyFile)).trim val publicKeyBase64Decoded = java.util.Base64.getDecoder.decode(publicKeyBase64Encoded) val spec = new X509EncodedKeySpec(publicKeyBase64Decoded) KeyFactory.getInstance("RSA").generatePublic(spec) |