From 7b6c9fd1022ebb82cbf5e47262efce577a6ce1ac Mon Sep 17 00:00:00 2001 From: Thimo Schneider Date: Thu, 21 Oct 2021 14:28:16 +0200 Subject: [PATCH 1/2] add username fallbacks for history entries --- .../com/campudus/tableaux/RequestContext.scala | 12 ++++++++++-- .../tableaux/database/model/HistoryModel.scala | 2 +- .../campudus/tableaux/router/RouterRegistry.scala | 13 ++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/scala/com/campudus/tableaux/RequestContext.scala b/src/main/scala/com/campudus/tableaux/RequestContext.scala index 54160e13..c1ce411d 100644 --- a/src/main/scala/com/campudus/tableaux/RequestContext.scala +++ b/src/main/scala/com/campudus/tableaux/RequestContext.scala @@ -3,6 +3,7 @@ package com.campudus.tableaux import com.campudus.tableaux.helper.JsonUtils import io.vertx.core.json.JsonArray import org.vertx.scala.core.json.{Json, JsonObject} +import io.vertx.scala.ext.web.Cookie object RequestContext { def apply(): RequestContext = new RequestContext() @@ -16,8 +17,8 @@ class RequestContext() { // for testing purposes, unit tests must reset the principal in setUp method def resetPrincipal(): Unit = principal = Json.emptyObj() - def getPrincipleString(name: String, defaultValue: String): String = { - principal.getString(name, defaultValue) + def getPrincipleString(name: String): String = { + principal.getString(name) } def getUserRoles: Seq[String] = { @@ -28,4 +29,11 @@ class RequestContext() { JsonUtils.asSeqOf[String](roles) } + +// field has to be mutable and is only set from RouterRegistry::routes + var cookies: Set[Cookie] = Set.empty[Cookie] // scalastyle:ignore + + def getCookieValue(name: String, defaultValue: String = "dev"): String = { + cookies.find(_.getName() == name).map(_.getValue()).getOrElse(defaultValue) + } } diff --git a/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala b/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala index a30b790e..0f02d012 100644 --- a/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala +++ b/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala @@ -141,7 +141,7 @@ case class CreateHistoryModel(tableauxModel: TableauxModel, connection: Database val attachmentModel = AttachmentModel(connection) private def getUserName: String = { - requestContext.getPrincipleString("preferred_username", "dev") + Option(requestContext.getPrincipleString("preferred_username")).getOrElse(requestContext.getCookieValue("userName", "unknown")) } private def retrieveCurrentLinkIds(table: Table, column: LinkColumn, rowId: RowId): Future[Seq[RowId]] = { diff --git a/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala b/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala index 0958ec06..40a2fc71 100644 --- a/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala +++ b/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala @@ -10,8 +10,9 @@ import com.typesafe.scalalogging.LazyLogging import io.vertx.lang.scala.VertxExecutionContext import io.vertx.scala.core.Vertx import io.vertx.scala.ext.auth.oauth2.providers.KeycloakAuth -import io.vertx.scala.ext.web.Router +import io.vertx.scala.ext.web.{Router, RoutingContext} import io.vertx.scala.ext.web.handler.OAuth2AuthHandler +import io.vertx.scala.ext.web.handler.CookieHandler object RouterRegistry extends LazyLogging { @@ -24,9 +25,12 @@ object RouterRegistry extends LazyLogging { implicit val roleModel: RoleModel = RoleModel(tableauxConfig.rolePermissions, isAuthorization) + val mainRouter: Router = Router.router(vertx) implicit val requestContext: RequestContext = RequestContext() + mainRouter.route().handler(CookieHandler.create()) + mainRouter.route().handler(retrieveCookies) if (isAuthorization) { val keycloakAuthProvider = KeycloakAuth.create(vertx, tableauxConfig.authConfig) @@ -72,4 +76,11 @@ object RouterRegistry extends LazyLogging { mainRouter } + + private def retrieveCookies(context: RoutingContext)(implicit requestContext: RequestContext): Unit = { + requestContext.cookies = context.cookies().toSet + context.next() + } + + } From 6b212ade96fa7000f879ff701880783bca383293 Mon Sep 17 00:00:00 2001 From: Thimo Schneider Date: Thu, 21 Oct 2021 14:30:15 +0200 Subject: [PATCH 2/2] fix lint --- .../tableaux/database/model/HistoryModel.scala | 3 ++- .../com/campudus/tableaux/router/RouterRegistry.scala | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala b/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala index 0f02d012..6593d966 100644 --- a/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala +++ b/src/main/scala/com/campudus/tableaux/database/model/HistoryModel.scala @@ -141,7 +141,8 @@ case class CreateHistoryModel(tableauxModel: TableauxModel, connection: Database val attachmentModel = AttachmentModel(connection) private def getUserName: String = { - Option(requestContext.getPrincipleString("preferred_username")).getOrElse(requestContext.getCookieValue("userName", "unknown")) + Option(requestContext.getPrincipleString("preferred_username")) + .getOrElse(requestContext.getCookieValue("userName", "unknown")) } private def retrieveCurrentLinkIds(table: Table, column: LinkColumn, rowId: RowId): Future[Seq[RowId]] = { diff --git a/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala b/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala index 40a2fc71..8f7dc5d8 100644 --- a/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala +++ b/src/main/scala/com/campudus/tableaux/router/RouterRegistry.scala @@ -25,7 +25,6 @@ object RouterRegistry extends LazyLogging { implicit val roleModel: RoleModel = RoleModel(tableauxConfig.rolePermissions, isAuthorization) - val mainRouter: Router = Router.router(vertx) implicit val requestContext: RequestContext = RequestContext() @@ -77,10 +76,9 @@ object RouterRegistry extends LazyLogging { mainRouter } - private def retrieveCookies(context: RoutingContext)(implicit requestContext: RequestContext): Unit = { - requestContext.cookies = context.cookies().toSet - context.next() - } - + private def retrieveCookies(context: RoutingContext)(implicit requestContext: RequestContext): Unit = { + requestContext.cookies = context.cookies().toSet + context.next() + } }