move some code out of controllers

This commit is contained in:
Thibault Duplessis 2021-06-20 08:05:36 +02:00
parent 2a414d1831
commit 57d923b231
2 changed files with 30 additions and 26 deletions

View file

@ -1,17 +1,15 @@
package controllers package controllers
import views._ import cats.data.Validated
import play.api.mvc._
import play.api.data.Form import play.api.data.Form
import play.api.data.Forms._ import play.api.data.Forms._
import play.api.libs.json.Json import play.api.libs.json.Json
import cats.data.Validated import play.api.mvc._
import reactivemongo.api.bson.BSONObjectID
import org.joda.time.DateTime
import scalatags.Text.all.stringFrag import scalatags.Text.all.stringFrag
import lila.app._ import views._
import lila.api.Context import lila.api.Context
import lila.app._
import lila.oauth.{ AccessToken, AccessTokenRequest, AuthorizationRequest, PersonalToken } import lila.oauth.{ AccessToken, AccessTokenRequest, AuthorizationRequest, PersonalToken }
final class OAuth(env: Env) extends LilaController(env) { final class OAuth(env: Env) extends LilaController(env) {
@ -72,25 +70,16 @@ final class OAuth(env: Env) extends LilaController(env) {
case Validated.Valid(prepared) => case Validated.Valid(prepared) =>
env.oAuth.authorizationApi.consume(prepared) flatMap { env.oAuth.authorizationApi.consume(prepared) flatMap {
case Validated.Valid(granted) => case Validated.Valid(granted) =>
val expiresIn = 60 * 60 * 24 * 60 env.oAuth.tokenApi.create(granted) map { token =>
val token = AccessToken( Ok(
id = AccessToken.Id(lila.oauth.Protocol.Secret.random("lio_").value), Json
publicId = BSONObjectID.generate(), .obj(
clientId = PersonalToken.clientId, // TODO "token_type" -> "bearer",
userId = granted.userId, "access_token" -> token.id.value
createdAt = DateTime.now().some, )
description = granted.redirectUri.clientOrigin.some, .add("expires_in" -> token.expires.map(_.getSeconds - nowSeconds))
scopes = granted.scopes,
clientOrigin = granted.redirectUri.clientOrigin.some,
expires = DateTime.now().plusSeconds(expiresIn).some
)
env.oAuth.tokenApi.create(token) inject Ok(
Json.obj(
"token_type" -> "bearer",
"access_token" -> token.id.value,
"expires_in" -> expiresIn
) )
) }
case Validated.Invalid(err) => BadRequest(err.toJson).fuccess case Validated.Invalid(err) => BadRequest(err.toJson).fuccess
} }
case Validated.Invalid(err) => BadRequest(err.toJson).fuccess case Validated.Invalid(err) => BadRequest(err.toJson).fuccess

View file

@ -11,7 +11,22 @@ final class AccessTokenApi(colls: OauthColls)(implicit ec: scala.concurrent.Exec
import OAuthScope.scopeHandler import OAuthScope.scopeHandler
import AccessToken.{ BSONFields => F, _ } import AccessToken.{ BSONFields => F, _ }
def create(token: AccessToken) = colls.token(_.insert.one(token).void) def create(token: AccessToken): Funit = colls.token(_.insert.one(token).void)
def create(granted: AccessTokenRequest.Granted): Fu[AccessToken] = {
val token = AccessToken(
id = AccessToken.Id(Protocol.Secret.random("lio_").value),
publicId = BSONObjectID.generate(),
clientId = PersonalToken.clientId, // TODO
userId = granted.userId,
createdAt = DateTime.now().some,
description = granted.redirectUri.clientOrigin.some,
scopes = granted.scopes,
clientOrigin = granted.redirectUri.clientOrigin.some,
expires = DateTime.now().plusMonths(2).some
)
create(token) inject token
}
def listPersonal(user: User): Fu[List[AccessToken]] = def listPersonal(user: User): Fu[List[AccessToken]] =
colls.token { colls.token {