From 010684c5fe9b122a70ea563b4c5f96e6abc3006e Mon Sep 17 00:00:00 2001 From: Nemo Godebski-Pedersen Date: Wed, 3 Sep 2025 17:48:55 +0530 Subject: [PATCH 1/6] improve JDK installation instructions --- .sdkmanrc | 3 +++ README.md | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 .sdkmanrc diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 0000000000..dac70193f8 --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1,3 @@ +# Enable auto-env through the sdkman_auto_env config +# Add key=value pairs of SDKs to use below +java=11.0.28-tem diff --git a/README.md b/README.md index 7578a692de..b29992c56b 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,21 @@ This project is dual licensed under the AGPL V3 (see NOTICE) and commercial lice ## Setup +### Installing JDK +#### With sdkman + +A good way to manage JDK versions and install the correct version for OBP is [sdkman](https://sdkman.io/). If you have this installed then you can install the correct JDK easily using: +``` +sdk env install +``` + +#### Manually + +- OracleJDK: 1.8, 13 +- OpenJdk: 11 + +OpenJDK 11 is available for download here: [https://jdk.java.net/archive/](https://jdk.java.net/archive/). + The project uses Maven 3 as its build tool. To compile and run Jetty, install Maven 3, create your configuration in `obp-api/src/main/resources/props/default.props` and execute: @@ -688,13 +703,6 @@ The same as `Frozen APIs`, if a related unit test fails, make sure whether the m - A good book on Lift: "Lift in Action" by Timothy Perrett published by Manning. -## Supported JDK Versions - -- OracleJDK: 1.8, 13 -- OpenJdk: 11 - -OpenJDK 11 is available for download here: [https://jdk.java.net/archive/](https://jdk.java.net/archive/). - ## Endpoint Request and Response Example ```log From 4c08cd7f06c47cb2534bb2ab123f176e2923e6d3 Mon Sep 17 00:00:00 2001 From: Nemo Godebski-Pedersen Date: Wed, 3 Sep 2025 17:48:55 +0530 Subject: [PATCH 2/6] improve JDK installation instructions --- .sdkmanrc | 3 +++ README.md | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 .sdkmanrc diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 0000000000..dac70193f8 --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1,3 @@ +# Enable auto-env through the sdkman_auto_env config +# Add key=value pairs of SDKs to use below +java=11.0.28-tem diff --git a/README.md b/README.md index 951d7a8a5c..54882e5444 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,21 @@ This project is dual licensed under the AGPL V3 (see NOTICE) and commercial lice ## Setup +### Installing JDK +#### With sdkman + +A good way to manage JDK versions and install the correct version for OBP is [sdkman](https://sdkman.io/). If you have this installed then you can install the correct JDK easily using: +``` +sdk env install +``` + +#### Manually + +- OracleJDK: 1.8, 13 +- OpenJdk: 11 + +OpenJDK 11 is available for download here: [https://jdk.java.net/archive/](https://jdk.java.net/archive/). + The project uses Maven 3 as its build tool. To compile and run Jetty, install Maven 3, create your configuration in `obp-api/src/main/resources/props/default.props` and execute: @@ -753,13 +768,6 @@ The same as `Frozen APIs`, if a related unit test fails, make sure whether the m - A good book on Lift: "Lift in Action" by Timothy Perrett published by Manning. -## Supported JDK Versions - -- OracleJDK: 1.8, 13 -- OpenJdk: 11 - -OpenJDK 11 is available for download here: [https://jdk.java.net/archive/](https://jdk.java.net/archive/). - ## Endpoint Request and Response Example ```log From 0cacf43fee915d1fb768202e1a2a73bed2528fa4 Mon Sep 17 00:00:00 2001 From: simonredfern Date: Wed, 10 Sep 2025 13:08:00 +0200 Subject: [PATCH 3/6] bugfix/adding checkOptionalShortString and using in CreateBank v5.1.0 --- obp-api/src/main/scala/code/api/util/APIUtil.scala | 12 ++++++++++++ .../main/scala/code/api/v5_0_0/APIMethods500.scala | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index a948c2e2eb..beb874d860 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -911,6 +911,18 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ } } + /** only A-Z, a-z, 0-9, -, _, ., and max length <= 16, allows empty string */ + def checkOptionalShortString(value:String): String ={ + val valueLength = value.length + val regex = """^([A-Za-z0-9\-._]*)$""".r + value match { + case regex(e) if(valueLength <= 16) => SILENCE_IS_GOLDEN + case regex(e) if(valueLength > 16) => ErrorMessages.InvalidValueLength + case _ => ErrorMessages.InvalidValueCharacters + } + } + + /** only A-Z, a-z, 0-9, -, _, ., and max length <= 36 * OBP APIUtil.generateUUID() length is 36 here.*/ diff --git a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala index 97553a25eb..9a23dac09e 100644 --- a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala +++ b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala @@ -182,7 +182,7 @@ trait APIMethods500 { } //if postJson.id is empty, just return SILENCE_IS_GOLDEN, and will pass the guard. - checkShortStringValue = APIUtil.checkShortString(postJson.id.getOrElse(SILENCE_IS_GOLDEN)) + checkShortStringValue = APIUtil.checkOptionalShortString(postJson.id.getOrElse(SILENCE_IS_GOLDEN)) _ <- Helper.booleanToFuture(failMsg = s"$checkShortStringValue.", cc = cc.callContext) { checkShortStringValue == SILENCE_IS_GOLDEN } From 2272631bc526cfc80ac7640223c96ac48e9212db Mon Sep 17 00:00:00 2001 From: simonredfern Date: Thu, 11 Sep 2025 16:47:54 +0200 Subject: [PATCH 4/6] docfix/to checkShortString --- obp-api/src/main/scala/code/api/util/APIUtil.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index beb874d860..1aaf4f3f40 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -900,7 +900,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ } } - /** only A-Z, a-z, 0-9, -, _, ., and max length <= 16 */ + /** only A-Z, a-z, 0-9, -, _, ., and max length <= 16. NOTE: This function requires at least ONE character (+ in the regx). If you want to accept zero characters use checkOptionalShortString. */ def checkShortString(value:String): String ={ val valueLength = value.length val regex = """^([A-Za-z0-9\-._]+)$""".r From d882997fb840c8a18a87b6cc5d277dcf6fba79c3 Mon Sep 17 00:00:00 2001 From: simonredfern Date: Thu, 11 Sep 2025 17:12:49 +0200 Subject: [PATCH 5/6] logfix/Log fix in APIUtil.scala --- obp-api/src/main/scala/code/api/util/APIUtil.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 1aaf4f3f40..81f857f178 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -3007,6 +3007,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ /** + * TODO: Update this Doc string: * This function is planed to be used at an endpoint in order to get a User based on Authorization Header data * It has to do the same thing as function OBPRestHelper.failIfBadAuthorizationHeader does * The only difference is that this function use Akka's Future in non-blocking way i.e. without using Await.result @@ -3040,7 +3041,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ // Step 1: Always attempt to identify consumer via certificate/mTLS // This looks for TPP-Signature-Certificate or PSD2-CERT headers, or mTLS client certificates val consumerByCertificate = Consent.getCurrentConsumerViaTppSignatureCertOrMtls(callContext = cc) - logger.debug(s"consumerByCertificate: $consumerByCertificate") + logger.debug(s"getUserAndSessionContextFuture says consumerByCertificate is: $consumerByCertificate") // Step 2: Check which validation method is configured for consent requests // Default is CONSUMER_CERTIFICATE (certificate-based validation) @@ -3066,7 +3067,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ // This is normal for certificate-based validation or anonymous requests Empty } - logger.debug(s"consumerByConsumerKey: $consumerByConsumerKey") + logger.debug(s"getUserAndSessionContextFuture says consumerByConsumerKey is: $consumerByConsumerKey") val res = if (authHeadersWithEmptyValues.nonEmpty) { // Check Authorization Headers Empty Values From fa8f2d84886182909f30b262907a2a1516bfd06a Mon Sep 17 00:00:00 2001 From: simonredfern Date: Thu, 11 Sep 2025 17:13:26 +0200 Subject: [PATCH 6/6] logfix/Log fix in getUserFuture --- obp-api/src/main/scala/code/api/OAuth2.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/OAuth2.scala b/obp-api/src/main/scala/code/api/OAuth2.scala index 96bf19d470..16b9aac2b8 100644 --- a/obp-api/src/main/scala/code/api/OAuth2.scala +++ b/obp-api/src/main/scala/code/api/OAuth2.scala @@ -107,7 +107,7 @@ object OAuth2Login extends RestHelper with MdcLoggable { } else if (Azure.isIssuer(value)) { Azure.applyIdTokenRulesFuture(value, cc) } else if (OBPOIDC.isIssuer(value)) { - logger.debug("getUserFuture says: this is OBPOIDC") + logger.debug("getUserFuture says: I will call OBPOIDC.applyIdTokenRulesFuture") OBPOIDC.applyIdTokenRulesFuture(value, cc) } else if (Keycloak.isIssuer(value)) { Keycloak.applyRulesFuture(value, cc)