Merge upstream/develop into develop after conflict resolution

This commit is contained in:
simonredfern 2026-01-14 16:21:47 +01:00
commit f5dd612088
141 changed files with 1095 additions and 291 deletions

View File

@ -41,6 +41,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@ -76,7 +77,44 @@ jobs:
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
- name: Report failing tests (if any)
if: always()
run: |
echo "Checking build log for failing tests via grep..."
if [ ! -f maven-build.log ]; then
echo "No maven-build.log found; skipping failure scan."
exit 0
fi
if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
echo "Failing tests detected above."
exit 1
else
echo "No failing tests detected in maven-build.log."
fi
- name: Upload Maven build log
if: always()
uses: actions/upload-artifact@v4
with:
name: maven-build-log
if-no-files-found: ignore
path: |
maven-build.log
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports
if-no-files-found: ignore
path: |
obp-api/target/surefire-reports/**
obp-commons/target/surefire-reports/**
**/target/scalatest-reports/**
**/target/site/surefire-report.html
**/target/site/surefire-report/*
- name: Save .war artifact
run: |
@ -95,7 +133,7 @@ jobs:
docker push docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }} --all-tags
echo docker done
- uses: sigstore/cosign-installer@main
- uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
- name: Write signing key to disk (only needed for `cosign sign --key`)
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
@ -116,4 +154,3 @@ jobs:
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"

View File

@ -3,7 +3,7 @@ name: Build and publish container non develop
on:
push:
branches:
- '*'
- '**'
- '!develop'
env:
@ -40,6 +40,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@ -75,7 +76,44 @@ jobs:
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
- name: Report failing tests (if any)
if: always()
run: |
echo "Checking build log for failing tests via grep..."
if [ ! -f maven-build.log ]; then
echo "No maven-build.log found; skipping failure scan."
exit 0
fi
if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
echo "Failing tests detected above."
exit 1
else
echo "No failing tests detected in maven-build.log."
fi
- name: Upload Maven build log
if: always()
uses: actions/upload-artifact@v4
with:
name: maven-build-log
if-no-files-found: ignore
path: |
maven-build.log
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports
if-no-files-found: ignore
path: |
obp-api/target/surefire-reports/**
obp-commons/target/surefire-reports/**
**/target/scalatest-reports/**
**/target/site/surefire-report.html
**/target/site/surefire-report/*
- name: Save .war artifact
run: |
@ -94,7 +132,7 @@ jobs:
docker push docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }} --all-tags
echo docker done
- uses: sigstore/cosign-installer@main
- uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
- name: Write signing key to disk (only needed for `cosign sign --key`)
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
@ -111,4 +149,3 @@ jobs:
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"

View File

@ -36,6 +36,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@ -65,14 +66,50 @@ jobs:
echo COUNTERPARTY_OTP_INSTRUCTION_TRANSPORT=dummy >> obp-api/src/main/resources/props/test.default.props
echo SEPA_CREDIT_TRANSFERS_OTP_INSTRUCTION_TRANSPORT=dummy >> obp-api/src/main/resources/props/test.default.props
echo allow_oauth2_login=true >> obp-api/src/main/resources/props/test.default.props
echo oauth2.jwk_set.url=https://www.googleapis.com/oauth2/v3/certs >> obp-api/src/main/resources/props/test.default.props
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
- name: Report failing tests (if any)
if: always()
run: |
echo "Checking build log for failing tests via grep..."
if [ ! -f maven-build.log ]; then
echo "No maven-build.log found; skipping failure scan."
exit 0
fi
if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
echo "Failing tests detected above."
exit 1
else
echo "No failing tests detected in maven-build.log."
fi
- name: Upload Maven build log
if: always()
uses: actions/upload-artifact@v4
with:
name: maven-build-log
if-no-files-found: ignore
path: |
maven-build.log
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports
if-no-files-found: ignore
path: |
obp-api/target/surefire-reports/**
obp-commons/target/surefire-reports/**
**/target/scalatest-reports/**
**/target/site/surefire-report.html
**/target/site/surefire-report/*
- name: Save .war artifact
run: |

1
.gitignore vendored
View File

@ -44,3 +44,4 @@ project/project
coursier
metals.sbt
obp-http4s-runner/src/main/resources/git.properties
test-results

View File

@ -1,10 +1,13 @@
#!/bin/bash
# Script to flush Redis, build the project, and run Jetty
# Script to flush Redis, build the project, and run both Jetty and http4s servers
#
# This script should be run from the OBP-API root directory:
# cd /path/to/OBP-API
# ./flushall_build_and_run.sh
#
# The http4s server will run in the background on port 8081
# The Jetty server will run in the foreground on port 8080
set -e # Exit on error
@ -27,4 +30,29 @@ echo "=========================================="
echo "Building and running with Maven..."
echo "=========================================="
export MAVEN_OPTS="-Xss128m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED"
mvn install -pl .,obp-commons && mvn jetty:run -pl obp-api
mvn install -pl .,obp-commons
echo ""
echo "=========================================="
echo "Building http4s runner..."
echo "=========================================="
export MAVEN_OPTS="-Xms3G -Xmx6G -XX:MaxMetaspaceSize=2G"
mvn -pl obp-http4s-runner -am clean package -DskipTests=true -Dmaven.test.skip=true
echo ""
echo "=========================================="
echo "Starting http4s server in background..."
echo "=========================================="
java -jar obp-http4s-runner/target/obp-http4s-runner.jar > http4s-server.log 2>&1 &
HTTP4S_PID=$!
echo "http4s server started with PID: $HTTP4S_PID (port 8081)"
echo "Logs are being written to: http4s-server.log"
echo ""
echo "To stop http4s server later: kill $HTTP4S_PID"
echo ""
echo "=========================================="
echo "Starting Jetty server (foreground)..."
echo "=========================================="
export MAVEN_OPTS="-Xss128m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED"
mvn jetty:run -pl obp-api

View File

@ -586,8 +586,15 @@
<forkMode>once</forkMode>
<junitxml>.</junitxml>
<filereports>WDF TestSuite.txt</filereports>
<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>
<!-- 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>
<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>
@ -597,6 +604,49 @@
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
<outputDirectory>${project.build.directory}/surefire-reports</outputDirectory>
</configuration>
<executions>
<execution>
<id>surefire-html-report</id>
<phase>package</phase>
<goals>
<goal>report-only</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>delete-surefire-xml-after-html</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete>
<fileset dir="${project.build.directory}/surefire-reports">
<include name="TEST-*.xml"/>
<include name="TESTS-*.xml"/>
</fileset>
</delete>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- add src/main/java to source dirs -->
@ -623,15 +673,26 @@
<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&amp;msg=auto-application:s</arg>
</args>
</configuration>
</plugin>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -32,12 +32,14 @@ import com.openbankproject.commons.model.{BankId, ListResult, User}
import com.openbankproject.commons.util.ApiStandards._
import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion}
import net.liftweb.common.{Box, Empty, Full}
import net.liftweb.http.{InMemoryResponse, LiftRules, PlainTextResponse, S}
import net.liftweb.http.{LiftRules, S}
import net.liftweb.http.{InMemoryResponse, LiftRules, PlainTextResponse}
import net.liftweb.json
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
@ -180,8 +182,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
requestedApiVersion match
{
// only `obp` standard show the `localResourceDocs`
case version: ScannedApiVersion
if(version.apiStandard == obp.toString) =>
case version: ScannedApiVersion
if(version.apiStandard == obp.toString) =>
activePlusLocalResourceDocs ++= localResourceDocs
case _ => ; // all other standards only show their own apis.
}
@ -222,7 +224,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
/**
*
*
* @param requestedApiVersion
* @param resourceDocTags
* @param partialFunctionNames
@ -289,9 +291,9 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
val allDocs = staticDocs.map(_ ++ filteredDocs)
resourceDocsToResourceDocJson(allDocs, resourceDocTags, partialFunctionNames, isVersion4OrHigher, locale)
}
def getResourceDocsObpDynamicCached(
resourceDocTags: Option[List[ResourceDocTag]],
partialFunctionNames: Option[List[String]],
@ -326,7 +328,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
}
resourceDocsToResourceDocJson(Some(filteredDocs), resourceDocTags, partialFunctionNames, isVersion4OrHigher, locale)
}
@ -351,7 +353,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
def getResourceDocsDescription(isBankLevelResourceDoc: Boolean) = {
val endpointBankIdPath = if (isBankLevelResourceDoc) "/banks/BANK_ID" else ""
s"""Get documentation about the RESTful resources on this server including example bodies for POST and PUT requests.
|
|This is the native data format used to document OBP endpoints. Each endpoint has a Resource Doc (a Scala case class) defined in the source code.
@ -372,8 +374,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
| if set content=dynamic, only show dynamic endpoints, if content=static, only show the static endpoints. if omit this parameter, we will show all the endpoints.
|
| You may need some other language resource docs, now we support en_GB and es_ES at the moment.
|
| You can filter with api-collection-id, but api-collection-id can not be used with others together. If api-collection-id is used in URL, it will ignore all other parameters.
|
| You can filter with api-collection-id, but api-collection-id can not be used with others together. If api-collection-id is used in URL, it will ignore all other parameters.
|
|See the Resource Doc endpoint for more information.
|
@ -400,8 +402,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|</ul>
"""
}
localResourceDocs += ResourceDoc(
getResourceDocsObp,
implementedInApiVersion,
@ -411,7 +413,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
"Get Resource Docs.",
getResourceDocsDescription(false),
EmptyBody,
EmptyBody,
EmptyBody,
UnknownError :: Nil,
List(apiTagDocumentation, apiTagApi),
Some(List(canReadResourceDoc))
@ -428,7 +430,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
getApiLevelResourceDocs(cc,requestedApiVersionString, tags, partialFunctions, locale, contentParam, apiCollectionIdParam,false)
}
}
localResourceDocs += ResourceDoc(
getResourceDocsObpV400,
implementedInApiVersion,
@ -443,7 +445,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
List(apiTagDocumentation, apiTagApi),
Some(List(canReadResourceDoc))
)
lazy val getResourceDocsObpV400 : OBPEndpoint = {
case "resource-docs" :: requestedApiVersionString :: "obp" :: Nil JsonGet _ => {
val (tags, partialFunctions, locale, contentParam, apiCollectionIdParam) = ResourceDocsAPIMethodsUtil.getParams()
@ -470,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)
}
@ -494,7 +496,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
json <- locale match {
case _ if (apiCollectionIdParam.isDefined) =>
case _ if (apiCollectionIdParam.isDefined) =>
NewStyle.function.tryons(s"$UnknownError Can not prepare OBP resource docs.", 500, callContext) {
val operationIds = MappedApiCollectionEndpointsProvider.getApiCollectionEndpoints(apiCollectionIdParam.getOrElse("")).map(_.operationId).map(getObpFormatOperationId)
val resourceDocs = ResourceDoc.getResourceDocs(operationIds)
@ -594,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
@ -651,7 +653,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|See the Resource Doc endpoint for more information.
|
| Note: Resource Docs are cached, TTL is ${GET_DYNAMIC_RESOURCE_DOCS_TTL} seconds
|
|
|Following are more examples:
|${getObpApiRoot}/v3.1.0/resource-docs/v3.1.0/swagger
|${getObpApiRoot}/v3.1.0/resource-docs/v3.1.0/swagger?tags=Account,Bank
@ -698,7 +700,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
cacheValueFromRedis = Caching.getStaticSwaggerDocCache(cacheKey)
swaggerJValue <- if (cacheValueFromRedis.isDefined) {
NewStyle.function.tryons(s"$UnknownError Can not convert internal swagger file from cache.", 400, cc.callContext) {json.parse(cacheValueFromRedis.get)}
} else {
@ -751,7 +753,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
| All endpoints are given one or more tags which are used for grouping
| Empty values will return error OBP-10053
|
|**functions** - Filter by function names (comma-separated list)
|**functions** - Filter by function names (comma-separated list)
| Example: ?functions=getBanks,bankById
| Each endpoint is implemented in the OBP Scala code by a 'function'
| Empty values will return error OBP-10054
@ -819,26 +821,26 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
List(apiTagDocumentation, apiTagApi)
)
// Note: OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
// is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// Note: OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
// is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// handle YAML content type. It provides the same functionality as the JSON endpoint
// but returns OpenAPI documentation in YAML format instead of JSON.
/**
* OpenAPI 3.1 endpoint with comprehensive parameter validation.
*
*
* This endpoint generates OpenAPI 3.1 documentation with the following validated query parameters:
* - tags: Comma-separated list of tags to filter endpoints (e.g., ?tags=Account,Bank)
* - functions: Comma-separated list of function names to filter endpoints
* - content: Filter type - "static", "dynamic", or "all"
* - content: Filter type - "static", "dynamic", or "all"
* - locale: Language code for localization (e.g., "en_GB", "es_ES")
* - api-collection-id: UUID to filter by specific API collection
*
*
* Parameter validation guards ensure:
* - Empty parameters (e.g., ?tags=) return 400 error
* - Invalid content values return 400 error with valid options
* - All parameters are properly trimmed and sanitized
*
*
* Examples:
* - ?content=static&tags=Account-Firehose
* - ?tags=Account,Bank&functions=getBanks,bankById
@ -848,7 +850,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
case "resource-docs" :: requestedApiVersionString :: "openapi" :: Nil JsonGet _ => {
cc => {
implicit val ec = EndpointContext(Some(cc))
// Early validation for empty parameters using underlying S to bypass ObpS filtering
if (S.param("tags").exists(_.trim.isEmpty)) {
Full(errorJsonResponse(InvalidTagsParameter, 400))
@ -892,7 +894,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
cacheValueFromRedis = Caching.getStaticSwaggerDocCache(cacheKey)
openApiJValue <- if (cacheValueFromRedis.isDefined) {
NewStyle.function.tryons(s"$UnknownError Can not convert internal openapi file from cache.", 400, cc.callContext) {json.parse(cacheValueFromRedis.get)}
} else {
@ -926,8 +928,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
}
}
// Note: The OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
// is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// Note: The OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
// is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// handle YAML content type and response format, rather than as a standard OBPEndpoint.
@ -1026,7 +1028,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
example_request_body = endpointMappingRequestBodyExample,
success_response_body = endpointMappingRequestBodyExample
)
case doc if ( doc.operation_id == buildOperationId(APIMethods400.Implementations4_0_0.implementedInApiVersion, nameOf(APIMethods400.Implementations4_0_0.getDynamicEndpoint)) ||
doc.operation_id == buildOperationId(APIMethods400.Implementations4_0_0.implementedInApiVersion, nameOf(APIMethods400.Implementations4_0_0.getBankLevelDynamicEndpoint))) =>
doc.copy(success_response_body = ExampleValue.dynamicEndpointResponseBodyEmptyExample)
@ -1162,7 +1164,7 @@ object ResourceDocsAPIMethodsUtil extends MdcLoggable{
}
logger.debug(s"partialFunctionNames is $partialFunctionNames")
val locale = ObpS.param(PARAM_LOCALE).or(ObpS.param("language")) // we used language before, so keep it there.
val locale = ObpS.param(PARAM_LOCALE).or(ObpS.param("language")) // we used language before, so keep it there.
logger.debug(s"locale is $locale")
// So we can produce a reduced list of resource docs to prevent manual editing of swagger files.
@ -1177,8 +1179,8 @@ object ResourceDocsAPIMethodsUtil extends MdcLoggable{
if x.trim.nonEmpty
} yield x.trim
logger.debug(s"apiCollectionIdParam is $apiCollectionIdParam")
(tags, partialFunctionNames, locale, contentParam, apiCollectionIdParam)
}
@ -1190,8 +1192,8 @@ We don't assume a default catalog (as API Explorer does)
so the caller must specify any required filtering by catalog explicitly.
*/
def filterResourceDocs(
allResources: List[ResourceDoc],
resourceDocTags: Option[List[ResourceDocTag]],
allResources: List[ResourceDoc],
resourceDocTags: Option[List[ResourceDocTag]],
partialFunctionNames: Option[List[String]]
) : List[ResourceDoc] = {
@ -1233,7 +1235,7 @@ so the caller must specify any required filtering by catalog explicitly.
// tags param was not mentioned in url or was empty, so return all
case None => filteredResources3
}
val resourcesToUse = filteredResources4.toSet.toList
@ -1255,3 +1257,4 @@ so the caller must specify any required filtering by catalog explicitly.
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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
@ -1772,9 +1775,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.
@ -4031,7 +4034,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) = {
@ -4427,7 +4430,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
@ -4528,7 +4531,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)

