From 71d4d669f3ea0d53cb7a2a79f36c9d0194e1f8a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Tue, 14 Mar 2023 13:26:13 +0100 Subject: [PATCH] feature/Add endpoint providerCheck v5.1.0 --- .../resources/props/sample.props.template | 6 +++- .../scala/code/api/v5_1_0/APIMethods510.scala | 35 +++++++++++++++++++ .../code/api/v5_1_0/JSONFactory5.1.0.scala | 12 +++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/obp-api/src/main/resources/props/sample.props.template b/obp-api/src/main/resources/props/sample.props.template index e372d61f4..070b293b4 100644 --- a/obp-api/src/main/resources/props/sample.props.template +++ b/obp-api/src/main/resources/props/sample.props.template @@ -1220,4 +1220,8 @@ retain_metrics_move_limit = 50000 retain_metrics_scheduler_interval_in_seconds = 3600 #if same session used for different ip address, we can show this warning, default is false. -show_ip_address_change_warning=false \ No newline at end of file +show_ip_address_change_warning=false + +# List of provider considered as a valid ones at an instance +# We specify the list as a comma separeted list +valid_providers="Hostname props value" \ No newline at end of file diff --git a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala index bc689d585..0d7e6e467 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala @@ -16,6 +16,7 @@ import code.api.v4_0_0.{JSONFactory400, PostApiCollectionJson400} import code.consent.Consents import code.loginattempts.LoginAttempt import code.metrics.APIMetrics +import code.model.dataAccess.AuthUser import code.transactionrequests.TransactionRequests.TransactionRequestTypes.{apply => _} import code.userlocks.UserLocksProvider import code.users.Users @@ -218,6 +219,40 @@ trait APIMethods510 { (JSONFactory510.getAccountAccessUniqueIndexCheck(groupedRows), HttpCode.`200`(cc.callContext)) } } + } + staticResourceDocs += ResourceDoc( + providerCheck, + implementedInApiVersion, + nameOf(providerCheck), + "GET", + "/management/system/integrity/provider", + "Check Providers", + s"""Check providers. + | + |${authenticationRequiredMessage(true)} + |""".stripMargin, + EmptyBody, + CheckSystemIntegrityJsonV510(true), + List( + $UserNotLoggedIn, + UserHasMissingRoles, + UnknownError + ), + List(apiTagSystemIntegrity, apiTagNewStyle), + Some(canGetSystemIntegrity :: Nil) + ) + + lazy val providerCheck: OBPEndpoint = { + case "management" :: "system" :: "integrity" :: "provider" :: Nil JsonGet _ => { + cc => + for { + distinctRows: List[String] <- Future { + AuthUser.findAll().map(_.provider.get).distinct + } + } yield { + (JSONFactory510.getProviderCheck(distinctRows), HttpCode.`200`(cc.callContext)) + } + } } staticResourceDocs += ResourceDoc( diff --git a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala index 0f3077d9f..630d7adcf 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala @@ -90,6 +90,18 @@ object JSONFactory510 { success = success, debug_info = debugInfo ) + } + def getProviderCheck(distinctRows: List[String]): CheckSystemIntegrityJsonV510 = { + val allowedProviders: List[String] = APIUtil.getPropsValue(nameOfProperty = "allowed_providers") + .or(APIUtil.getPropsValue(nameOfProperty = "hostname")) + .toList.map(_.toLowerCase()).map(_.split(",").toList).flatten + val invalidRows = distinctRows.filter(!allowedProviders.contains(_)) + val success = distinctRows.forall(Nil.contains(_)) + val debugInfo = if(success) None else Some(s"Invalid provider values: ${invalidRows.mkString(",")}") + CheckSystemIntegrityJsonV510( + success = success, + debug_info = debugInfo + ) } def getApiInfoJSON(apiVersion : ApiVersion, apiVersionStatus: String) = {