aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Smith <zach@driver.xyz>2018-01-18 16:55:36 -0800
committerZach Smith <zach@driver.xyz>2018-02-20 10:34:22 -0800
commite207352038e171e899695c895108fcca833ef70b (patch)
treece6bb1d3c371bc1ed8337ae179cacc3078e6143d
parentd534ce2309052329506b31b17ae137950757890f (diff)
downloaddriver-core-e207352038e171e899695c895108fcca833ef70b.tar.gz
driver-core-e207352038e171e899695c895108fcca833ef70b.tar.bz2
driver-core-e207352038e171e899695c895108fcca833ef70b.zip
Respond with correct cors headers for all rejections
-rw-r--r--src/main/scala/xyz/driver/core/app/DriverApp.scala38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/main/scala/xyz/driver/core/app/DriverApp.scala b/src/main/scala/xyz/driver/core/app/DriverApp.scala
index df80c3d..bc9d634 100644
--- a/src/main/scala/xyz/driver/core/app/DriverApp.scala
+++ b/src/main/scala/xyz/driver/core/app/DriverApp.scala
@@ -223,6 +223,25 @@ class DriverApp(
}
object DriverApp {
+ def defaultCorsHeaders: Directive0 = {
+ optionalHeaderValueByType[Origin](()) flatMap { originHeader =>
+ respondWithHeaders(
+ List[HttpHeader](
+ allowOrigin(originHeader),
+ `Access-Control-Allow-Headers`(AllowedHeaders: _*),
+ `Access-Control-Expose-Headers`(AllowedHeaders: _*)
+ ))
+ }
+ }
+
+ def corsAllowedMethodHeaders(methods: scala.collection.immutable.Seq[HttpMethod]): Directive0 = {
+ respondWithHeaders(
+ List[HttpHeader](
+ Allow(methods),
+ `Access-Control-Allow-Methods`(methods)
+ ))
+ }
+
implicit def rejectionHandler: RejectionHandler =
RejectionHandler
.newBuilder()
@@ -230,20 +249,19 @@ object DriverApp {
val methods = rejections map (_.supported)
lazy val names = methods map (_.name) mkString ", "
- options { ctx =>
- optionalHeaderValueByType[Origin](()) { originHeader =>
- respondWithHeaders(List[HttpHeader](
- Allow(methods),
- `Access-Control-Allow-Methods`(methods),
- allowOrigin(originHeader),
- `Access-Control-Allow-Headers`(AllowedHeaders: _*),
- `Access-Control-Expose-Headers`(AllowedHeaders: _*)
- )) {
+ options {
+ defaultCorsHeaders {
+ corsAllowedMethodHeaders(methods) {
complete(s"Supported methods: $names.")
}
- }(ctx)
+ }
} ~
complete(MethodNotAllowed -> s"HTTP method not allowed, supported methods: $names!")
}
+ .handleAll[Rejection] { rejections =>
+ defaultCorsHeaders {
+ RejectionHandler.default(rejections).getOrElse(reject)
+ }
+ }
.result()
}