From ce1977b7c47a1fc847883acc588c78d144c7f106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Fri, 17 Mar 2023 11:34:26 +0100 Subject: [PATCH 1/6] refactor/Remove redunant occurenies of function getDbConnectionParameters --- obp-api/src/main/scala/code/api/util/DBUtil.scala | 14 ++++++++++++++ .../MigrationOfConsentAuthContextDropIndex.scala | 13 ++----------- ...igrationOfMappedBadLoginAttemptDropIndex.scala | 14 ++------------ .../migration/MigrationOfUserAuthContext.scala | 13 ++----------- .../bankconnectors/LocalMappedConnector.scala | 11 +---------- .../main/scala/code/metrics/MappedMetrics.scala | 15 +++------------ 6 files changed, 24 insertions(+), 56 deletions(-) create mode 100644 obp-api/src/main/scala/code/api/util/DBUtil.scala diff --git a/obp-api/src/main/scala/code/api/util/DBUtil.scala b/obp-api/src/main/scala/code/api/util/DBUtil.scala new file mode 100644 index 000000000..58d551b0c --- /dev/null +++ b/obp-api/src/main/scala/code/api/util/DBUtil.scala @@ -0,0 +1,14 @@ +package code.api.util + +import code.api.Constant + +object DBUtil { + def getDbConnectionParameters: (String, String, String) = { + val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue + val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) + val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) + val dbUser = APIUtil.getPropsValue("db.user").orElse(username) + val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) + (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) + } +} diff --git a/obp-api/src/main/scala/code/api/util/migration/MigrationOfConsentAuthContextDropIndex.scala b/obp-api/src/main/scala/code/api/util/migration/MigrationOfConsentAuthContextDropIndex.scala index 57abab8ae..3a25f41d2 100644 --- a/obp-api/src/main/scala/code/api/util/migration/MigrationOfConsentAuthContextDropIndex.scala +++ b/obp-api/src/main/scala/code/api/util/migration/MigrationOfConsentAuthContextDropIndex.scala @@ -1,6 +1,6 @@ package code.api.util.migration -import code.api.util.APIUtil +import code.api.util.{APIUtil, DBUtil} import code.api.util.migration.Migration.{DbFunction, saveLog} import code.context.MappedConsentAuthContext import net.liftweb.common.Full @@ -18,15 +18,6 @@ object MigrationOfConsentAuthContextDropIndex { val oneDayAgo = ZonedDateTime.now(ZoneId.of("UTC")).minusDays(1) val oneYearInFuture = ZonedDateTime.now(ZoneId.of("UTC")).plusYears(1) val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm'Z'") - - private lazy val getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) - } /** * this connection pool context corresponding db.url in default.props @@ -39,7 +30,7 @@ object MigrationOfConsentAuthContextDropIndex { validationQuery = "select 1", connectionPoolFactoryName = "commons-dbcp2" ) - val (dbUrl, user, password) = getDbConnectionParameters + val (dbUrl, user, password) = DBUtil.getDbConnectionParameters val dbName = "DB_NAME" // corresponding props db.url DB ConnectionPool.add(dbName, dbUrl, user, password, settings) val connectionPool = ConnectionPool.get(dbName) diff --git a/obp-api/src/main/scala/code/api/util/migration/MigrationOfMappedBadLoginAttemptDropIndex.scala b/obp-api/src/main/scala/code/api/util/migration/MigrationOfMappedBadLoginAttemptDropIndex.scala index c29e71e68..4f6ceb1f6 100644 --- a/obp-api/src/main/scala/code/api/util/migration/MigrationOfMappedBadLoginAttemptDropIndex.scala +++ b/obp-api/src/main/scala/code/api/util/migration/MigrationOfMappedBadLoginAttemptDropIndex.scala @@ -1,14 +1,13 @@ package code.api.util.migration import code.api.Constant -import code.api.util.APIUtil +import code.api.util.{APIUtil, DBUtil} import code.api.util.migration.Migration.{DbFunction, saveLog} import code.loginattempts.MappedBadLoginAttempt import net.liftweb.mapper.{DB, Schemifier} import net.liftweb.util.DefaultConnectionIdentifier import scalikejdbc.DB.CPContext import scalikejdbc._ - import java.time.format.DateTimeFormatter import java.time.{ZoneId, ZonedDateTime} @@ -17,15 +16,6 @@ object MigrationOfMappedBadLoginAttemptDropIndex { val oneDayAgo = ZonedDateTime.now(ZoneId.of("UTC")).minusDays(1) val oneYearInFuture = ZonedDateTime.now(ZoneId.of("UTC")).plusYears(1) val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm'Z'") - - private lazy val getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) - } /** * this connection pool context corresponding db.url in default.props @@ -38,7 +28,7 @@ object MigrationOfMappedBadLoginAttemptDropIndex { validationQuery = "select 1", connectionPoolFactoryName = "commons-dbcp2" ) - val (dbUrl, user, password) = getDbConnectionParameters + val (dbUrl, user, password) = DBUtil.getDbConnectionParameters val dbName = "DB_NAME" // corresponding props db.url DB ConnectionPool.add(dbName, dbUrl, user, password, settings) val connectionPool = ConnectionPool.get(dbName) diff --git a/obp-api/src/main/scala/code/api/util/migration/MigrationOfUserAuthContext.scala b/obp-api/src/main/scala/code/api/util/migration/MigrationOfUserAuthContext.scala index 1c5d67eb5..4bf98a4d0 100644 --- a/obp-api/src/main/scala/code/api/util/migration/MigrationOfUserAuthContext.scala +++ b/obp-api/src/main/scala/code/api/util/migration/MigrationOfUserAuthContext.scala @@ -4,7 +4,7 @@ import java.time.format.DateTimeFormatter import java.time.{ZoneId, ZonedDateTime} import code.api.Constant -import code.api.util.APIUtil +import code.api.util.{APIUtil, DBUtil} import code.api.util.migration.Migration.{DbFunction, saveLog} import code.context.MappedUserAuthContext import code.views.system.AccountAccess @@ -19,15 +19,6 @@ object MigrationOfUserAuthContext { val oneDayAgo = ZonedDateTime.now(ZoneId.of("UTC")).minusDays(1) val oneYearInFuture = ZonedDateTime.now(ZoneId.of("UTC")).plusYears(1) val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm'Z'") - - private lazy val getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) - } /** * this connection pool context corresponding db.url in default.props @@ -40,7 +31,7 @@ object MigrationOfUserAuthContext { validationQuery = "select 1", connectionPoolFactoryName = "commons-dbcp2" ) - val (dbUrl, user, password) = getDbConnectionParameters + val (dbUrl, user, password) = DBUtil.getDbConnectionParameters val dbName = "DB_NAME" // corresponding props db.url DB ConnectionPool.add(dbName, dbUrl, user, password, settings) val connectionPool = ConnectionPool.get(dbName) diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index 7213f16c0..9ee66be83 100644 --- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -867,15 +867,6 @@ object LocalMappedConnector extends Connector with MdcLoggable { getCoreBankAccountsLegacy(bankIdAccountIds: List[BankIdAccountId], callContext: Option[CallContext]) } } - - private lazy val getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) - } /** * this connection pool context corresponding db.url in default.props @@ -888,7 +879,7 @@ object LocalMappedConnector extends Connector with MdcLoggable { validationQuery = "select 1", connectionPoolFactoryName = "commons-dbcp2" ) - val (dbUrl, user, password) = getDbConnectionParameters + val (dbUrl, user, password) = DBUtil.getDbConnectionParameters val dbName = "DB_NAME" // corresponding props db.url DB ConnectionPool.add(dbName, dbUrl, user, password, settings) val connectionPool = ConnectionPool.get(dbName) diff --git a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala index 5441cbf3f..333ec61a8 100644 --- a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala +++ b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala @@ -90,15 +90,6 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ metric.save } - private lazy val getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) - } - private def trueOrFalse(condition: Boolean) = if (condition) sqls"1=1" else sqls"0=1" private def falseOrTrue(condition: Boolean) = if (condition) sqls"0=1" else sqls"1=1" @@ -252,7 +243,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ validationQuery = "select 1", connectionPoolFactoryName = "commons-dbcp2" ) - val (dbUrl, user, password) = getDbConnectionParameters + val (dbUrl, user, password) = DBUtil.getDbConnectionParameters val dbName = "DB_NAME" // corresponding props db.url DB ConnectionPool.add(dbName, dbUrl, user, password, settings) val connectionPool = ConnectionPool.get(dbName) @@ -399,7 +390,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ val excludeUrlPatternsQueries = extendLikeQuery(excludeUrlPatternsList, false) - val (dbUrl, _, _) = getDbConnectionParameters + val (dbUrl, _, _) = DBUtil.getDbConnectionParameters val result: List[TopApi] = scalikeDB readOnly { implicit session => // MS SQL server has the specific syntax for limiting number of rows @@ -475,7 +466,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ val excludeUrlPatternsQueries = extendLikeQuery(excludeUrlPatternsList, false) - val (dbUrl, _, _) = getDbConnectionParameters + val (dbUrl, _, _) = DBUtil.getDbConnectionParameters // MS SQL server has the specific syntax for limiting number of rows val msSqlLimit = if (dbUrl.contains("sqlserver")) sqls"TOP ($limit)" else sqls"" From 38b06dd19b37e2bc4a76b8112022ff16fc766a3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Fri, 17 Mar 2023 11:55:59 +0100 Subject: [PATCH 2/6] feature/Tweak the function getDbConnectionParameters --- obp-api/src/main/scala/code/api/util/DBUtil.scala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/obp-api/src/main/scala/code/api/util/DBUtil.scala b/obp-api/src/main/scala/code/api/util/DBUtil.scala index 58d551b0c..daf096e7e 100644 --- a/obp-api/src/main/scala/code/api/util/DBUtil.scala +++ b/obp-api/src/main/scala/code/api/util/DBUtil.scala @@ -5,10 +5,11 @@ import code.api.Constant object DBUtil { def getDbConnectionParameters: (String, String, String) = { val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue - val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) - val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) - val dbUser = APIUtil.getPropsValue("db.user").orElse(username) - val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) - (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) + val usernameAndPassword = dbUrl.split("\\?").filter(_.contains("user")).mkString + val username = usernameAndPassword.split("&").filter(_.contains("user")).mkString.split("=")(1) + val password = usernameAndPassword.split("&").filter(_.contains("password")).mkString.split("=")(1) + val dbUser = APIUtil.getPropsValue("db.user").getOrElse(username) + val dbPassword = APIUtil.getPropsValue("db.password").getOrElse(password) + (dbUrl, dbUser, dbPassword) } } From 2186ed97b6a3bb71a4ae7acfb6c065a3eed3666d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Fri, 17 Mar 2023 13:15:39 +0100 Subject: [PATCH 3/6] bugfix/Fix the function getWebUiPropsValue regarding translation --- .../main/scala/code/webuiprops/MappedWebUiPropsProvider.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala b/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala index 992dbdc3e..c19d6e935 100644 --- a/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala +++ b/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala @@ -49,7 +49,7 @@ object MappedWebUiPropsProvider extends WebUiPropsProvider { } // In case there is a translation we must use it - val language = I18NUtil.currentLocale().getLanguage().toLowerCase() + val language = I18NUtil.currentLocale().toString() val webUiPropsPropertyName = s"${brandSpecificPropertyName}_${language}" val translatedAndOrBrandPropertyName = WebUiProps.find(By(WebUiProps.Name, webUiPropsPropertyName)).isDefined match { case true => webUiPropsPropertyName From 2a4dadc47faf993f2acf65477126b333bd9fe76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Sun, 19 Mar 2023 10:59:27 +0100 Subject: [PATCH 4/6] docfix/wrong Role name in message for CanCreateAnyTransactionRequest --- obp-api/src/main/scala/code/api/util/ErrorMessages.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala index d34cff08b..4dd639ddb 100644 --- a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala +++ b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala @@ -2,8 +2,10 @@ package code.api.util import java.util.Objects import java.util.regex.Pattern + import com.openbankproject.commons.model.enums.TransactionRequestStatus._ import code.api.Constant._ +import code.api.util.ApiRole.CanCreateAnyTransactionRequest object ErrorMessages { import code.api.util.APIUtil._ @@ -532,7 +534,7 @@ object ErrorMessages { val InsufficientAuthorisationToCreateTransactionRequest = "OBP-40002: Insufficient authorisation to create TransactionRequest. " + "The Transaction Request could not be created " + "because the login user doesn't have access to the view of the from account " + - "or the view don't have the `canAddTransactionRequestToAnyAccount` permission " + + s"or the view don't have the `${CanCreateAnyTransactionRequest.toString()}` permission " + "or your consumer doesn't not have the access to the view of the from account " + "or you don't have the role CanCreateAnyTransactionRequest." val InvalidTransactionRequestCurrency = "OBP-40003: Transaction Request Currency must be the same as From Account Currency." From 937d15f708174988090f1dd637e5e2d2427e6a33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Sun, 19 Mar 2023 11:52:59 +0100 Subject: [PATCH 5/6] feature/The results of Create Consumer page should be copy and paste friendly --- .../main/webapp/consumer-registration.html | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/obp-api/src/main/webapp/consumer-registration.html b/obp-api/src/main/webapp/consumer-registration.html index 2f9c80cb5..a7f9a6665 100644 --- a/obp-api/src/main/webapp/consumer-registration.html +++ b/obp-api/src/main/webapp/consumer-registration.html @@ -174,61 +174,61 @@ Berlin 13359, Germany

Please save it in a secure location.

-
Consumer ID
+
Consumer ID:
123
-
Application Type
+
Application Type:
web
-
Application Name
+
Application Name:
ABC
-
User redirect URL
+
User redirect URL:
ABC
-
Developer Email
+
Developer Email:
abc@example.com
-
App Description
+
App Description:
ABCDEF
-
Client certificate
+
Client certificate:
ABCDEF
-
Consumer Key
+
Consumer Key:
23432432432432
-
Consumer Secret
+
Consumer Secret:
3334543543543
-
OAuth 1.0a Endpoint
+
OAuth 1.0a Endpoint:
-
OAuth 1.0a Documentation
+
OAuth 1.0a Documentation:
-
Dummy Users' Direct Login Tokens
+
Dummy Users' Direct Login Tokens:
-
Direct Login Endpoint
+
Direct Login Endpoint:
-
Direct Login Documentation
+
Direct Login Documentation:
@@ -237,7 +237,7 @@ Berlin 13359, Germany
-
OAuth2
+
OAuth2:
oauth2.client_id=auth-code-client
From 884609b983feb39f5583d4b0555c8d4dddae0cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Mon, 20 Mar 2023 09:18:49 +0100 Subject: [PATCH 6/6] feature/Tweak the function getDbConnectionParameters 2 --- .../src/main/scala/code/api/util/DBUtil.scala | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/obp-api/src/main/scala/code/api/util/DBUtil.scala b/obp-api/src/main/scala/code/api/util/DBUtil.scala index daf096e7e..f3f4901da 100644 --- a/obp-api/src/main/scala/code/api/util/DBUtil.scala +++ b/obp-api/src/main/scala/code/api/util/DBUtil.scala @@ -3,8 +3,16 @@ package code.api.util import code.api.Constant object DBUtil { + def dbUrl: String = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue + def getDbConnectionParameters: (String, String, String) = { - val dbUrl = APIUtil.getPropsValue("db.url") openOr Constant.h2DatabaseDefaultUrlValue + dbUrl.contains("jdbc:h2") match { + case true => getH2DbConnectionParameters + case false => getOtherDbConnectionParameters + } + } + + private def getOtherDbConnectionParameters: (String, String, String) = { val usernameAndPassword = dbUrl.split("\\?").filter(_.contains("user")).mkString val username = usernameAndPassword.split("&").filter(_.contains("user")).mkString.split("=")(1) val password = usernameAndPassword.split("&").filter(_.contains("password")).mkString.split("=")(1) @@ -12,4 +20,12 @@ object DBUtil { val dbPassword = APIUtil.getPropsValue("db.password").getOrElse(password) (dbUrl, dbUser, dbPassword) } + // H2 database has specific bd url string which is different compared to other databases + private def getH2DbConnectionParameters: (String, String, String) = { + val username = dbUrl.split(";").filter(_.contains("user")).toList.headOption.map(_.split("=")(1)) + val password = dbUrl.split(";").filter(_.contains("password")).toList.headOption.map(_.split("=")(1)) + val dbUser = APIUtil.getPropsValue("db.user").orElse(username) + val dbPassword = APIUtil.getPropsValue("db.password").orElse(password) + (dbUrl, dbUser.getOrElse(""), dbPassword.getOrElse("")) + } }