feature/Add function updateComputedLocale

This commit is contained in:
Marko Milić 2023-10-06 11:26:12 +02:00
parent 16f53c616a
commit 4618c1abff
2 changed files with 35 additions and 9 deletions

View File

@ -636,15 +636,8 @@ class Boot extends MdcLoggable {
ObpS.param(PARAM_LOCALE) match {
case Full(requestedLocale) if requestedLocale != null && APIUtil.checkShortString(requestedLocale)==SILENCE_IS_GOLDEN => {
val computedLocale: Locale = I18NUtil.computeLocale(requestedLocale)
AuthUser.getCurrentUser.map(_.user.userPrimaryKey.value) match {
case Full(id) =>
Users.users.vend.getResourceUserByResourceUserId(id).map {
u =>
u.LastUsedLocale(computedLocale.toString).save
logger.debug(s"ResourceUser.LastUsedLocale is saved for the resource user id: $id")
}
case _ => // There is no current user
}
val sessionId = S.session.map(_.uniqueId).openOr("")
AuthUser.updateComputedLocale(sessionId, computedLocale.toString())
S.addCookie(HTTPCookie(localeCookieName, requestedLocale))
computedLocale
}

View File

@ -26,9 +26,12 @@ TESOBE (http://www.tesobe.com/)
*/
package code.model.dataAccess
import java.util.UUID.randomUUID
import code.api.util.CommonFunctions.validUri
import code.UserRefreshes.UserRefreshes
import code.accountholders.AccountHolders
import code.api.cache.Caching
import code.api.dynamic.endpoint.helper.DynamicEndpointHelper
import code.api.util.APIUtil._
import code.api.util.ErrorMessages._
@ -58,6 +61,7 @@ import code.webuiprops.MappedWebUiPropsProvider.getWebUiPropsValue
import org.apache.commons.lang3.StringUtils
import code.util.HydraUtil._
import com.github.dwickern.macros.NameOf.nameOf
import com.tesobe.CacheKeyFromArguments
import sh.ory.hydra.model.AcceptLoginRequest
import net.liftweb.http.S.fmapFunc
import net.liftweb.sitemap.Loc.{If, LocParam, Template}
@ -453,6 +457,35 @@ import net.liftweb.util.Helpers._
<div>{loginXml getOrElse NodeSeq.Empty}</div>
}
// Update ResourceUser.LastUsedLocale only once per session in 60 seconds
def updateComputedLocale(sessionId: String, computedLocale: String): Boolean = {
/**
* Please note that "var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)"
* is just a temporary value field with UUID values in order to prevent any ambiguity.
* The real value will be assigned by Macro during compile time at this line of a code:
* https://github.com/OpenBankProject/scala-macros/blob/master/macros/src/main/scala/com/tesobe/CacheKeyFromArgumentsMacro.scala#L49
*/
import scala.concurrent.duration._
val ttl: Duration = FiniteDuration(60, "second")
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(ttl) {
logger.debug(s"AuthUser.updateComputedLocale(sessionId = $sessionId, computedLocale = $computedLocale)")
getCurrentUser.map(_.userPrimaryKey.value) match {
case Full(id) =>
Users.users.vend.getResourceUserByResourceUserId(id).map {
u =>
u.LastUsedLocale(computedLocale).save
logger.debug(s"ResourceUser.LastUsedLocale is saved for the resource user id: $id")
}.isDefined
case _ => true// There is no current user
}
}
}
}
/**
* Find current ResourceUser from the server.