mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 15:06:50 +00:00
OAuth2 Google - done
This commit is contained in:
parent
386c40e99b
commit
47b3f42271
@ -304,7 +304,7 @@ object GatewayLogin extends RestHelper with MdcLoggable {
|
||||
}
|
||||
case Full((s, accounts, callContextNew)) if getErrors(s).forall(_.equalsIgnoreCase("")) => // CBS returned response without any error
|
||||
logger.debug("CBS returned proper response")
|
||||
Users.users.vend.getOrCreateUserByProviderIdFuture(provider = gateway, idGivenByProvider = username) map {
|
||||
Users.users.vend.getOrCreateUserByProviderIdFuture(provider = gateway, idGivenByProvider = username, name = None, email = None) map {
|
||||
case Full(u) =>
|
||||
val isFirst = getFieldFromPayloadJson(jwtPayload, "is_first")
|
||||
// Update user account views, only when is_first == true in the GatewayLogin token's payload .
|
||||
|
||||
@ -151,6 +151,13 @@ object OAuth2Handshake extends RestHelper with MdcLoggable {
|
||||
}
|
||||
|
||||
object Google {
|
||||
private def getClaim(name: String, idToken: String): Option[String] = {
|
||||
val claim = JwtUtil.getClaim(name = name, jwtToken = idToken).asString()
|
||||
claim match {
|
||||
case null => None
|
||||
case string => Some(string)
|
||||
}
|
||||
}
|
||||
def isIssuer(jwtToken: String): Boolean = {
|
||||
JwtUtil.getIssuer(jwtToken).map(_.contains("accounts.google.com")).getOrElse(false)
|
||||
}
|
||||
@ -177,7 +184,12 @@ object OAuth2Handshake extends RestHelper with MdcLoggable {
|
||||
def getOrCreateResourceUserFuture(idToken: String): Future[Box[User]] = {
|
||||
val subject = JwtUtil.getSubject(idToken).getOrElse("")
|
||||
val issuer = JwtUtil.getIssuer(idToken).getOrElse("")
|
||||
Users.users.vend.getOrCreateUserByProviderIdFuture(provider = issuer, idGivenByProvider = subject)
|
||||
Users.users.vend.getOrCreateUserByProviderIdFuture(
|
||||
provider = issuer,
|
||||
idGivenByProvider = subject,
|
||||
name = getClaim(name = "name", idToken = idToken).orElse(Some(subject)),
|
||||
email = getClaim(name = "email", idToken = idToken)
|
||||
)
|
||||
}
|
||||
/** Old Style Endpoints
|
||||
* This function creates user based on "iss" and "sub" fields
|
||||
@ -194,8 +206,8 @@ object OAuth2Handshake extends RestHelper with MdcLoggable {
|
||||
Users.users.vend.createResourceUser( // Otherwise create a new one
|
||||
provider = issuer,
|
||||
providerId = Some(subject),
|
||||
name = Some(subject),
|
||||
email = None,
|
||||
name = getClaim(name = "name", idToken = idToken).orElse(Some(subject)),
|
||||
email = getClaim(name = "email", idToken = idToken),
|
||||
userId = None
|
||||
)
|
||||
}
|
||||
|
||||
@ -35,8 +35,8 @@ object RemotedataUsers extends ObpActorInit with Users {
|
||||
def getUserByProviderIdFuture(provider : String, idGivenByProvider : String) : Future[Box[User]] =
|
||||
(actor ? cc.getUserByProviderIdFuture(provider, idGivenByProvider)).mapTo[Box[User]]
|
||||
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String) : Future[Box[User]] =
|
||||
(actor ? cc.getOrCreateUserByProviderIdFuture(provider, idGivenByProvider)).mapTo[Box[User]]
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String]) : Future[Box[User]] =
|
||||
(actor ? cc.getOrCreateUserByProviderIdFuture(provider, idGivenByProvider, name, email)).mapTo[Box[User]]
|
||||
|
||||
def getUserByUserId(userId : String) : Box[User] = getValueFromFuture(
|
||||
(actor ? cc.getUserByUserId(userId)).mapTo[Box[User]]
|
||||
|
||||
@ -36,9 +36,9 @@ class RemotedataUsersActor extends Actor with ObpActorHelper with MdcLoggable {
|
||||
logger.debug("getUserByProviderIdFuture(" + provider +"," + idGivenByProvider +")")
|
||||
sender ! (mapper.getUserByProviderId(provider, idGivenByProvider))
|
||||
|
||||
case cc.getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String) =>
|
||||
logger.debug("getOrCreateUserByProviderIdFuture(" + provider +"," + idGivenByProvider +")")
|
||||
sender ! (mapper.getOrCreateUserByProviderId(provider, idGivenByProvider))
|
||||
case cc.getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String]) =>
|
||||
logger.debug("getOrCreateUserByProviderIdFuture(" + provider +"," + idGivenByProvider + name + email +")")
|
||||
sender ! (mapper.getOrCreateUserByProviderId(provider, idGivenByProvider, name, email))
|
||||
|
||||
case cc.getUserByUserId(userId: String) =>
|
||||
logger.debug("getUserByUserId(" + userId +")")
|
||||
|
||||
@ -42,20 +42,20 @@ object LiftUsers extends Users with MdcLoggable{
|
||||
}
|
||||
}
|
||||
|
||||
def getOrCreateUserByProviderId(provider : String, idGivenByProvider : String) : Box[User] = {
|
||||
def getOrCreateUserByProviderId(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String]) : Box[User] = {
|
||||
Users.users.vend.getUserByProviderId(provider = provider, idGivenByProvider = idGivenByProvider).or { // Find a user
|
||||
Users.users.vend.createResourceUser( // Otherwise create a new one
|
||||
provider = provider,
|
||||
providerId = Some(idGivenByProvider),
|
||||
name = Some(idGivenByProvider),
|
||||
email = None,
|
||||
name = name,
|
||||
email = email,
|
||||
userId = None
|
||||
)
|
||||
}
|
||||
}
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String) : Future[Box[User]] = {
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String]) : Future[Box[User]] = {
|
||||
Future {
|
||||
getOrCreateUserByProviderId(provider, idGivenByProvider)
|
||||
getOrCreateUserByProviderId(provider, idGivenByProvider, name, email)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ trait Users {
|
||||
|
||||
def getUserByProviderId(provider : String, idGivenByProvider : String) : Box[User]
|
||||
def getUserByProviderIdFuture(provider : String, idGivenByProvider : String) : Future[Box[User]]
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String) : Future[Box[User]]
|
||||
def getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String]) : Future[Box[User]]
|
||||
|
||||
//resourceuser has two ids: id(Long)and userid_(String), this method use userid_(String)
|
||||
def getUserByUserId(userId : String) : Box[User]
|
||||
@ -68,7 +68,7 @@ class RemotedataUsersCaseClasses {
|
||||
case class getResourceUserByResourceUserIdFuture(id : Long)
|
||||
case class getUserByProviderId(provider : String, idGivenByProvider : String)
|
||||
case class getUserByProviderIdFuture(provider : String, idGivenByProvider : String)
|
||||
case class getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String)
|
||||
case class getOrCreateUserByProviderIdFuture(provider : String, idGivenByProvider : String, name: Option[String], email: Option[String])
|
||||
case class getUserByUserId(userId : String)
|
||||
case class getUserByUserIdFuture(userId : String)
|
||||
case class getUsersByUserIdsFuture(userId : List[String])
|
||||
|
||||
Loading…
Reference in New Issue
Block a user