View File

@ -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)
}
}
/**

View File

@ -86,19 +86,19 @@ object ApiRole extends MdcLoggable{
case class CanGetCustomersAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCustomersAtAllBanks = CanGetCustomersAtAllBanks()
case class CanGetCustomersMinimalAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCustomersMinimalAtAllBanks = CanGetCustomersMinimalAtAllBanks()
case class CanGetCustomersAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomersAtOneBank = CanGetCustomersAtOneBank()
case class CanGetCustomersMinimalAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomersMinimalAtOneBank = CanGetCustomersMinimalAtOneBank()
case class CanGetCustomerOverview(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerOverview = CanGetCustomerOverview()
case class CanGetCustomerOverviewFlat(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerOverviewFlat = CanGetCustomerOverviewFlat()
@ -127,7 +127,7 @@ object ApiRole extends MdcLoggable{
case class CanUpdateAgentStatusAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateAgentStatusAtAnyBank = CanUpdateAgentStatusAtAnyBank()
case class CanUpdateAgentStatusAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAgentStatusAtOneBank = CanUpdateAgentStatusAtOneBank()
@ -136,10 +136,10 @@ object ApiRole extends MdcLoggable{
case class CanUpdateCustomerNumber(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateCustomerNumber = CanUpdateCustomerNumber()
case class CanUpdateCustomerMobilePhoneNumber(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateCustomerMobilePhoneNumber = CanUpdateCustomerMobilePhoneNumber()
lazy val canUpdateCustomerMobilePhoneNumber = CanUpdateCustomerMobilePhoneNumber()
case class CanUpdateCustomerIdentity(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateCustomerIdentity = CanUpdateCustomerIdentity()
@ -160,28 +160,28 @@ object ApiRole extends MdcLoggable{
case class CanCreateCustomerAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateCustomerAtAnyBank = CanCreateCustomerAtAnyBank()
case class CanGetCorrelatedUsersInfo(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCorrelatedUsersInfo = CanGetCorrelatedUsersInfo()
lazy val canGetCorrelatedUsersInfo = CanGetCorrelatedUsersInfo()
case class CanGetCorrelatedUsersInfoAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCorrelatedUsersInfoAtAnyBank = CanGetCorrelatedUsersInfoAtAnyBank()
case class CanCreateUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateUserCustomerLink = CanCreateUserCustomerLink()
case class CanDeleteUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteUserCustomerLink = CanDeleteUserCustomerLink()
case class CanGetUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetUserCustomerLink = CanGetUserCustomerLink()
case class CanCreateUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateUserCustomerLinkAtAnyBank = CanCreateUserCustomerLinkAtAnyBank()
case class CanGetUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserCustomerLinkAtAnyBank = CanGetUserCustomerLinkAtAnyBank()
case class CanDeleteUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUserCustomerLinkAtAnyBank = CanDeleteUserCustomerLinkAtAnyBank()
@ -193,10 +193,10 @@ object ApiRole extends MdcLoggable{
case class CanCreateAccountAttributeAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateAccountAttributeAtOneBank = CanCreateAccountAttributeAtOneBank()
case class CanUpdateAccountAttribute(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAccountAttribute = CanUpdateAccountAttribute()
case class CanGetAnyUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAnyUser = CanGetAnyUser()
@ -226,10 +226,10 @@ object ApiRole extends MdcLoggable{
case class CanCreateEntitlementAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateEntitlementAtOneBank = CanCreateEntitlementAtOneBank()
case class CanCreateSystemViewPermission(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateSystemViewPermission = CanCreateSystemViewPermission()
case class CanDeleteSystemViewPermission(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteSystemViewPermission = CanDeleteSystemViewPermission()
@ -305,16 +305,16 @@ object ApiRole extends MdcLoggable{
case class CanGetCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerAccountLink = CanGetCustomerAccountLink()
case class CanGetCustomerAccountLinks(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerAccountLinks = CanGetCustomerAccountLinks()
case class CanCreateBranch(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateBranch = CanCreateBranch()
case class CanUpdateBranch(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateBranch = CanUpdateBranch()
case class CanCreateBranchAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateBranchAtAnyBank = CanCreateBranchAtAnyBank()
@ -325,14 +325,14 @@ object ApiRole extends MdcLoggable{
lazy val canDeleteBranchAtAnyBank = CanDeleteBranchAtAnyBank()
case class CanCreateAtm(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateAtm = CanCreateAtm()
lazy val canCreateAtm = CanCreateAtm()
case class CanDeleteAtm(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteAtm = CanDeleteAtm()
case class CanDeleteAtmAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteAtmAtAnyBank = CanDeleteAtmAtAnyBank()
case class CanUpdateAtm(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAtm = CanUpdateAtm()
@ -344,22 +344,22 @@ object ApiRole extends MdcLoggable{
case class CanCreateCounterparty(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateCounterparty = CanCreateCounterparty()
case class CanCreateCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateCounterpartyAtAnyBank = CanCreateCounterpartyAtAnyBank()
case class CanDeleteCounterparty(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteCounterparty = CanDeleteCounterparty()
case class CanDeleteCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteCounterpartyAtAnyBank = CanDeleteCounterpartyAtAnyBank()
case class CanGetCounterparty(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCounterparty = CanGetCounterparty()
lazy val canGetCounterparty = CanGetCounterparty()
case class CanGetCounterpartiesAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCounterpartiesAtAnyBank = CanGetCounterpartiesAtAnyBank()
case class CanGetCounterparties(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCounterparties = CanGetCounterparties()
@ -368,10 +368,10 @@ object ApiRole extends MdcLoggable{
case class CanGetAllApiCollections(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAllApiCollections = CanGetAllApiCollections()
case class CanGetCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCounterpartyAtAnyBank = CanGetCounterpartyAtAnyBank()
case class CanCreateProduct(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateProduct = CanCreateProduct()
@ -395,7 +395,7 @@ object ApiRole extends MdcLoggable{
case class CanReadMetrics (requiresBankId: Boolean = false) extends ApiRole
lazy val canReadMetrics = CanReadMetrics()
case class CanGetMetricsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetMetricsAtOneBank = CanGetMetricsAtOneBank()
@ -419,19 +419,19 @@ object ApiRole extends MdcLoggable{
case class CanDeleteCacheKey(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteCacheKey = CanDeleteCacheKey()
lazy val canGetConfig = CanGetConfig()
case class CanGetAdapterInfo(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAdapterInfo = CanGetAdapterInfo()
case class CanGetAdapterInfoAtOneBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAdapterInfoAtOneBank = CanGetAdapterInfoAtOneBank()
case class CanGetDatabaseInfo(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetDatabaseInfo = CanGetDatabaseInfo()
case class CanGetMigrations(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetMigrations = CanGetMigrations()
case class CanGetCallContext(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCallContext = CanGetCallContext()
@ -446,10 +446,10 @@ object ApiRole extends MdcLoggable{
case class CanUseAccountFirehoseAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUseAccountFirehoseAtAnyBank = CanUseAccountFirehoseAtAnyBank()
case class CanUseAccountFirehose(requiresBankId: Boolean = true) extends ApiRole
lazy val canUseAccountFirehose = CanUseAccountFirehose()
case class CanUseCustomerFirehoseAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUseCustomerFirehoseAtAnyBank = CanUseCustomerFirehoseAtAnyBank()
@ -467,38 +467,38 @@ object ApiRole extends MdcLoggable{
case class CanUnlockUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canUnlockUser = CanUnlockUser()
case class CanLockUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canLockUser = CanLockUser()
case class CanDeleteUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUser = CanDeleteUser()
case class CanValidateUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canValidateUser = CanValidateUser()
case class CanGetUsersWithAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUsersWithAttributes = CanGetUsersWithAttributes()
case class CanCreateNonPersonalUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateNonPersonalUserAttribute = CanCreateNonPersonalUserAttribute()
case class CanGetNonPersonalUserAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetNonPersonalUserAttributes = CanGetNonPersonalUserAttributes()
case class CanDeleteNonPersonalUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteNonPersonalUserAttribute = CanDeleteNonPersonalUserAttribute()
// v6.0.0 User Attribute roles (consistent naming - "user attributes" means non-personal)
case class CanCreateUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateUserAttribute = CanCreateUserAttribute()
case class CanGetUserAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserAttributes = CanGetUserAttributes()
case class CanUpdateUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateUserAttribute = CanUpdateUserAttribute()
case class CanDeleteUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUserAttribute = CanDeleteUserAttribute()
@ -510,7 +510,7 @@ object ApiRole extends MdcLoggable{
case class CanCreateRateLimits(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateRateLimits = CanCreateRateLimits()
case class CanDeleteRateLimits(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteRateLimits = CanDeleteRateLimits()
@ -1173,17 +1173,17 @@ object ApiRole extends MdcLoggable{
lazy val canCreateGroupAtAllBanks = CanCreateGroupAtAllBanks()
case class CanCreateGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateGroupAtOneBank = CanCreateGroupAtOneBank()
case class CanUpdateGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateGroupAtAllBanks = CanUpdateGroupAtAllBanks()
case class CanUpdateGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateGroupAtOneBank = CanUpdateGroupAtOneBank()
case class CanDeleteGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteGroupAtAllBanks = CanDeleteGroupAtAllBanks()
case class CanDeleteGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteGroupAtOneBank = CanDeleteGroupAtOneBank()
case class CanGetGroupsAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetGroupsAtAllBanks = CanGetGroupsAtAllBanks()
case class CanGetGroupsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
@ -1194,12 +1194,12 @@ object ApiRole extends MdcLoggable{
lazy val canAddUserToGroupAtAllBanks = CanAddUserToGroupAtAllBanks()
case class CanAddUserToGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canAddUserToGroupAtOneBank = CanAddUserToGroupAtOneBank()
case class CanRemoveUserFromGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canRemoveUserFromGroupAtAllBanks = CanRemoveUserFromGroupAtAllBanks()
case class CanRemoveUserFromGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canRemoveUserFromGroupAtOneBank = CanRemoveUserFromGroupAtOneBank()
case class CanGetUserGroupMembershipsAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserGroupMembershipsAtAllBanks = CanGetUserGroupMembershipsAtAllBanks()
case class CanGetUserGroupMembershipsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
@ -1282,15 +1282,15 @@ object Util {
"CanSetCallLimits",
"CanDeleteRateLimits"
)
val allowed = allowedPrefixes ::: allowedExistingNames
source.collect {
case obj: Defn.Object if obj.name.value == "ApiRole" =>
obj.collect {
case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == true =>
case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == true =>
// OK
case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == false =>
case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == false =>
println("INCORRECT - " + c)
}
}
@ -1300,4 +1300,4 @@ object Util {
checkWrongDefinedNames
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v3_0_0
import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}

View File

@ -1,5 +1,6 @@
package code.api.v3_1_0
import scala.language.reflectiveCalls
import code.api.Constant
import code.api.Constant._
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
@ -101,7 +102,7 @@ trait APIMethods310 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
_ <- Future() // Just start async call
_ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI3_1_0.version, OBPAPI3_1_0.versionStatus), HttpCode.`200`(cc.callContext))
}

View File

@ -1075,7 +1075,7 @@ object JSONFactory310{
def createEntitlementJsonsV310(tr: List[Entitlement]) = {
val idToUser: Map[String, Box[String]] = tr.map(_.userId).distinct.map {
userId => (userId, UserX.findByUserId(userId).map(_.name))
} toMap;
}.toMap;
EntitlementJSonsV310(
tr.map(e =>

View File

@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v3_1_0
import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}

View File

@ -1,5 +1,6 @@
package code.api.v4_0_0
import scala.language.reflectiveCalls
import code.DynamicData.DynamicData
import code.DynamicEndpoint.DynamicEndpointSwagger
import code.accountattribute.AccountAttributeX
@ -1546,7 +1547,7 @@ trait APIMethods400 extends MdcLoggable {
value = rejectReasonCode,
callContext = callContext
)
} else Future.successful()
} else Future.successful(())
rejectAdditionalInformation =
challengeAnswerJson.additional_information.getOrElse("")
_ <-
@ -1562,7 +1563,7 @@ trait APIMethods400 extends MdcLoggable {
value = rejectAdditionalInformation,
callContext = callContext
)
} else Future.successful()
} else Future.successful(())
_ <- NewStyle.function.notifyTransactionRequest(
fromAccount,
toAccount,
@ -3371,7 +3372,7 @@ trait APIMethods400 extends MdcLoggable {
case (Nil | "root" :: Nil) JsonGet _ => { cc =>
implicit val ec = EndpointContext(Some(cc))
for {
_ <- Future() // Just start async call
_ <- Future(()) // Just start async call
} yield {
(
JSONFactory400.getApiInfoJSON(
@ -3405,7 +3406,7 @@ trait APIMethods400 extends MdcLoggable {
case "development" :: "call_context" :: Nil JsonGet _ => { cc =>
implicit val ec = EndpointContext(Some(cc))
for {
_ <- Future() // Just start async call
_ <- Future(()) // Just start async call
} yield {
(cc.callContext, HttpCode.`200`(cc.callContext))
}
@ -3434,7 +3435,7 @@ trait APIMethods400 extends MdcLoggable {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
_ <- Future() // Just start async call
_ <- Future(()) // Just start async call
} yield {
(cc.callContext, HttpCode.`200`(cc.callContext))
}
@ -10457,7 +10458,7 @@ trait APIMethods400 extends MdcLoggable {
(account, callContext)
}
} else
Future { (Full(), Some(cc)) }
Future { (Full(()), Some(cc)) }
otherAccountRoutingSchemeOBPFormat =
if (
@ -10810,7 +10811,7 @@ trait APIMethods400 extends MdcLoggable {
(account, callContext)
}
} else
Future { (Full(), Some(cc)) }
Future { (Full(()), Some(cc)) }
otherAccountRoutingSchemeOBPFormat =
if (
@ -12872,7 +12873,7 @@ trait APIMethods400 extends MdcLoggable {
// auth type validation related endpoints
private val allowedAuthTypes =
AuthenticationType.values.filterNot(AuthenticationType.Anonymous ==)
AuthenticationType.values.filterNot(AuthenticationType.Anonymous.==)
staticResourceDocs += ResourceDoc(
createAuthenticationTypeValidation,
implementedInApiVersion,
@ -16724,7 +16725,7 @@ trait APIMethods400 extends MdcLoggable {
s"$EntitlementAlreadyExists user_id($userId) ${duplicatedRoles.mkString(",")}"
Helper.booleanToFuture(errorMessages, cc = callContext) { false }
} else
Future.successful(Full())
Future.successful(Full(()))
}
/** This method will check all the roles the loggedIn user already has and the
@ -16758,7 +16759,7 @@ trait APIMethods400 extends MdcLoggable {
.mkString(",")}"
Helper.booleanToFuture(errorMessages, cc = callContext) { false }
} else
Future.successful(Full())
Future.successful(Full(()))
}
private def checkRoleBankIdMapping(

Some files were not shown because too many files have changed in this diff Show More