From 7ea0a92098ce22eda15e084bee0a754fc8712176 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 6 Mar 2018 10:53:29 +0700 Subject: Implemented 'X-CLIENT-FINGERPRINT' extraction from HTTP header --- src/main/scala/xyz/driver/core/rest/package.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala index 19752a1..632091a 100644 --- a/src/main/scala/xyz/driver/core/rest/package.scala +++ b/src/main/scala/xyz/driver/core/rest/package.scala @@ -66,6 +66,7 @@ object `package` { val AuthenticationTokenHeader: String = "Authorization" val PermissionsTokenHeader: String = "Permissions" val AuthenticationHeaderPrefix: String = "Bearer" + val ClientFingerprintHeader: String = "X-CLIENT-FINGERPRINT" val TrackingIdHeader: String = "X-Trace" val StacktraceHeader: String = "X-Stacktrace" val OriginatingIpHeader: String = "X-Forwarded-For" @@ -90,7 +91,7 @@ object `package` { "Content-Length", "Accept", "X-Trace", - "X-Client-Fingerprint", + ContextHeaders.ClientFingerprintHeader, "Access-Control-Allow-Methods", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", @@ -170,7 +171,7 @@ object `package` { h.name === ContextHeaders.AuthenticationTokenHeader || h.name === ContextHeaders.TrackingIdHeader || h.name === ContextHeaders.PermissionsTokenHeader || h.name === ContextHeaders.StacktraceHeader || h.name === ContextHeaders.TraceHeaderName || h.name === ContextHeaders.SpanHeaderName || - h.name === ContextHeaders.OriginatingIpHeader + h.name === ContextHeaders.OriginatingIpHeader || h.name === ContextHeaders.ClientFingerprintHeader } map { header => if (header.name === ContextHeaders.AuthenticationTokenHeader) { header.name -> header.value.stripPrefix(ContextHeaders.AuthenticationHeaderPrefix).trim -- cgit v1.2.3 From f74f73681a09b5a2ac6bac8b560e2988ebc1279b Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Tue, 6 Mar 2018 11:01:11 +0700 Subject: Fixed TimeSet test --- src/test/scala/xyz/driver/core/TimeTest.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/scala/xyz/driver/core/TimeTest.scala b/src/test/scala/xyz/driver/core/TimeTest.scala index b83137c..2aa3edf 100644 --- a/src/test/scala/xyz/driver/core/TimeTest.scala +++ b/src/test/scala/xyz/driver/core/TimeTest.scala @@ -73,7 +73,9 @@ class TimeTest extends FlatSpec with Matchers with Checkers { } it should "have correct textual representations" in { - + import java.util.Locale + import java.util.Locale._ + Locale.setDefault(ENGLISH) textualDate(TimeZone.getTimeZone("EDT"))(Time(1468937089834L)) should be("July 19, 2016") textualTime(TimeZone.getTimeZone("PDT"))(Time(1468937089834L)) should be("Jul 19, 2016 02:04:49 PM") } -- cgit v1.2.3 From 1ea8a5c1298edae003f5d4d8c4b9e8581d834b04 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Mon, 12 Mar 2018 17:18:04 +0700 Subject: Implemented extraction of fingerprint header; Added fingerprint hash to ServiceRequestContext and AuthorizedServiceRequestContext classes --- src/main/scala/xyz/driver/core/rest/package.scala | 9 ++++++++- .../scala/xyz/driver/core/rest/serviceRequestContext.scala | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala index 632091a..3b17167 100644 --- a/src/main/scala/xyz/driver/core/rest/package.scala +++ b/src/main/scala/xyz/driver/core/rest/package.scala @@ -91,12 +91,12 @@ object `package` { "Content-Length", "Accept", "X-Trace", - ContextHeaders.ClientFingerprintHeader, "Access-Control-Allow-Methods", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Server", "Date", + ContextHeaders.ClientFingerprintHeader, ContextHeaders.TrackingIdHeader, ContextHeaders.TraceHeaderName, ContextHeaders.SpanHeaderName, @@ -148,6 +148,7 @@ object `package` { new ServiceRequestContext( extractTrackingId(request), extractOriginatingIP(request, remoteAddress), + extractFingerprintHash(request), extractContextHeaders(request)) def extractTrackingId(request: HttpRequest): String = { @@ -156,6 +157,12 @@ object `package` { .fold(java.util.UUID.randomUUID.toString)(_.value()) } + def extractFingerprintHash(request: HttpRequest): Option[String] = { + request.headers + .find(_.name === ContextHeaders.ClientFingerprintHeader) + .map(_.value()) + } + def extractOriginatingIP(request: HttpRequest, remoteAddress: RemoteAddress): Option[InetAddress] = { request.headers .find(_.name === ContextHeaders.OriginatingIpHeader) diff --git a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala index 5282956..7206049 100644 --- a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala +++ b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala @@ -6,11 +6,13 @@ import xyz.driver.core.auth.{AuthToken, PermissionsToken, User} import xyz.driver.core.generators import scalaz.Scalaz.{mapEqual, stringInstance} +import scalaz.Scalaz.optionEqual import scalaz.syntax.equal._ class ServiceRequestContext( val trackingId: String = generators.nextUuid().toString, val originatingIp: Option[InetAddress] = None, + val fingerprintHash: Option[String] = None, val contextHeaders: Map[String, String] = Map.empty[String, String]) { def authToken: Option[AuthToken] = contextHeaders.get(AuthProvider.AuthenticationTokenHeader).map(AuthToken.apply) @@ -22,6 +24,7 @@ class ServiceRequestContext( new ServiceRequestContext( trackingId, originatingIp, + fingerprintHash, contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value) ) @@ -29,16 +32,21 @@ class ServiceRequestContext( new AuthorizedServiceRequestContext( trackingId, originatingIp, + fingerprintHash, contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value), user ) override def hashCode(): Int = - Seq[Any](trackingId, originatingIp, contextHeaders).foldLeft(31)((result, obj) => 31 * result + obj.hashCode()) + Seq[Any](trackingId, originatingIp, fingerprintHash, contextHeaders) + .foldLeft(31)((result, obj) => 31 * result + obj.hashCode()) override def equals(obj: Any): Boolean = obj match { case ctx: ServiceRequestContext => - trackingId === ctx.trackingId && originatingIp == originatingIp && contextHeaders === ctx.contextHeaders + trackingId === ctx.trackingId && + originatingIp == originatingIp && + fingerprintHash === ctx.fingerprintHash && + contextHeaders === ctx.contextHeaders case _ => false } @@ -48,6 +56,7 @@ class ServiceRequestContext( class AuthorizedServiceRequestContext[U <: User]( override val trackingId: String = generators.nextUuid().toString, override val originatingIp: Option[InetAddress] = None, + override val fingerprintHash: Option[String] = None, override val contextHeaders: Map[String, String] = Map.empty[String, String], val authenticatedUser: U) extends ServiceRequestContext { @@ -56,6 +65,7 @@ class AuthorizedServiceRequestContext[U <: User]( new AuthorizedServiceRequestContext[U]( trackingId, originatingIp, + fingerprintHash, contextHeaders.updated(AuthProvider.PermissionsTokenHeader, permissionsToken.value), authenticatedUser) -- cgit v1.2.3 From 9ffa65c1ccdc5fdea4ccec26c4b39557d45867f7 Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Wed, 4 Apr 2018 16:29:55 +0700 Subject: Removed fingerprint hash from ServiceRequestContext and it's derivates --- src/main/scala/xyz/driver/core/rest/package.scala | 1 - src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala | 9 +-------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala index 07eb92e..b35a07d 100644 --- a/src/main/scala/xyz/driver/core/rest/package.scala +++ b/src/main/scala/xyz/driver/core/rest/package.scala @@ -148,7 +148,6 @@ object `package` { new ServiceRequestContext( extractTrackingId(request), extractOriginatingIP(request, remoteAddress), - extractFingerprintHash(request), extractContextHeaders(request)) def extractTrackingId(request: HttpRequest): String = { diff --git a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala index 7206049..775106e 100644 --- a/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala +++ b/src/main/scala/xyz/driver/core/rest/serviceRequestContext.scala @@ -6,13 +6,11 @@ import xyz.driver.core.auth.{AuthToken, PermissionsToken, User} import xyz.driver.core.generators import scalaz.Scalaz.{mapEqual, stringInstance} -import scalaz.Scalaz.optionEqual import scalaz.syntax.equal._ class ServiceRequestContext( val trackingId: String = generators.nextUuid().toString, val originatingIp: Option[InetAddress] = None, - val fingerprintHash: Option[String] = None, val contextHeaders: Map[String, String] = Map.empty[String, String]) { def authToken: Option[AuthToken] = contextHeaders.get(AuthProvider.AuthenticationTokenHeader).map(AuthToken.apply) @@ -24,7 +22,6 @@ class ServiceRequestContext( new ServiceRequestContext( trackingId, originatingIp, - fingerprintHash, contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value) ) @@ -32,20 +29,18 @@ class ServiceRequestContext( new AuthorizedServiceRequestContext( trackingId, originatingIp, - fingerprintHash, contextHeaders.updated(AuthProvider.AuthenticationTokenHeader, authToken.value), user ) override def hashCode(): Int = - Seq[Any](trackingId, originatingIp, fingerprintHash, contextHeaders) + 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 && originatingIp == originatingIp && - fingerprintHash === ctx.fingerprintHash && contextHeaders === ctx.contextHeaders case _ => false } @@ -56,7 +51,6 @@ class ServiceRequestContext( class AuthorizedServiceRequestContext[U <: User]( override val trackingId: String = generators.nextUuid().toString, override val originatingIp: Option[InetAddress] = None, - override val fingerprintHash: Option[String] = None, override val contextHeaders: Map[String, String] = Map.empty[String, String], val authenticatedUser: U) extends ServiceRequestContext { @@ -65,7 +59,6 @@ class AuthorizedServiceRequestContext[U <: User]( new AuthorizedServiceRequestContext[U]( trackingId, originatingIp, - fingerprintHash, contextHeaders.updated(AuthProvider.PermissionsTokenHeader, permissionsToken.value), authenticatedUser) -- cgit v1.2.3 From 48cc992aa03b97475f489494255864f2cd4cf7db Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Fri, 6 Apr 2018 13:41:16 +0700 Subject: Ranamed header 'ClientFingerprintHeader' --- src/main/scala/xyz/driver/core/rest/package.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala index b35a07d..385a313 100644 --- a/src/main/scala/xyz/driver/core/rest/package.scala +++ b/src/main/scala/xyz/driver/core/rest/package.scala @@ -66,7 +66,7 @@ object `package` { val AuthenticationTokenHeader: String = "Authorization" val PermissionsTokenHeader: String = "Permissions" val AuthenticationHeaderPrefix: String = "Bearer" - val ClientFingerprintHeader: String = "X-CLIENT-FINGERPRINT" + val ClientFingerprintHeader: String = "X-Client-Fingerprint" val TrackingIdHeader: String = "X-Trace" val StacktraceHeader: String = "X-Stacktrace" val OriginatingIpHeader: String = "X-Forwarded-For" -- cgit v1.2.3