mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 11:06:49 +00:00
Merge remote-tracking branch 'refs/remotes/Hongwei/developPom' into develop
This commit is contained in:
commit
8f2048c89e
1
.github/workflows/auto_update_base_image.yml
vendored
1
.github/workflows/auto_update_base_image.yml
vendored
@ -11,6 +11,7 @@ env:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
@ -13,7 +13,6 @@ env:
|
||||
DOCKER_HUB_ORGANIZATION: ${{ vars.DOCKER_HUB_ORGANIZATION }}
|
||||
DOCKER_HUB_REPOSITORY: obp-api
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@ -36,8 +35,8 @@ jobs:
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
java-version: "11"
|
||||
distribution: "adopt"
|
||||
cache: maven
|
||||
- name: Build with Maven
|
||||
run: |
|
||||
@ -126,6 +125,7 @@ jobs:
|
||||
path: push/
|
||||
|
||||
- name: Build the Docker image
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: |
|
||||
echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin docker.io
|
||||
docker build . --file .github/Dockerfile_PreBuild --tag docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:$GITHUB_SHA --tag docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:latest --tag docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:develop
|
||||
@ -136,9 +136,11 @@ jobs:
|
||||
- uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
|
||||
|
||||
- name: Write signing key to disk (only needed for `cosign sign --key`)
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
|
||||
|
||||
- name: Sign container image
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: |
|
||||
cosign sign -y --key cosign.key \
|
||||
docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:develop
|
||||
@ -152,5 +154,3 @@ jobs:
|
||||
docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:latest-OC
|
||||
env:
|
||||
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"
|
||||
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@ name: Build and publish container non develop
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
- '!develop'
|
||||
- "*"
|
||||
- "!develop"
|
||||
|
||||
env:
|
||||
DOCKER_HUB_ORGANIZATION: ${{ vars.DOCKER_HUB_ORGANIZATION }}
|
||||
@ -35,8 +35,8 @@ jobs:
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
java-version: "11"
|
||||
distribution: "adopt"
|
||||
cache: maven
|
||||
- name: Build with Maven
|
||||
run: |
|
||||
@ -125,6 +125,7 @@ jobs:
|
||||
path: push/
|
||||
|
||||
- name: Build the Docker image
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: |
|
||||
echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin docker.io
|
||||
docker build . --file .github/Dockerfile_PreBuild --tag docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:$GITHUB_SHA --tag docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:${GITHUB_REF##*/}
|
||||
@ -135,9 +136,11 @@ jobs:
|
||||
- uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
|
||||
|
||||
- name: Write signing key to disk (only needed for `cosign sign --key`)
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
|
||||
|
||||
- name: Sign container image
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
run: |
|
||||
cosign sign -y --key cosign.key \
|
||||
docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:${GITHUB_REF##*/}
|
||||
@ -147,5 +150,3 @@ jobs:
|
||||
docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:$GITHUB_SHA
|
||||
env:
|
||||
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"
|
||||
|
||||
|
||||
|
||||
11
.github/workflows/build_pull_request.yml
vendored
11
.github/workflows/build_pull_request.yml
vendored
@ -3,15 +3,15 @@ name: Build on Pull Request
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
- "**"
|
||||
env:
|
||||
## Sets environment variable
|
||||
DOCKER_HUB_ORGANIZATION: ${{ vars.DOCKER_HUB_ORGANIZATION }}
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'OpenBankProject/OBP-API'
|
||||
services:
|
||||
# Label used to access the service container
|
||||
redis:
|
||||
@ -31,8 +31,8 @@ jobs:
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
java-version: "11"
|
||||
distribution: "adopt"
|
||||
cache: maven
|
||||
- name: Build with Maven
|
||||
run: |
|
||||
@ -119,6 +119,3 @@ jobs:
|
||||
with:
|
||||
name: ${{ github.sha }}
|
||||
path: pull/
|
||||
|
||||
|
||||
|
||||
|
||||
19
.github/workflows/run_trivy.yml
vendored
19
.github/workflows/run_trivy.yml
vendored
@ -12,11 +12,10 @@ env:
|
||||
DOCKER_HUB_ORGANIZATION: ${{ vars.DOCKER_HUB_ORGANIZATION }}
|
||||
DOCKER_HUB_REPOSITORY: obp-api
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: github.repository == 'OpenBankProject/OBP-API' && github.event.workflow_run.conclusion == 'success'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
@ -38,17 +37,17 @@ jobs:
|
||||
- name: Run Trivy vulnerability scanner
|
||||
uses: aquasecurity/trivy-action@master
|
||||
with:
|
||||
image-ref: 'docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:${{ github.sha }}'
|
||||
format: 'template'
|
||||
template: '@/contrib/sarif.tpl'
|
||||
output: 'trivy-results.sarif'
|
||||
security-checks: 'vuln'
|
||||
severity: 'CRITICAL,HIGH'
|
||||
timeout: '30m'
|
||||
image-ref: "docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }}:${{ github.sha }}"
|
||||
format: "template"
|
||||
template: "@/contrib/sarif.tpl"
|
||||
output: "trivy-results.sarif"
|
||||
security-checks: "vuln"
|
||||
severity: "CRITICAL,HIGH"
|
||||
timeout: "30m"
|
||||
cache-dir: .trivy
|
||||
- name: Fix .trivy permissions
|
||||
run: sudo chown -R $(stat . -c %u:%g) .trivy
|
||||
- name: Upload Trivy scan results to GitHub Security tab
|
||||
uses: github/codeql-action/upload-sarif@v3
|
||||
with:
|
||||
sarif_file: 'trivy-results.sarif'
|
||||
sarif_file: "trivy-results.sarif"
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
.github/*
|
||||
*.class
|
||||
*.db
|
||||
.DS_Store
|
||||
|
||||
@ -586,15 +586,9 @@
|
||||
<forkMode>once</forkMode>
|
||||
<junitxml>.</junitxml>
|
||||
<filereports>WDF TestSuite.txt</filereports>
|
||||
<!-- Increased memory for faster test execution -->
|
||||
<argLine>-Drun.mode=test -XX:MaxMetaspaceSize=1G -Xms2G -Xmx4G -XX:+UseG1GC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+UseStringDeduplication --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.jar=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED</argLine>
|
||||
<argLine>-Drun.mode=test -XX:MaxMetaspaceSize=512m -Xms512m -Xmx512m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.jar=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED</argLine>
|
||||
<tagsToExclude>code.external</tagsToExclude>
|
||||
<testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore>
|
||||
<!-- Disable parallel test execution to avoid shared database state issues -->
|
||||
<!-- Tests share an in-memory H2 database which causes conflicts when run in parallel -->
|
||||
<!-- <parallel>true</parallel>-->
|
||||
<!-- <threadCount>4</threadCount>-->
|
||||
<parallel>false</parallel>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
@ -673,26 +667,15 @@
|
||||
<version>4.8.1</version>
|
||||
<configuration>
|
||||
<fork>true</fork>
|
||||
<recompileMode>incremental</recompileMode>
|
||||
<useZincServer>true</useZincServer>
|
||||
<jvmArgs>
|
||||
<jvmArg>-Xms4G</jvmArg>
|
||||
<jvmArg>-Xmx12G</jvmArg>
|
||||
<jvmArg>-Xss4m</jvmArg>
|
||||
<jvmArg>-XX:MaxMetaspaceSize=4G</jvmArg>
|
||||
<jvmArg>-XX:+UseG1GC</jvmArg>
|
||||
<jvmArg>-XX:+TieredCompilation</jvmArg>
|
||||
<jvmArg>-XX:TieredStopAtLevel=1</jvmArg>
|
||||
</jvmArgs>
|
||||
<args>
|
||||
<arg>-deprecation</arg>
|
||||
<arg>-feature</arg>
|
||||
<!-- Enable language features to suppress warnings -->
|
||||
<arg>-language:implicitConversions</arg>
|
||||
<arg>-language:reflectiveCalls</arg>
|
||||
<arg>-language:postfixOps</arg>
|
||||
<!-- Suppress auto-application deprecation warning -->
|
||||
<arg>-Wconf:cat=deprecation&msg=auto-application:s</arg>
|
||||
</args>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
@ -624,6 +624,14 @@ webui_agree_terms_url =
|
||||
#webui_post_consumer_registration_more_info_text = Please tell us more your Application and / or Startup using this link.
|
||||
#webui_post_consumer_registration_submit_button_value=Register consumer
|
||||
|
||||
# OBP Portal URL - base URL for the OBP Portal service
|
||||
webui_obp_portal_url = http://localhost:5174
|
||||
|
||||
# External Consumer Registration URL - used to redirect "Get API Key" links to an external service
|
||||
# If not set, defaults to webui_obp_portal_url + "/consumer-registration"
|
||||
# Set this to redirect to a custom URL for consumer registration
|
||||
webui_external_consumer_registration_url = http://localhost:5174/consumer-registration
|
||||
|
||||
|
||||
## Display For Banks section
|
||||
webui_display_for_banks_section = true
|
||||
|
||||
@ -4,6 +4,7 @@ import code.api.util.{APIUtil, CallContext, DynamicUtil}
|
||||
import code.bankconnectors.Connector
|
||||
import code.model.dataAccess.ResourceUser
|
||||
import code.users.Users
|
||||
import code.entitlement.Entitlement
|
||||
import com.openbankproject.commons.model._
|
||||
import com.openbankproject.commons.ExecutionContext.Implicits.global
|
||||
import net.liftweb.common.{Box, Empty, Failure, Full}
|
||||
@ -26,12 +27,12 @@ object AbacRuleEngine {
|
||||
|
||||
/**
|
||||
* Type alias for compiled ABAC rule function
|
||||
* Parameters: authenticatedUser (logged in), authenticatedUserAttributes (non-personal), authenticatedUserAuthContext (auth context),
|
||||
* onBehalfOfUser (delegation), onBehalfOfUserAttributes, onBehalfOfUserAuthContext,
|
||||
* Parameters: authenticatedUser (logged in), authenticatedUserAttributes (non-personal), authenticatedUserAuthContext (auth context), authenticatedUserEntitlements (roles),
|
||||
* onBehalfOfUser (delegation), onBehalfOfUserAttributes, onBehalfOfUserAuthContext, onBehalfOfUserEntitlements,
|
||||
* user, userAttributes, bankOpt, bankAttributes, accountOpt, accountAttributes, transactionOpt, transactionAttributes, customerOpt, customerAttributes
|
||||
* Returns: Boolean (true = allow access, false = deny access)
|
||||
*/
|
||||
type AbacRuleFunction = (User, List[UserAttributeTrait], List[UserAuthContext], Option[User], List[UserAttributeTrait], List[UserAuthContext], Option[User], List[UserAttributeTrait], Option[Bank], List[BankAttributeTrait], Option[BankAccount], List[AccountAttribute], Option[Transaction], List[TransactionAttribute], Option[TransactionRequest], List[TransactionRequestAttributeTrait], Option[Customer], List[CustomerAttribute], Option[CallContext]) => Boolean
|
||||
type AbacRuleFunction = (User, List[UserAttributeTrait], List[UserAuthContext], List[Entitlement], Option[User], List[UserAttributeTrait], List[UserAuthContext], List[Entitlement], Option[User], List[UserAttributeTrait], Option[Bank], List[BankAttributeTrait], Option[BankAccount], List[AccountAttribute], Option[Transaction], List[TransactionAttribute], Option[TransactionRequest], List[TransactionRequestAttributeTrait], Option[Customer], List[CustomerAttribute], Option[CallContext]) => Boolean
|
||||
|
||||
/**
|
||||
* Compile an ABAC rule from Scala code
|
||||
@ -73,9 +74,11 @@ object AbacRuleEngine {
|
||||
|import com.openbankproject.commons.model._
|
||||
|import code.model.dataAccess.ResourceUser
|
||||
|import net.liftweb.common._
|
||||
|import code.entitlement.Entitlement
|
||||
|import code.api.util.CallContext
|
||||
|
|
||||
|// ABAC Rule Function
|
||||
|(authenticatedUser: User, authenticatedUserAttributes: List[UserAttributeTrait], authenticatedUserAuthContext: List[UserAuthContext], onBehalfOfUserOpt: Option[User], onBehalfOfUserAttributes: List[UserAttributeTrait], onBehalfOfUserAuthContext: List[UserAuthContext], userOpt: Option[User], userAttributes: List[UserAttributeTrait], bankOpt: Option[Bank], bankAttributes: List[BankAttributeTrait], accountOpt: Option[BankAccount], accountAttributes: List[AccountAttribute], transactionOpt: Option[Transaction], transactionAttributes: List[TransactionAttribute], transactionRequestOpt: Option[TransactionRequest], transactionRequestAttributes: List[TransactionRequestAttributeTrait], customerOpt: Option[Customer], customerAttributes: List[CustomerAttribute], callContext: Option[code.api.util.CallContext]) => {
|
||||
|(authenticatedUser: User, authenticatedUserAttributes: List[UserAttributeTrait], authenticatedUserAuthContext: List[UserAuthContext], authenticatedUserEntitlements: List[Entitlement], onBehalfOfUserOpt: Option[User], onBehalfOfUserAttributes: List[UserAttributeTrait], onBehalfOfUserAuthContext: List[UserAuthContext], onBehalfOfUserEntitlements: List[Entitlement], userOpt: Option[User], userAttributes: List[UserAttributeTrait], bankOpt: Option[Bank], bankAttributes: List[BankAttributeTrait], accountOpt: Option[BankAccount], accountAttributes: List[AccountAttribute], transactionOpt: Option[Transaction], transactionAttributes: List[TransactionAttribute], transactionRequestOpt: Option[TransactionRequest], transactionRequestAttributes: List[TransactionRequestAttributeTrait], customerOpt: Option[Customer], customerAttributes: List[CustomerAttribute], callContext: Option[code.api.util.CallContext]) => {
|
||||
| $ruleCode
|
||||
|}
|
||||
|""".stripMargin
|
||||
@ -129,6 +132,12 @@ object AbacRuleEngine {
|
||||
5.seconds
|
||||
)
|
||||
|
||||
// Fetch entitlements for authenticated user
|
||||
authenticatedUserEntitlements = Await.result(
|
||||
code.api.util.NewStyle.function.getEntitlementsByUserId(authenticatedUserId, Some(callContext)),
|
||||
5.seconds
|
||||
)
|
||||
|
||||
// Fetch onBehalfOf user if provided (delegation scenario)
|
||||
onBehalfOfUserOpt <- onBehalfOfUserId match {
|
||||
case Some(obUserId) => Users.users.vend.getUserByUserId(obUserId).map(Some(_))
|
||||
@ -155,6 +164,16 @@ object AbacRuleEngine {
|
||||
case None => List.empty[UserAuthContext]
|
||||
}
|
||||
|
||||
// Fetch entitlements for onBehalfOf user if provided
|
||||
onBehalfOfUserEntitlements = onBehalfOfUserId match {
|
||||
case Some(obUserId) =>
|
||||
Await.result(
|
||||
code.api.util.NewStyle.function.getEntitlementsByUserId(obUserId, Some(callContext)),
|
||||
5.seconds
|
||||
)
|
||||
case None => List.empty[Entitlement]
|
||||
}
|
||||
|
||||
// Fetch target user if userId is provided
|
||||
userOpt <- userId match {
|
||||
case Some(uId) => Users.users.vend.getUserByUserId(uId).map(Some(_))
|
||||
@ -274,13 +293,77 @@ object AbacRuleEngine {
|
||||
// Compile and execute the rule
|
||||
compiledFunc <- compileRule(ruleId, rule.ruleCode)
|
||||
result <- tryo {
|
||||
compiledFunc(authenticatedUser, authenticatedUserAttributes, authenticatedUserAuthContext, onBehalfOfUserOpt, onBehalfOfUserAttributes, onBehalfOfUserAuthContext, userOpt, userAttributes, bankOpt, bankAttributes, accountOpt, accountAttributes, transactionOpt, transactionAttributes, transactionRequestOpt, transactionRequestAttributes, customerOpt, customerAttributes, Some(callContext))
|
||||
compiledFunc(authenticatedUser, authenticatedUserAttributes, authenticatedUserAuthContext, authenticatedUserEntitlements, onBehalfOfUserOpt, onBehalfOfUserAttributes, onBehalfOfUserAuthContext, onBehalfOfUserEntitlements, userOpt, userAttributes, bankOpt, bankAttributes, accountOpt, accountAttributes, transactionOpt, transactionAttributes, transactionRequestOpt, transactionRequestAttributes, customerOpt, customerAttributes, Some(callContext))
|
||||
}
|
||||
} yield result
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Execute all active ABAC rules with a specific policy (OR logic - at least one must pass)
|
||||
* @param logic The logic to apply: "AND" (all must pass), "OR" (any must pass), "XOR" (exactly one must pass)
|
||||
*
|
||||
* @param policy The policy to filter rules by
|
||||
* @param authenticatedUserId The ID of the authenticated user
|
||||
* @param onBehalfOfUserId Optional ID of user being acted on behalf of
|
||||
* @param userId The ID of the target user to evaluate
|
||||
* @param callContext Call context for fetching objects
|
||||
* @param bankId Optional bank ID
|
||||
* @param accountId Optional account ID
|
||||
* @param viewId Optional view ID
|
||||
* @param transactionId Optional transaction ID
|
||||
* @param transactionRequestId Optional transaction request ID
|
||||
* @param customerId Optional customer ID
|
||||
* @return Box[Boolean] - Full(true) if at least one rule passes (OR logic), Full(false) if all fail
|
||||
*/
|
||||
def executeRulesByPolicy(
|
||||
policy: String,
|
||||
authenticatedUserId: String,
|
||||
onBehalfOfUserId: Option[String] = None,
|
||||
userId: Option[String] = None,
|
||||
callContext: CallContext,
|
||||
bankId: Option[String] = None,
|
||||
accountId: Option[String] = None,
|
||||
viewId: Option[String] = None,
|
||||
transactionId: Option[String] = None,
|
||||
transactionRequestId: Option[String] = None,
|
||||
customerId: Option[String] = None
|
||||
): Box[Boolean] = {
|
||||
val rules = MappedAbacRuleProvider.getActiveAbacRulesByPolicy(policy)
|
||||
|
||||
if (rules.isEmpty) {
|
||||
// No rules for this policy - default to allow
|
||||
Full(true)
|
||||
} else {
|
||||
// Execute all rules and check if at least one passes
|
||||
val results = rules.map { rule =>
|
||||
executeRule(
|
||||
ruleId = rule.abacRuleId,
|
||||
authenticatedUserId = authenticatedUserId,
|
||||
onBehalfOfUserId = onBehalfOfUserId,
|
||||
userId = userId,
|
||||
callContext = callContext,
|
||||
bankId = bankId,
|
||||
accountId = accountId,
|
||||
viewId = viewId,
|
||||
transactionId = transactionId,
|
||||
transactionRequestId = transactionRequestId,
|
||||
customerId = customerId
|
||||
)
|
||||
}
|
||||
|
||||
// Count successes and failures
|
||||
val successes = results.filter {
|
||||
case Full(true) => true
|
||||
case _ => false
|
||||
}
|
||||
|
||||
// At least one rule must pass (OR logic)
|
||||
Full(successes.nonEmpty)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ABAC rule code by attempting to compile it
|
||||
*
|
||||
|
||||
@ -14,6 +14,7 @@ trait AbacRuleTrait {
|
||||
def ruleCode: String
|
||||
def isActive: Boolean
|
||||
def description: String
|
||||
def policy: String
|
||||
def createdByUserId: String
|
||||
def updatedByUserId: String
|
||||
}
|
||||
@ -30,6 +31,7 @@ class AbacRule extends AbacRuleTrait with LongKeyedMapper[AbacRule] with IdPK wi
|
||||
override def defaultValue = true
|
||||
}
|
||||
object Description extends MappedText(this)
|
||||
object Policy extends MappedText(this)
|
||||
object CreatedByUserId extends MappedString(this, 255)
|
||||
object UpdatedByUserId extends MappedString(this, 255)
|
||||
|
||||
@ -38,6 +40,7 @@ class AbacRule extends AbacRuleTrait with LongKeyedMapper[AbacRule] with IdPK wi
|
||||
override def ruleCode: String = RuleCode.get
|
||||
override def isActive: Boolean = IsActive.get
|
||||
override def description: String = Description.get
|
||||
override def policy: String = Policy.get
|
||||
override def createdByUserId: String = CreatedByUserId.get
|
||||
override def updatedByUserId: String = UpdatedByUserId.get
|
||||
}
|
||||
@ -51,10 +54,13 @@ trait AbacRuleProvider {
|
||||
def getAbacRuleByName(ruleName: String): Box[AbacRuleTrait]
|
||||
def getAllAbacRules(): List[AbacRuleTrait]
|
||||
def getActiveAbacRules(): List[AbacRuleTrait]
|
||||
def getAbacRulesByPolicy(policy: String): List[AbacRuleTrait]
|
||||
def getActiveAbacRulesByPolicy(policy: String): List[AbacRuleTrait]
|
||||
def createAbacRule(
|
||||
ruleName: String,
|
||||
ruleCode: String,
|
||||
description: String,
|
||||
policy: String,
|
||||
isActive: Boolean,
|
||||
createdBy: String
|
||||
): Box[AbacRuleTrait]
|
||||
@ -63,6 +69,7 @@ trait AbacRuleProvider {
|
||||
ruleName: String,
|
||||
ruleCode: String,
|
||||
description: String,
|
||||
policy: String,
|
||||
isActive: Boolean,
|
||||
updatedBy: String
|
||||
): Box[AbacRuleTrait]
|
||||
@ -87,10 +94,23 @@ object MappedAbacRuleProvider extends AbacRuleProvider {
|
||||
AbacRule.findAll(By(AbacRule.IsActive, true))
|
||||
}
|
||||
|
||||
override def getAbacRulesByPolicy(policy: String): List[AbacRuleTrait] = {
|
||||
AbacRule.findAll().filter { rule =>
|
||||
rule.policy.split(",").map(_.trim).contains(policy)
|
||||
}
|
||||
}
|
||||
|
||||
override def getActiveAbacRulesByPolicy(policy: String): List[AbacRuleTrait] = {
|
||||
AbacRule.findAll(By(AbacRule.IsActive, true)).filter { rule =>
|
||||
rule.policy.split(",").map(_.trim).contains(policy)
|
||||
}
|
||||
}
|
||||
|
||||
override def createAbacRule(
|
||||
ruleName: String,
|
||||
ruleCode: String,
|
||||
description: String,
|
||||
policy: String,
|
||||
isActive: Boolean,
|
||||
createdBy: String
|
||||
): Box[AbacRuleTrait] = {
|
||||
@ -99,6 +119,7 @@ object MappedAbacRuleProvider extends AbacRuleProvider {
|
||||
.RuleName(ruleName)
|
||||
.RuleCode(ruleCode)
|
||||
.Description(description)
|
||||
.Policy(policy)
|
||||
.IsActive(isActive)
|
||||
.CreatedByUserId(createdBy)
|
||||
.UpdatedByUserId(createdBy)
|
||||
@ -111,6 +132,7 @@ object MappedAbacRuleProvider extends AbacRuleProvider {
|
||||
ruleName: String,
|
||||
ruleCode: String,
|
||||
description: String,
|
||||
policy: String,
|
||||
isActive: Boolean,
|
||||
updatedBy: String
|
||||
): Box[AbacRuleTrait] = {
|
||||
@ -121,6 +143,7 @@ object MappedAbacRuleProvider extends AbacRuleProvider {
|
||||
.RuleName(ruleName)
|
||||
.RuleCode(ruleCode)
|
||||
.Description(description)
|
||||
.Policy(policy)
|
||||
.IsActive(isActive)
|
||||
.UpdatedByUserId(updatedBy)
|
||||
.saveMe()
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.ApiTag._
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.AUOpenBanking.v1_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.BahrainOBF.v1_0_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package code.api.MxOF
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant
|
||||
import code.api.MxOF.JSONFactory_MXOF_0_0_1.createGetAtmsResponse
|
||||
import code.api.util.APIUtil._
|
||||
|
||||
@ -27,6 +27,8 @@ TESOBE (http://www.tesobe.com/)
|
||||
|
||||
package code.api
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant._
|
||||
import code.api.OAuthHandshake._
|
||||
import code.api.util.APIUtil._
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.Polish.v2_1_1_1
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.Polish.v2_1_1_1
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.Polish.v2_1_1_1
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.Polish.v2_1_1_1
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.ResourceDocs1_4_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.Constant.HostName
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.cache.Caching
|
||||
@ -16,7 +17,7 @@ import net.liftweb.http.{GetRequest, InMemoryResponse, PlainTextResponse, Req, S
|
||||
object ResourceDocs140 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version = ApiVersion.v1_4_0 // "1.4.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
@ -31,7 +32,7 @@ object ResourceDocs140 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs200 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version = ApiVersion.v2_0_0 // "2.0.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -46,7 +47,7 @@ object ResourceDocs200 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs210 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v2_1_0 // "2.1.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -60,7 +61,7 @@ object ResourceDocs210 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs220 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v2_2_0 // "2.2.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -74,7 +75,7 @@ object ResourceDocs220 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version : ApiVersion = ApiVersion.v3_0_0 // = "3.0.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -87,7 +88,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs310 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v3_1_0 // = "3.0.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObp,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -102,7 +103,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs400 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v4_0_0 // = "4.0.0" // We match other api versions so API explorer can easily use the path.
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObpV400,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -117,7 +118,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs500 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v5_0_0
|
||||
val versionStatus = ApiVersionStatus.STABLE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObpV400,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -132,7 +133,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs510 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v5_1_0
|
||||
val versionStatus = ApiVersionStatus.BLEEDING_EDGE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObpV400,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
|
||||
@ -148,7 +149,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
|
||||
object ResourceDocs600 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
|
||||
val version: ApiVersion = ApiVersion.v6_0_0
|
||||
val versionStatus = ApiVersionStatus.BLEEDING_EDGE.toString
|
||||
val routes = List(
|
||||
val routes: Seq[OBPEndpoint] = List(
|
||||
ImplementationsResourceDocs.getResourceDocsObpV400,
|
||||
ImplementationsResourceDocs.getResourceDocsSwagger,
|
||||
ImplementationsResourceDocs.getResourceDocsOpenAPI31,
|
||||
|
||||
@ -39,6 +39,7 @@ import net.liftweb.json.JsonAST.{JField, JString, JValue}
|
||||
import net.liftweb.json._
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import scala.collection.immutable
|
||||
import scala.collection.immutable.{List, Nil}
|
||||
import scala.concurrent.Future
|
||||
|
||||
@ -471,7 +472,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
case true => authenticatedAccess(cc) // If set resource_docs_requires_role=true, we need check the authentication
|
||||
}
|
||||
_ <- resourceDocsRequireRole match {
|
||||
case false => Future()
|
||||
case false => Future(())
|
||||
case true => // If set resource_docs_requires_role=true, we need check the roles as well
|
||||
NewStyle.function.hasAtLeastOneEntitlement(failMsg = UserHasMissingRoles + canReadResourceDoc.toString)("", u.map(_.userId).getOrElse(""), ApiRole.canReadResourceDoc :: Nil, cc.callContext)
|
||||
}
|
||||
@ -595,7 +596,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
||||
}
|
||||
(_, callContext) <- NewStyle.function.getBank(BankId(bankId), Option(cc))
|
||||
_ <- resourceDocsRequireRole match {
|
||||
case false => Future()
|
||||
case false => Future(())
|
||||
case true => // If set resource_docs_requires_role=true, we need check the the roles as well
|
||||
NewStyle.function.hasAtLeastOneEntitlement(failMsg = UserHasMissingRoles + ApiRole.canReadDynamicResourceDocsAtOneBank.toString)(
|
||||
bankId, u.map(_.userId).getOrElse(""), ApiRole.canReadDynamicResourceDocsAtOneBank::Nil, cc.callContext
|
||||
@ -1256,3 +1257,4 @@ so the caller must specify any required filtering by catalog explicitly.
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.ResourceDocs1_4_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant
|
||||
import code.api.Constant._
|
||||
import code.api.UKOpenBanking.v2_0_0.JSONFactory_UKOpenBanking_200
|
||||
|
||||
@ -889,7 +889,7 @@ object SwaggerJSONFactory extends MdcLoggable {
|
||||
* @return a list of include original list and nested objects
|
||||
*/
|
||||
private def getAllEntities(entities: List[AnyRef]) = {
|
||||
val notNullEntities = entities.filter(null !=)
|
||||
val notNullEntities = entities.filter(null.!=)
|
||||
val notSupportYetEntity = entities.filter(_.getClass.getSimpleName.equals(NotSupportedYet.getClass.getSimpleName.replace("$","")))
|
||||
val existsEntityTypes: Set[universe.Type] = notNullEntities.map(ReflectUtils.getType).toSet
|
||||
|
||||
@ -919,10 +919,10 @@ object SwaggerJSONFactory extends MdcLoggable {
|
||||
val entityType = ReflectUtils.getType(obj)
|
||||
val constructorParamList = ReflectUtils.getPrimaryConstructor(entityType).paramLists.headOption.getOrElse(Nil)
|
||||
// if exclude current obj, the result list tail will be Nil
|
||||
val resultTail = if(excludeTypes.exists(entityType =:=)) Nil else List(obj)
|
||||
val resultTail = if(excludeTypes.exists(entityType.=:=)) Nil else List(obj)
|
||||
|
||||
val refValues: List[Any] = constructorParamList
|
||||
.filter(it => isSwaggerRefType(it.info) && !excludeTypes.exists(_ =:= it.info))
|
||||
.filter(it => isSwaggerRefType(it.info) && !excludeTypes.exists(_.=:=(it.info)))
|
||||
.map(it => {
|
||||
val paramName = it.name.toString
|
||||
val value = ReflectUtils.invokeMethod(obj, paramName)
|
||||
@ -1009,7 +1009,7 @@ object SwaggerJSONFactory extends MdcLoggable {
|
||||
val errorMessages: Set[AnyRef] = resourceDocList.flatMap(_.error_response_bodies).toSet
|
||||
|
||||
val errorDefinitions = ErrorMessages.allFields
|
||||
.filterNot(null ==)
|
||||
.filterNot(null.==)
|
||||
.filter(it => errorMessages.contains(it._2))
|
||||
.toList
|
||||
.map(it => {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.STET.v1_4
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.STET.v1_4.JSONFactory_STET_1_4._
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.STET.v1_4
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.STET.v1_4
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant
|
||||
import code.api.UKOpenBanking.v3_1_0.JSONFactory_UKOpenBanking_310.ConsentPostBodyUKV310
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.Constant
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiTag
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.UKOpenBanking.v3_1_0
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.v1_3.JvalueCaseClass
|
||||
import code.api.util.APIUtil.{defaultBankId, _}
|
||||
import code.api.util.ApiTag._
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.builder.AccountInformationServiceAISApi
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.Constant.{SYSTEM_READ_ACCOUNTS_BERLIN_GROUP_VIEW_ID, SYSTEM_READ_BALANCES_BERLIN_GROUP_VIEW_ID, SYSTEM_READ_TRANSACTIONS_BERLIN_GROUP_VIEW_ID}
|
||||
import code.api.berlin.group.ConstantsBG
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.builder.CommonServicesApi
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.ConstantsBG
|
||||
import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
import code.api.builder.AccountInformationServiceAISApi.APIMethods_AccountInformationServiceAISApi
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.builder.ConfirmationOfFundsServicePIISApi
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.ConstantsBG
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3._
|
||||
import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.builder.PaymentInitiationServicePISApi
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.ConstantsBG
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3.{CancelPaymentResponseJson, CancelPaymentResponseLinks, LinkHrefJson, UpdatePaymentPsuDataJson, checkAuthorisationConfirmation, checkSelectPsuAuthenticationMethod, checkTransactionAuthorisation, checkUpdatePsuAuthentication, createCancellationTransactionRequestJson}
|
||||
import code.api.berlin.group.v1_3.model.TransactionStatus.mapTransactionStatus
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.builder.SigningBasketsApi
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.berlin.group.ConstantsBG
|
||||
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3.{PostSigningBasketJsonV13, UpdatePaymentPsuDataJson, createSigningBasketResponseJson, createStartSigningBasketAuthorisationJson, getSigningBasketResponseJson, getSigningBasketStatusResponseJson}
|
||||
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass}
|
||||
|
||||
@ -266,6 +266,19 @@ object Constant extends MdcLoggable {
|
||||
// ABAC Cache Prefixes (with global namespace and versioning)
|
||||
def ABAC_RULE_PREFIX: String = getVersionedCachePrefix(ABAC_RULE_NAMESPACE)
|
||||
|
||||
// ABAC Policy Constants
|
||||
final val ABAC_POLICY_ACCOUNT_ACCESS = "account-access"
|
||||
|
||||
// List of all ABAC Policies
|
||||
final val ABAC_POLICIES: List[String] = List(
|
||||
ABAC_POLICY_ACCOUNT_ACCESS
|
||||
)
|
||||
|
||||
// Map of ABAC Policies to their descriptions
|
||||
final val ABAC_POLICY_DESCRIPTIONS: Map[String, String] = Map(
|
||||
ABAC_POLICY_ACCOUNT_ACCESS -> "Rules for controlling access to account information and account-related operations"
|
||||
)
|
||||
|
||||
final val CAN_SEE_TRANSACTION_OTHER_BANK_ACCOUNT = "can_see_transaction_other_bank_account"
|
||||
final val CAN_SEE_TRANSACTION_METADATA = "can_see_transaction_metadata"
|
||||
final val CAN_SEE_TRANSACTION_DESCRIPTION = "can_see_transaction_description"
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.dynamic.endpoint.helper
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import code.api.util.APIUtil.{OBPEndpoint, OBPReturnType, futureToBoxedResponse, scalaFutureToLaFuture}
|
||||
import code.api.util.DynamicUtil.{Sandbox, Validation}
|
||||
import code.api.util.{CallContext, CustomJsonFormats, DynamicUtil}
|
||||
@ -34,7 +35,7 @@ trait DynamicCompileEndpoint {
|
||||
}
|
||||
|
||||
private def validateDependencies() = {
|
||||
val dependencies = DynamicUtil.getDynamicCodeDependentMethods(this.getClass, "process" == )
|
||||
val dependencies = DynamicUtil.getDynamicCodeDependentMethods(this.getClass, "process".==)
|
||||
Validation.validateDependency(dependencies)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.dynamic.endpoint.helper
|
||||
|
||||
import scala.language.existentials
|
||||
import org.apache.pekko.http.scaladsl.model.{HttpMethods, HttpMethod => PekkoHttpMethod}
|
||||
import code.DynamicData.{DynamicDataProvider, DynamicDataT}
|
||||
import code.DynamicEndpoint.{DynamicEndpointProvider, DynamicEndpointT}
|
||||
@ -677,7 +678,7 @@ object DynamicEndpointHelper extends RestHelper {
|
||||
schemas += schema
|
||||
}
|
||||
// check whether this schema already recurse two times
|
||||
if(schemas.count(schema ==) > 3) {
|
||||
if(schemas.count(schema.==) > 3) {
|
||||
return JObject(Nil)
|
||||
}
|
||||
|
||||
|
||||
@ -26,6 +26,9 @@ TESOBE (http://www.tesobe.com/)
|
||||
*/
|
||||
|
||||
package code.api.util
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import scala.language.reflectiveCalls
|
||||
import bootstrap.liftweb.CustomDBVendor
|
||||
import cats.effect.IO
|
||||
import code.accountholders.AccountHolders
|
||||
@ -1646,6 +1649,11 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
||||
var errorResponseBodies: List[String], // Possible error responses
|
||||
tags: List[ResourceDocTag],
|
||||
var roles: Option[List[ApiRole]] = None,
|
||||
// IMPORTANT: Roles declared here are AUTOMATICALLY CHECKED at runtime!
|
||||
// When roles specified, framework automatically: 1) Validates user authentication,
|
||||
// 2) Checks user has at least one of specified roles, 3) Performs checks in wrappedWithAuthCheck()
|
||||
// No manual hasEntitlement() call needed in endpoint body - handled automatically!
|
||||
// To disable: call .disableAutoValidateRoles() on ResourceDoc
|
||||
isFeatured: Boolean = false,
|
||||
specialInstructions: Option[String] = None,
|
||||
var specifiedUrl: Option[String] = None, // A derived value: Contains the called version (added at run time). See the resource doc for resource doc!
|
||||
@ -1778,9 +1786,9 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
||||
|
||||
private val reversedRequestUrl = requestUrlPartPath.reverse
|
||||
def getPathParams(url: List[String]): Map[String, String] =
|
||||
reversedRequestUrl.zip(url.reverse) collect {
|
||||
reversedRequestUrl.zip(url.reverse).collect {
|
||||
case pair @(k, _) if isPathVariable(k) => pair
|
||||
} toMap
|
||||
}.toMap
|
||||
|
||||
/**
|
||||
* According errorResponseBodies whether contains UserNotLoggedIn and UserHasMissingRoles do validation.
|
||||
@ -4068,7 +4076,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
||||
def parseDate(date: String): Option[Date] = {
|
||||
val currentSupportFormats = List(DateWithDayFormat, DateWithSecondsFormat, DateWithMsFormat, DateWithMsRollbackFormat)
|
||||
val parsePosition = new ParsePosition(0)
|
||||
currentSupportFormats.toStream.map(_.parse(date, parsePosition)).find(null !=)
|
||||
currentSupportFormats.toStream.map(_.parse(date, parsePosition)).find(null.!=)
|
||||
}
|
||||
|
||||
private def passesPsd2ServiceProviderCommon(cc: Option[CallContext], serviceProvider: String) = {
|
||||
@ -4464,7 +4472,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
||||
|
||||
private def getClassPool(classLoader: ClassLoader) = {
|
||||
import scala.concurrent.duration._
|
||||
Caching.memoizeSyncWithImMemory(Some(classLoader.toString()))(DurationInt(30) days) {
|
||||
Caching.memoizeSyncWithImMemory(Some(classLoader.toString()))(DurationInt(30).days) {
|
||||
val classPool: ClassPool = ClassPool.getDefault
|
||||
classPool.appendClassPath(new LoaderClassPath(classLoader))
|
||||
classPool
|
||||
@ -4565,7 +4573,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
||||
*/
|
||||
def getObpTrace(clazzName: String, methodName: String, signature: String, exclude: List[(String, String, String)] = Nil): List[(String, String, String)] = {
|
||||
import scala.concurrent.duration._
|
||||
Caching.memoizeSyncWithImMemory(Some(clazzName + methodName + signature))(DurationInt(30) days) {
|
||||
Caching.memoizeSyncWithImMemory(Some(clazzName + methodName + signature))(DurationInt(30).days) {
|
||||
// List:: className->methodName->signature, find all the dependent methods for one
|
||||
val methods = getDependentMethods(clazzName, methodName, signature)
|
||||
|
||||
|
||||
@ -32,11 +32,12 @@ object AfterApiAuth extends MdcLoggable{
|
||||
*/
|
||||
def innerLoginUserInitAction(authUser: Box[AuthUser]) = {
|
||||
authUser.map { u => // Init actions
|
||||
logger.info("AfterApiAuth.innerLoginUserInitAction started successfully")
|
||||
logger.debug("AfterApiAuth.innerLoginUserInitAction started successfully")
|
||||
sofitInitAction(u)
|
||||
} match {
|
||||
case Full(_) => logger.warn("AfterApiAuth.innerLoginUserInitAction completed successfully")
|
||||
case userInitActionFailure => logger.warn("AfterApiAuth.innerLoginUserInitAction: " + userInitActionFailure)
|
||||
case Full(_) => logger.debug("AfterApiAuth.innerLoginUserInitAction completed successfully")
|
||||
case Empty => // Init actions are not started at all
|
||||
case userInitActionFailure => logger.error("AfterApiAuth.innerLoginUserInitAction: " + userInitActionFailure)
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
||||
@ -124,7 +124,7 @@ object ApiRole extends MdcLoggable{
|
||||
// ALL
|
||||
case class CanGetSystemLogCacheAll(requiresBankId: Boolean = false) extends ApiRole
|
||||
lazy val canGetSystemLogCacheAll = CanGetSystemLogCacheAll()
|
||||
|
||||
|
||||
case class CanUpdateAgentStatusAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
|
||||
lazy val canUpdateAgentStatusAtAnyBank = CanUpdateAgentStatusAtAnyBank()
|
||||
|
||||
@ -1003,6 +1003,9 @@ object ApiRole extends MdcLoggable{
|
||||
case class CanGetAllConnectorMethods(requiresBankId: Boolean = false) extends ApiRole
|
||||
lazy val canGetAllConnectorMethods = CanGetAllConnectorMethods()
|
||||
|
||||
case class CanGetSystemConnectorMethodNames(requiresBankId: Boolean = false) extends ApiRole
|
||||
lazy val canGetSystemConnectorMethodNames = CanGetSystemConnectorMethodNames()
|
||||
|
||||
case class CanCreateDynamicResourceDoc(requiresBankId: Boolean = false) extends ApiRole
|
||||
lazy val canCreateDynamicResourceDoc = CanCreateDynamicResourceDoc()
|
||||
|
||||
|
||||
@ -18,6 +18,8 @@ object ApiTag {
|
||||
val apiTagTransactionRequestAttribute = ResourceDocTag("Transaction-Request-Attribute")
|
||||
val apiTagVrp = ResourceDocTag("VRP")
|
||||
val apiTagApi = ResourceDocTag("API")
|
||||
val apiTagOAuth = ResourceDocTag("OAuth")
|
||||
val apiTagOIDC = ResourceDocTag("OIDC")
|
||||
val apiTagBank = ResourceDocTag("Bank")
|
||||
val apiTagBankAttribute = ResourceDocTag("Bank-Attribute")
|
||||
val apiTagAccount = ResourceDocTag("Account")
|
||||
|
||||
@ -3160,7 +3160,7 @@ object NewStyle extends MdcLoggable{
|
||||
|
||||
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
|
||||
CacheKeyFromArguments.buildCacheKey {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(methodRoutingTTL second) {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(methodRoutingTTL.second) {
|
||||
MethodRoutingProvider.connectorMethodProvider.vend.getMethodRoutings(methodName, isBankIdExactMatch, bankIdPattern)
|
||||
}
|
||||
}
|
||||
@ -3213,7 +3213,7 @@ object NewStyle extends MdcLoggable{
|
||||
|
||||
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
|
||||
CacheKeyFromArguments.buildCacheKey {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(endpointMappingTTL second) {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(endpointMappingTTL.second) {
|
||||
{(EndpointMappingProvider.endpointMappingProvider.vend.getAllEndpointMappings(bankId), callContext)}
|
||||
}
|
||||
}
|
||||
@ -3327,7 +3327,7 @@ object NewStyle extends MdcLoggable{
|
||||
|
||||
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
|
||||
CacheKeyFromArguments.buildCacheKey {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL second) {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL.second) {
|
||||
DynamicEntityProvider.connectorMethodProvider.vend.getDynamicEntities(bankId, returnBothBankAndSystemLevel)
|
||||
}
|
||||
}
|
||||
@ -3338,7 +3338,7 @@ object NewStyle extends MdcLoggable{
|
||||
|
||||
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
|
||||
CacheKeyFromArguments.buildCacheKey {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL second) {
|
||||
Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL.second) {
|
||||
DynamicEntityProvider.connectorMethodProvider.vend.getDynamicEntitiesByUserId(userId: String)
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ trait APIMethods121 {
|
||||
|
||||
def checkIfLocationPossible(lat:Double,lon:Double) : Box[Unit] = {
|
||||
if(scala.math.abs(lat) <= 90 & scala.math.abs(lon) <= 180)
|
||||
Full()
|
||||
Full(())
|
||||
else
|
||||
Failure("Coordinates not possible")
|
||||
}
|
||||
@ -132,7 +132,7 @@ trait APIMethods121 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(apiVersion,apiVersionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
|
||||
@ -26,6 +26,8 @@ TESOBE (http://www.tesobe.com/)
|
||||
*/
|
||||
package code.api.v1_2_1
|
||||
|
||||
import scala.language.implicitConversions
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
|
||||
@ -40,7 +42,7 @@ object OBPAPI1_2_1 extends OBPRestHelper with APIMethods121 with MdcLoggable wit
|
||||
val version : ApiVersion = ApiVersion.v1_2_1 // "1.2.1"
|
||||
val versionStatus = ApiVersionStatus.DEPRECATED.toString
|
||||
|
||||
lazy val endpointsOf1_2_1 = List(
|
||||
lazy val endpointsOf1_2_1: Seq[OBPEndpoint] = List(
|
||||
Implementations1_2_1.root,
|
||||
Implementations1_2_1.getBanks,
|
||||
Implementations1_2_1.bankById,
|
||||
|
||||
@ -50,7 +50,7 @@ trait APIMethods130 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(OBPAPI1_3_0.version, OBPAPI1_3_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v1_3_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v1_4_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.Constant._
|
||||
import code.api.util.ApiRole._
|
||||
import code.api.util.ApiTag._
|
||||
@ -84,7 +85,7 @@ trait APIMethods140 extends MdcLoggable with APIMethods130 with APIMethods121{
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(OBPAPI1_4_0.version, OBPAPI1_4_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
|
||||
@ -530,7 +530,7 @@ object JSONFactory1_4_0 extends MdcLoggable{
|
||||
jsonResponseBodyFieldsI18n:String
|
||||
): ResourceDocJson = {
|
||||
val cacheKey = LOCALISED_RESOURCE_DOC_PREFIX + s"operationId:${operationId}-locale:$locale- isVersion4OrHigher:$isVersion4OrHigher".intern()
|
||||
Caching.memoizeSyncWithImMemory(Some(cacheKey))(CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL seconds) {
|
||||
Caching.memoizeSyncWithImMemory(Some(cacheKey))(CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL.seconds) {
|
||||
val fieldsDescription =
|
||||
if (resourceDocUpdatedTags.tags.toString.contains("Dynamic-Entity")
|
||||
|| resourceDocUpdatedTags.tags.toString.contains("Dynamic-Endpoint")
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v1_4_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v2_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.TransactionTypes.TransactionType
|
||||
import code.api.APIFailureNewStyle
|
||||
import code.api.Constant._
|
||||
@ -147,7 +148,7 @@ trait APIMethods200 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory121.getApiInfoJSON(OBPAPI2_0_0.version, OBPAPI2_0_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
|
||||
*/
|
||||
package code.api.v2_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v2_1_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.TransactionTypes.TransactionType
|
||||
import code.api.Constant.CAN_SEE_TRANSACTION_REQUESTS
|
||||
import code.api.util.ApiTag._
|
||||
@ -91,7 +92,7 @@ trait APIMethods210 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(OBPAPI2_1_0.version, OBPAPI2_1_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
|
||||
*/
|
||||
package code.api.v2_1_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import code.api.util.{APIUtil, VersionedOBPApis}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v2_2_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.Constant._
|
||||
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
|
||||
import code.api.util.APIUtil._
|
||||
@ -79,7 +80,7 @@ trait APIMethods220 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(OBPAPI2_2_0.version, OBPAPI2_2_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
@ -535,14 +536,14 @@ trait APIMethods220 {
|
||||
_ <- entitlementsByBank.filter(_.roleName == CanCreateEntitlementAtOneBank.toString()).size > 0 match {
|
||||
case true =>
|
||||
// Already has entitlement
|
||||
Full()
|
||||
Full(())
|
||||
case false =>
|
||||
Full(Entitlement.entitlement.vend.addEntitlement(bank.id, u.userId, CanCreateEntitlementAtOneBank.toString()))
|
||||
}
|
||||
_ <- entitlementsByBank.filter(_.roleName == CanReadDynamicResourceDocsAtOneBank.toString()).size > 0 match {
|
||||
case true =>
|
||||
// Already has entitlement
|
||||
Full()
|
||||
Full(())
|
||||
case false =>
|
||||
Full(Entitlement.entitlement.vend.addEntitlement(bank.id, u.userId, CanReadDynamicResourceDocsAtOneBank.toString()))
|
||||
}
|
||||
@ -1246,7 +1247,7 @@ trait APIMethods220 {
|
||||
(account, callContext)
|
||||
}
|
||||
}else
|
||||
Future{(Full(), Some(cc))}
|
||||
Future{(Full(()), Some(cc))}
|
||||
|
||||
|
||||
otherAccountRoutingSchemeOBPFormat = if(postJson.other_account_routing_scheme.equalsIgnoreCase("AccountNo")) "ACCOUNT_NUMBER" else StringHelpers.snakify(postJson.other_account_routing_scheme).toUpperCase
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
|
||||
package code.api.v2_2_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.api.OBPRestHelper
|
||||
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
|
||||
import code.api.util.{APIUtil, VersionedOBPApis}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package code.api.v3_0_0
|
||||
|
||||
import scala.language.reflectiveCalls
|
||||
import code.accountattribute.AccountAttributeX
|
||||
import code.api.Constant._
|
||||
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON
|
||||
@ -84,7 +85,7 @@ trait APIMethods300 {
|
||||
cc =>
|
||||
implicit val ec = EndpointContext(Some(cc))
|
||||
for {
|
||||
_ <- Future() // Just start async call
|
||||
_ <- Future(()) // Just start async call
|
||||
} yield {
|
||||
(JSONFactory.getApiInfoJSON(OBPAPI3_0_0.version, OBPAPI3_0_0.versionStatus), HttpCode.`200`(cc.callContext))
|
||||
}
|
||||
@ -2118,7 +2119,7 @@ trait APIMethods300 {
|
||||
hasCanReadGlossaryRole
|
||||
}
|
||||
} else {
|
||||
Future{Full()}
|
||||
Future{Full(())}
|
||||
}
|
||||
json = JSONFactory300.createGlossaryItemsJsonV300(getGlossaryItems)
|
||||
} yield {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user