feat: BAC-39 Authentication (#114)
Reviewed-on: #114 Co-authored-by: Janis <janis.e.20@gmx.de> Co-committed-by: Janis <janis.e.20@gmx.de>
This commit is contained in:
@@ -26,8 +26,11 @@ class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) e
|
||||
else canInteract = Some(InteractionType.Card)
|
||||
case _ =>
|
||||
}
|
||||
|
||||
lock.lock()
|
||||
websocketActor.foreach(_.solveRequests())
|
||||
websocketActor.foreach(_.transmitEventToClient(event))
|
||||
lock.unlock()
|
||||
}
|
||||
|
||||
override def id: UUID = user.id
|
||||
|
||||
80
knockoutwhistweb/app/model/users/UserEntity.scala
Normal file
80
knockoutwhistweb/app/model/users/UserEntity.scala
Normal file
@@ -0,0 +1,80 @@
|
||||
package model.users
|
||||
|
||||
import jakarta.persistence.*
|
||||
|
||||
import java.time.LocalDateTime
|
||||
import java.util.UUID
|
||||
import scala.compiletime.uninitialized
|
||||
|
||||
@Entity
|
||||
@Table(name = "users")
|
||||
class UserEntity {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
var id: Long = uninitialized
|
||||
|
||||
@Column(name = "uuid", nullable = false, unique = true)
|
||||
var uuid: UUID = uninitialized
|
||||
|
||||
@Column(name = "username", nullable = false, unique = true)
|
||||
var username: String = uninitialized
|
||||
|
||||
@Column(name = "password_hash", nullable = false)
|
||||
var passwordHash: String = uninitialized
|
||||
|
||||
@Column(name = "openid_provider")
|
||||
var openidProvider: String = uninitialized
|
||||
|
||||
@Column(name = "openid_provider_id")
|
||||
var openidProviderId: String = uninitialized
|
||||
|
||||
@Column(name = "created_at", nullable = false)
|
||||
var createdAt: LocalDateTime = uninitialized
|
||||
|
||||
@Column(name = "updated_at", nullable = false)
|
||||
var updatedAt: LocalDateTime = uninitialized
|
||||
|
||||
@PrePersist
|
||||
def onCreate(): Unit = {
|
||||
val now = LocalDateTime.now()
|
||||
createdAt = now
|
||||
updatedAt = now
|
||||
if (uuid == null) {
|
||||
uuid = UUID.randomUUID()
|
||||
}
|
||||
}
|
||||
|
||||
@PreUpdate
|
||||
def onUpdate(): Unit = {
|
||||
updatedAt = LocalDateTime.now()
|
||||
}
|
||||
|
||||
def toUser: User = {
|
||||
User(
|
||||
internalId = id,
|
||||
id = uuid,
|
||||
name = username,
|
||||
passwordHash = passwordHash
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
object UserEntity {
|
||||
def fromUser(user: User): UserEntity = {
|
||||
val entity = new UserEntity()
|
||||
entity.uuid = user.id
|
||||
entity.username = user.name
|
||||
entity.passwordHash = user.passwordHash
|
||||
entity
|
||||
}
|
||||
|
||||
def fromOpenIDUser(username: String, userInfo: services.OpenIDUserInfo): UserEntity = {
|
||||
val entity = new UserEntity()
|
||||
entity.username = username
|
||||
entity.passwordHash = "" // No password for OpenID users
|
||||
entity.openidProvider = userInfo.provider
|
||||
entity.openidProviderId = userInfo.id
|
||||
entity
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user