From 795f4f29e5f9148ffc20806c421a57b1f582fd68 Mon Sep 17 00:00:00 2001
From: Felipe D'Abrantes <felidabrantes@gmail>
Date: Fri, 14 Apr 2023 00:45:29 +0100
Subject: [PATCH] Include JWT in authentication request

---
 .../models/actions/AuthenticationFilter.scala    |  2 +-
 .../models/actions/AuthenticationRequest.scala   | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/backend-services/feed-service/app/models/actions/AuthenticationFilter.scala b/backend-services/feed-service/app/models/actions/AuthenticationFilter.scala
index 3e8ed31a..8b7b752a 100644
--- a/backend-services/feed-service/app/models/actions/AuthenticationFilter.scala
+++ b/backend-services/feed-service/app/models/actions/AuthenticationFilter.scala
@@ -21,7 +21,7 @@ class AuthenticationFilter @Inject() (implicit val executionContext: ExecutionCo
      * @return An optional Forbidden Result with which to abort the request.
      */
     override def filter[A](request: AuthenticationRequest[A]): Future[Option[Result]] = Future.successful {
-        if (!request.userId.isDefined) 
+        if (!request.requesterId.isDefined) 
             Some(Results.Forbidden("Invalid JWT Token"))
         else
             None
diff --git a/backend-services/feed-service/app/models/actions/AuthenticationRequest.scala b/backend-services/feed-service/app/models/actions/AuthenticationRequest.scala
index 3bd5452f..6573cd15 100644
--- a/backend-services/feed-service/app/models/actions/AuthenticationRequest.scala
+++ b/backend-services/feed-service/app/models/actions/AuthenticationRequest.scala
@@ -14,7 +14,8 @@ import play.api.libs.json.Json
 import javax.inject.Inject
 
 
-class AuthenticationRequest[A](val userId: Option[ObjectId], request: Request[A]) extends WrappedRequest[A](request)
+class AuthenticationRequest[A](val jwt: String, val requesterId: Option[ObjectId], request: Request[A]) 
+    extends WrappedRequest[A](request)
 
 
 /**
@@ -29,9 +30,8 @@ class AuthenticationTransformer @Inject() (implicit val executionContext: Execut
      * @return The new parameter to pass to the Action block.
      */
     override def transform[A](request: Request[A]) = Future.successful {
-        println(request)
-        val userId: Option[ObjectId] = processJWT(request)
-        new AuthenticationRequest(userId, request)
+        val (jwt: String, requesterId: Option[ObjectId]) = processJWT(request)
+        new AuthenticationRequest(jwt, requesterId, request)
     }
 
     /**
@@ -40,7 +40,7 @@ class AuthenticationTransformer @Inject() (implicit val executionContext: Execut
      * @param request The incoming request.
      * @return The user ID specified in the JWT's payload.
      */
-    def processJWT[A](request: Request[A]): Option[ObjectId] = {
+    def processJWT[A](request: Request[A]): (String, Option[ObjectId]) = {
         val privateKey = ConfigFactory.load().getString("jwt.privateKey")
 
         try {
@@ -52,14 +52,14 @@ class AuthenticationTransformer @Inject() (implicit val executionContext: Execut
 
             val content = payload.get.content
             val jsonContent = Json.parse(content)
-            val userId = (jsonContent \ "userId").as[String]
+            val requesterId = (jsonContent \ "userId").as[String]
             
-            Some(new ObjectId(userId))
+            (token, Some(new ObjectId(requesterId)))
         }
         catch {
             case ex: Throwable => {
                 println(s"JWT Error: $ex")
-                None
+                ("", None)
             }
         }
     }
-- 
GitLab