Merge pull request #2206 from constantine2nd/develop

A few changes
This commit is contained in:
Simon Redfern 2023-03-20 10:11:40 +01:00 committed by GitHub
commit 47ddb2e4e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 60 additions and 73 deletions

View File

@ -0,0 +1,31 @@
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) = {
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)
val dbUser = APIUtil.getPropsValue("db.user").getOrElse(username)
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(""))
}
}

View File

@ -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."

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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""

View File

@ -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

View File

@ -174,61 +174,61 @@ Berlin 13359, Germany
<p>Please save it in a secure location.</p>
<div class="row">
<div class="col-xs-12 col-sm-4">Consumer ID</div>
<div class="col-xs-12 col-sm-4">Consumer ID: </div>
<div class="col-xs-12 col-sm-8"><span id="app-consumer_id">123</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Application Type</div>
<div class="col-xs-12 col-sm-4">Application Type: </div>
<div class="col-xs-12 col-sm-8"><span id="app-type">web</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Application Name</div>
<div class="col-xs-12 col-sm-4">Application Name: </div>
<div class="col-xs-12 col-sm-8"><span id="app-name">ABC</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">User redirect URL</div>
<div class="col-xs-12 col-sm-4">User redirect URL: </div>
<div class="col-xs-12 col-sm-8"><span id="app-redirect-url">ABC</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Developer Email</div>
<div class="col-xs-12 col-sm-4">Developer Email: </div>
<div class="col-xs-12 col-sm-8"><span id="app-developer">abc@example.com</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">App Description</div>
<div class="col-xs-12 col-sm-4">App Description: </div>
<div class="col-xs-12 col-sm-8"><span id="app-description">ABCDEF</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Client certificate</div>
<div class="col-xs-12 col-sm-4">Client certificate: </div>
<div class="col-xs-12 col-sm-8">
<span id="client_certificate" style="overflow-wrap: anywhere">ABCDEF</span>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Consumer Key</div>
<div class="col-xs-12 col-sm-4">Consumer Key: </div>
<div class="col-xs-12 col-sm-8"><span id="auth-key">23432432432432</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Consumer Secret</div>
<div class="col-xs-12 col-sm-4">Consumer Secret: </div>
<div class="col-xs-12 col-sm-8"><span id="secret-key">3334543543543</span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">OAuth 1.0a Endpoint</div>
<div class="col-xs-12 col-sm-4">OAuth 1.0a Endpoint: </div>
<div class="col-xs-12 col-sm-8"><span id="oauth-endpoint"><a href="#">endpoint</a></span></div>
</div>
<div class="row" data-lift="WebUI.oauth1aLoginDocLink">
<div class="col-xs-12 col-sm-4">OAuth 1.0a Documentation</div>
<div class="col-xs-12 col-sm-4">OAuth 1.0a Documentation: </div>
<div class="col-xs-12 col-sm-8"><a id="oauth1a-doc-link" href="https://github.com/OpenBankProject/OBP-API/wiki/OAuth-1.0-Server" target="_blank">How to use OAuth for OpenBankProject</a></div>
</div>
<div class="row" id="dummy-user-tokens">
<div class="col-xs-12 col-sm-4">Dummy Users' Direct Login Tokens</div>
<div class="col-xs-12 col-sm-4">Dummy Users' Direct Login Tokens: </div>
<div class="col-xs-12 col-sm-8"><span id="create-directlogin"><a target="_blank" href="#" rel="noopener">Get dummy users' token</a></span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4">Direct Login Endpoint</div>
<div class="col-xs-12 col-sm-4">Direct Login Endpoint: </div>
<div class="col-xs-12 col-sm-8"><span id="directlogin-endpoint"><a href="#">endpoint</a></span></div>
</div>
<div class="row" data-lift="WebUI.directLoginDocLink">
<div class="col-xs-12 col-sm-4">Direct Login Documentation</div>
<div class="col-xs-12 col-sm-4">Direct Login Documentation: </div>
<div class="col-xs-12 col-sm-8"><a id="direct-login-doc-link" href="https://github.com/OpenBankProject/OBP-API/wiki/Direct-Login" target="_blank">How to use Direct Login</a>
</div>
</div>
@ -237,7 +237,7 @@ Berlin 13359, Germany
<div class="col-xs-12 col-sm-8"><span id="post-consumer-registration-more-info-link"><a href="#"></a></span></div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-4" id="hydra-client-info-title">OAuth2</div>
<div class="col-xs-12 col-sm-4" id="hydra-client-info-title">OAuth2: </div>
<div class="col-xs-12 col-sm-8">
<span id="hydra-client-info" style="overflow-wrap: anywhere">
oauth2.client_id=<span id="client_id">auth-code-client</span><br>