feat: Create authorization

This commit is contained in:
2026-01-20 11:32:06 +01:00
parent 709a833b4b
commit f8c979ab3d
8 changed files with 73 additions and 27 deletions

View File

@@ -1,7 +1,5 @@
package controllers
import auth.AuthAction
import com.typesafe.config.Config
import logic.user.{SessionManager, UserManager}
import model.users.User
import play.api.Configuration
@@ -22,7 +20,7 @@ class OpenIDController @Inject()(
val config: Configuration
)(implicit ec: ExecutionContext) extends BaseController {
def loginWithProvider(provider: String) = Action.async { implicit request =>
def loginWithProvider(provider: String): Action[AnyContent] = Action.async { implicit request =>
val state = openIDService.generateState()
val nonce = openIDService.generateNonce()
@@ -40,7 +38,7 @@ class OpenIDController @Inject()(
}
}
def callback(provider: String) = Action.async { implicit request =>
def callback(provider: String): Action[AnyContent] = Action.async { implicit request =>
val sessionState = request.session.get("oauth_state")
val sessionNonce = request.session.get("oauth_nonce")
val sessionProvider = request.session.get("oauth_provider")
@@ -63,7 +61,7 @@ class OpenIDController @Inject()(
openIDService.getUserInfo(provider, tokenResponse.accessToken).map {
case Some(userInfo) =>
// Store user info in session for username selection
Redirect(config.get[String]("app.url") + "/select-username")
Redirect(config.get[String]("openid.selectUserRoute"))
.withSession(
"oauth_user_info" -> Json.toJson(userInfo).toString(),
"oauth_provider" -> provider,
@@ -81,7 +79,7 @@ class OpenIDController @Inject()(
}
}
def selectUsername() = Action.async { implicit request =>
def selectUsername(): Action[AnyContent] = Action.async { implicit request =>
request.session.get("oauth_user_info") match {
case Some(userInfoJson) =>
val userInfo = Json.parse(userInfoJson).as[OpenIDUserInfo]
@@ -90,14 +88,15 @@ class OpenIDController @Inject()(
"email" -> userInfo.email,
"name" -> userInfo.name,
"picture" -> userInfo.picture,
"provider" -> userInfo.provider
"provider" -> userInfo.provider,
"providerName" -> userInfo.providerName
)))
case None =>
Future.successful(Redirect("/login").flashing("error" -> "No authentication information found"))
}
}
def submitUsername() = Action.async { implicit request =>
def submitUsername(): Action[AnyContent] = Action.async { implicit request =>
val username = request.body.asJson.flatMap(json => (json \ "username").asOpt[String])
.orElse(request.body.asFormUrlEncoded.flatMap(_.get("username").flatMap(_.headOption)))
val userInfoJson = request.session.get("oauth_user_info")