diff options
author | vlad <vlad@driver.xyz> | 2017-05-30 11:50:03 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-05-30 11:50:03 -0700 |
commit | 765e0302611aae47f9ca32eb3646f31e866ea484 (patch) | |
tree | 7093e31f9b16f89278ecf7c973ad305114279e53 /src | |
parent | 451e1562f55c836c0876400f5302d8732c478539 (diff) | |
download | driver-core-765e0302611aae47f9ca32eb3646f31e866ea484.tar.gz driver-core-765e0302611aae47f9ca32eb3646f31e866ea484.tar.bz2 driver-core-765e0302611aae47f9ca32eb3646f31e866ea484.zip |
Custom rejection handler returning Ok to OPTIONS http methodv0.13.3
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/xyz/driver/core/app.scala | 20 |
1 files changed, 18 insertions, 2 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) |