diff options
author | Zach Smith <zach@driver.xyz> | 2018-08-01 16:11:21 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-01 16:11:21 -0700 |
commit | 5e1aa32b1a5adaf73817b7141cbf0dc6650b5b42 (patch) | |
tree | 897fa40787964177cecc1e1f9bfbea60a91683b4 /src/main/scala/xyz/driver/core/rest/package.scala | |
parent | 0ff0438a25d3c2fdbd89b2092dde34984d06a92d (diff) | |
download | driver-core-5e1aa32b1a5adaf73817b7141cbf0dc6650b5b42.tar.gz driver-core-5e1aa32b1a5adaf73817b7141cbf0dc6650b5b42.tar.bz2 driver-core-5e1aa32b1a5adaf73817b7141cbf0dc6650b5b42.zip |
[RFC] Use akka's built-in authenticate/authorize directives in AuthProvider (#136)
* Use akka's built-in authenticate/authorize directives in AuthProvider
* Move AuthProvider companion object to AuthProvider file, move realm to parameter of AuthProvider
* Add secondary constructor to maintain ABI compat
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest/package.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/rest/package.scala | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala index d4d01df..7d67138 100644 --- a/src/main/scala/xyz/driver/core/rest/package.scala +++ b/src/main/scala/xyz/driver/core/rest/package.scala @@ -14,6 +14,7 @@ import akka.util.ByteString import scalaz.Scalaz.{intInstance, stringInstance} import scalaz.syntax.equal._ import scalaz.{Functor, OptionT} +import xyz.driver.core.rest.auth.AuthProvider import xyz.driver.tracing.TracingDirectives import scala.concurrent.Future @@ -90,13 +91,6 @@ object `package` { val SpanHeaderName: String = TracingDirectives.SpanHeaderName } - object AuthProvider { - val AuthenticationTokenHeader: String = ContextHeaders.AuthenticationTokenHeader - val PermissionsTokenHeader: String = ContextHeaders.PermissionsTokenHeader - val SetAuthenticationTokenHeader: String = "set-authorization" - val SetPermissionsTokenHeader: String = "set-permissions" - } - val AllowedHeaders: Seq[String] = Seq( "Origin", @@ -131,8 +125,18 @@ object `package` { originHeader.fold[HttpOriginRange](HttpOriginRange.*)(h => HttpOriginRange(h.origins: _*))) def serviceContext: Directive1[ServiceRequestContext] = { + def fixAuthorizationHeader(headers: Seq[HttpHeader]): collection.immutable.Seq[HttpHeader] = { + headers.map({ header => + if (header.name === ContextHeaders.AuthenticationTokenHeader && !header.value.startsWith( + ContextHeaders.AuthenticationHeaderPrefix)) { + Authorization(OAuth2BearerToken(header.value)) + } else header + })(collection.breakOut) + } extractClientIP flatMap { remoteAddress => - extract(ctx => extractServiceContext(ctx.request, remoteAddress)) + mapRequest(req => req.withHeaders(fixAuthorizationHeader(req.headers))) tflatMap { _ => + extract(ctx => extractServiceContext(ctx.request, remoteAddress)) + } } } |