feat(user-sessions): implement user login, logout, and session management

This commit is contained in:
2025-10-28 18:32:57 +01:00
parent 6b5c29c0c5
commit 306d5b309b
9 changed files with 186 additions and 4 deletions

View File

@@ -0,0 +1,28 @@
package logic.user.impl
import com.typesafe.config.Config
import logic.user.SessionManager
import model.users.User
import javax.inject.{Inject, Singleton}
@Singleton
class BaseSessionManager @Inject()(val config: Config) extends SessionManager {
override def createSession(user: User): String = {
//TODO create JWT token instead of random string
//Write session identifier to cache and DB
val sessionId = java.util.UUID.randomUUID().toString
sessionId
}
override def getUserBySession(sessionId: String): Option[User] = {
//TODO verify JWT token instead of looking up in cache
//Read session identifier from cache and DB
None
}
override def invalidateSession(sessionId: String): Unit = {
}
}

View File

@@ -0,0 +1,47 @@
package logic.user.impl
import com.typesafe.config.Config
import logic.user.UserManager
import model.users.User
import util.UserHash
import javax.inject.{Inject, Singleton}
@Singleton
class StubUserManager @Inject()(val config: Config) extends UserManager {
private val user: Map[String, User] = Map(
"Janis" -> User(
internalId = 1L,
id = java.util.UUID.fromString("123e4567-e89b-12d3-a456-426614174000"),
name = "Janis",
passwordHash = UserHash.hashPW("password123")
),
"Leon" -> User(
internalId = 2L,
id = java.util.UUID.fromString("223e4567-e89b-12d3-a456-426614174000"),
name = "Leon",
passwordHash = UserHash.hashPW("password123")
)
)
override def addUser(name: String, password: String): Boolean = {
throw new NotImplementedError("StubUserManager.addUser is not implemented")
}
override def authenticate(name: String, password: String): Option[User] = {
user.get(name) match {
case Some(u) if UserHash.verifyUser(password, u) => Some(u)
case _ => None
}
}
override def userExists(name: String): Option[User] = {
user.get(name)
}
override def removeUser(name: String): Boolean = {
throw new NotImplementedError("StubUserManager.removeUser is not implemented")
}
}