diff --git a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala index 89fdf067d..d433a841b 100644 --- a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala +++ b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala @@ -9,8 +9,8 @@ import code.api.util.ExampleValue.{dynamicEntityRequestBodyExample, dynamicEntit import code.api.util.NewStyle.HttpCode import code.api.util._ import code.api.v1_4_0.JSONFactory1_4_0.{ChallengeAnswerJSON, TransactionRequestAccountJsonV140} +import code.api.v2_0_0.{EntitlementJSON, EntitlementJSONs, JSONFactory200} import code.api.v2_1_0._ -import code.api.v3_0_0.JSONFactory300 import code.api.v3_1_0.ListResult import code.api.{APIFailureNewStyle, ChargePolicy} import code.dynamicEntity.DynamicEntityCommons @@ -20,7 +20,6 @@ import code.transactionrequests.TransactionRequests.TransactionChallengeTypes._ import code.transactionrequests.TransactionRequests.TransactionRequestTypes import code.transactionrequests.TransactionRequests.TransactionRequestTypes.{apply => _, _} import code.util.Helper -import code.views.Views import com.github.dwickern.macros.NameOf.nameOf import com.openbankproject.commons.model._ import com.openbankproject.commons.model.enums.DynamicEntityFieldType @@ -36,6 +35,10 @@ import scala.collection.immutable.{List, Nil} import scala.collection.mutable.ArrayBuffer import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future +import code.api.v2_0_0.{EntitlementJSON, EntitlementJSONs, JSONFactory200} +import code.api.v3_0_0.JSONFactory300 +import code.entitlement.Entitlement +import code.views.Views trait APIMethods400 { self: RestHelper => @@ -992,7 +995,7 @@ trait APIMethods400 { apiInfoJson400, List(UnknownError, "no connector set"), Catalogs(Core, notPSD2, OBWG), - apiTagApi :: Nil) + apiTagApi :: apiTagNewStyle :: Nil) lazy val root : OBPEndpoint = { case "root" :: Nil JsonGet _ => { @@ -1044,8 +1047,48 @@ trait APIMethods400 { } } } - - + + resourceDocs += ResourceDoc( + getEntitlements, + implementedInApiVersion, + "getEntitlements", + "GET", + "/users/USER_ID/entitlements", + "Get Entitlements for User", + s""" + | + |${authenticationRequiredMessage(true)} + | + | + """.stripMargin, + emptyObjectJson, + entitlementJSONs, + List(UserNotLoggedIn, UserHasMissingRoles, UnknownError), + Catalogs(notCore, notPSD2, notOBWG), + List(apiTagRole, apiTagEntitlement, apiTagUser, apiTagNewStyle), + Some(List(canGetEntitlementsForAnyUserAtAnyBank))) + + + lazy val getEntitlements: OBPEndpoint = { + case "users" :: userId :: "entitlements" :: Nil JsonGet _ => { + cc => + for { + (Full(u), callContext) <- authorizedAccess(cc) + _ <- NewStyle.function.hasEntitlement("", u.userId, canGetEntitlementsForAnyUserAtAnyBank, callContext) + entitlements <- NewStyle.function.getEntitlementsByUserId(userId, callContext) + } yield { + var json = EntitlementJSONs(Nil) + // Format the data as V2.0.0 json + if (isSuperAdmin(userId)) { + // If the user is SuperAdmin add it to the list + json = EntitlementJSONs(JSONFactory200.createEntitlementJSONs(entitlements).list:::List(EntitlementJSON("", "SuperAdmin", ""))) + } else { + json = JSONFactory200.createEntitlementJSONs(entitlements) + } + (json, HttpCode.`200`(callContext)) + } + } + } } diff --git a/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala b/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala index ccc7a99e9..daaf40cec 100644 --- a/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala +++ b/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala @@ -161,7 +161,7 @@ object OBPAPI4_0_0 extends OBPRestHelper with APIMethods130 with APIMethods140 w //now in V300 Implementations2_0_0.getCoreAccountById :: //now in V300 Implementations2_0_0.getCoreTransactionsForBankAccount :: // Implementations2_0_0.getCurrentUser :: - Implementations2_0_0.getEntitlements :: + // Implementations2_0_0.getEntitlements :: Implementations2_0_0.getKycChecks :: Implementations2_0_0.getKycDocuments :: Implementations2_0_0.getKycMedia :: @@ -394,6 +394,7 @@ object OBPAPI4_0_0 extends OBPRestHelper with APIMethods130 with APIMethods140 w Implementations4_0_0.resetPasswordUrl :: Implementations4_0_0.root :: Implementations4_0_0.getCallContext :: + Implementations4_0_0.getEntitlements :: Nil def allResourceDocs = MockerConnector.doc ++ diff --git a/obp-api/src/main/scala/code/snippet/ConsumerRegistration.scala b/obp-api/src/main/scala/code/snippet/ConsumerRegistration.scala index bf0e115af..8167adf49 100644 --- a/obp-api/src/main/scala/code/snippet/ConsumerRegistration.scala +++ b/obp-api/src/main/scala/code/snippet/ConsumerRegistration.scala @@ -298,6 +298,12 @@ class ConsumerRegistration extends MdcLoggable { def showDummyCustomerTokens(): CssSel = { val consumerKeyBox = S.param("consumer_key") + // The following will check the login user and the user from the consumerkey. we do not want to share consumerkey to others. + val loginUserId = AuthUser.getCurrentUser.map(_.userId).openOr("") + val userCreatedByUserId = consumerKeyBox.map(Consumers.consumers.vend.getConsumerByConsumerKey(_)).flatten.map(_.createdByUserId.get).openOr("") + if(!loginUserId.equals(userCreatedByUserId)) + return "#dummy-user-tokens ^" #> "The consumer key in the URL is not created by the current login user, please create consumer for this user first!" + val dummyUsersInfo = getWebUiPropsValue("webui_dummy_user_logins", "") val isShowDummyUserTokens = getWebUiPropsValue("webui_show_dummy_user_tokens", "false").toBoolean diff --git a/obp-api/src/main/webapp/dummy-user-tokens.html b/obp-api/src/main/webapp/dummy-user-tokens.html index 84b2987bd..c60338095 100644 --- a/obp-api/src/main/webapp/dummy-user-tokens.html +++ b/obp-api/src/main/webapp/dummy-user-tokens.html @@ -28,7 +28,7 @@ Berlin 13359, Germany -->