mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 09:26:53 +00:00
commit
47ddb2e4e4
31
obp-api/src/main/scala/code/api/util/DBUtil.scala
Normal file
31
obp-api/src/main/scala/code/api/util/DBUtil.scala
Normal 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(""))
|
||||
}
|
||||
}
|
||||
@ -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."
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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""
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user