aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-05-30 11:50:03 -0700
committervlad <vlad@driver.xyz>2017-05-30 11:50:03 -0700
commit765e0302611aae47f9ca32eb3646f31e866ea484 (patch)
tree7093e31f9b16f89278ecf7c973ad305114279e53
parent451e1562f55c836c0876400f5302d8732c478539 (diff)
downloaddriver-core-765e0302611aae47f9ca32eb3646f31e866ea484.tar.gz
driver-core-765e0302611aae47f9ca32eb3646f31e866ea484.tar.bz2
driver-core-765e0302611aae47f9ca32eb3646f31e866ea484.zip
Custom rejection handler returning Ok to OPTIONS http methodv0.13.3
-rw-r--r--src/main/scala/xyz/driver/core/app.scala20
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)