aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala')
-rw-r--r--src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
index 4020d57..bd8f078 100644
--- a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
+++ b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala
@@ -1,5 +1,7 @@
package xyz.driver.core.rest
+import java.net.InetAddress
+
import xyz.driver.core.auth.{AuthToken, PermissionsToken, User}
import xyz.driver.core.generators
@@ -7,6 +9,7 @@ import scalaz.Scalaz.{mapEqual, stringInstance}
import scalaz.syntax.equal._
class ServiceRequestContext(val trackingId: String = generators.nextUuid().toString,
+ val originatingIP: Option[InetAddress] = None,
val contextHeaders: Map[String, String] = Map.empty[String, String]) {
def authToken: Option[AuthToken] =
contextHeaders.get(AuthProvider.AuthenticationTokenHeader).map(AuthToken.apply)
@@ -17,28 +20,32 @@ class ServiceRequestContext(val trackingId: String = generators.nextUuid().toStr
def withAuthToken(authToken: AuthToken): ServiceRequestContext =
new ServiceRequestContext(
trackingId,
+ originatingIP,
contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value)
)
def withAuthenticatedUser[U <: User](authToken: AuthToken, user: U): AuthorizedServiceRequestContext[U] =
new AuthorizedServiceRequestContext(
trackingId,
+ originatingIP,
contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value),
user
)
override def hashCode(): Int =
- Seq[Any](trackingId, contextHeaders).foldLeft(31)((result, obj) => 31 * result + obj.hashCode())
+ Seq[Any](trackingId, originatingIP, contextHeaders).foldLeft(31)((result, obj) => 31 * result + obj.hashCode())
override def equals(obj: Any): Boolean = obj match {
- case ctx: ServiceRequestContext => trackingId === ctx.trackingId && contextHeaders === ctx.contextHeaders
- case _ => false
+ case ctx: ServiceRequestContext =>
+ trackingId === ctx.trackingId && originatingIP == originatingIP && contextHeaders === ctx.contextHeaders
+ case _ => false
}
override def toString: String = s"ServiceRequestContext($trackingId, $contextHeaders)"
}
class AuthorizedServiceRequestContext[U <: User](override val trackingId: String = generators.nextUuid().toString,
+ override val originatingIP: Option[InetAddress] = None,
override val contextHeaders: Map[String, String] =
Map.empty[String, String],
val authenticatedUser: U)
@@ -47,6 +54,7 @@ class AuthorizedServiceRequestContext[U <: User](override val trackingId: String
def withPermissionsToken(permissionsToken: PermissionsToken): AuthorizedServiceRequestContext[U] =
new AuthorizedServiceRequestContext[U](
trackingId,
+ originatingIP,
contextHeaders.updated(AuthProvider.PermissionsTokenHeader, permissionsToken.value),
authenticatedUser)