diff --git a/.github/actions/publish-docker-image/action.yml b/.github/actions/publish-docker-image/action.yml index ad3d893a4..7a6845f16 100644 --- a/.github/actions/publish-docker-image/action.yml +++ b/.github/actions/publish-docker-image/action.yml @@ -42,23 +42,12 @@ inputs: docker_tag: required: false description: 'additional docker tags' - do_push: - required: false - default: 'false' - description: 'whether or not to actually push the image' + runs: using: "composite" steps: - uses: actions/checkout@v4 - - name: Download OpenTelemetry - shell: bash - run: |- - # "jq -r" removes the quotation marks, that would trip up "wget" - URL=$(grep "val openTelemetryAgentUrl = " build.gradle.kts | awk -F'= ' '{print $2}' | jq -r) - wget -O ${{ inputs.rootDir }}/opentelemetry-javaagent.jar -q $URL - - ##################### # Login to DockerHub ##################### @@ -102,12 +91,13 @@ runs: - name: Build and push uses: docker/build-push-action@v3 with: - context: . - file: ${{ inputs.rootDir }}/src/main/docker/Dockerfile + context: ${{ inputs.rootDir }} + file: ${{ inputs.rootDir }}/build/resources/docker/Dockerfile build-args: | - JAR=${{ inputs.rootDir }}/build/libs/${{ inputs.imagename }}.jar - OTEL_JAR=${{ inputs.rootDir }}/opentelemetry-javaagent.jar - push: ${{ inputs.do_push == 'true' }} + JAR=build/libs/${{ inputs.imagename }}.jar + OTEL_JAR=build/resources/otel/opentelemetry-javaagent.jar + ADDITIONAL_FILES=build/legal/* + push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/actions/run-deployment-test/action.yml b/.github/actions/run-deployment-test/action.yml index eb7aa820e..b5ae81d96 100644 --- a/.github/actions/run-deployment-test/action.yml +++ b/.github/actions/run-deployment-test/action.yml @@ -25,7 +25,7 @@ description: "Build and publish a Docker Image to DockerHub" inputs: imagename: required: true - description: "name of the docker image, e.g. edc-runtime-memory" + description: "list of docker image names separated by whitespace, e.g. 'edc-runtime-memory edc-runtime-other'" image_tag: required: false @@ -38,7 +38,7 @@ inputs: rootDir: required: true - description: "The directory that contains the docker file, e.g. edc-controlplane/edc-runtime-memory" + description: "list of directories of the modules to be dockerized, separated by whitespace, e.g. 'edc-controlplane/edc-runtime-memory edc-dataplane/edc-dataplane-memory'" k8sversion: required: false @@ -69,12 +69,19 @@ runs: - name: Build docker images shell: bash run: |- - ./gradlew -p ${{ inputs.rootDir }} dockerize + modules=(${{ inputs.rootDir }}) + for module in "${modules[@]}" + do + ./gradlew -p $module dockerize + done - name: Load images into KinD shell: bash run: | - kind get clusters | xargs -n1 kind load docker-image ${{ inputs.imagename }}:${{ inputs.image_tag }} --name + images=(${{ inputs.imagename }}) + versioned=( "${images[@]/%/:${{ inputs.image_tag }}}" ) + versioned_images=$(IFS=' ' ; echo "${versioned[*]}") + kind get clusters | xargs -n1 kind load docker-image $versioned_images --name ################################################### # Install the test infrastructure diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 997a647b1..9dbe78d80 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -47,61 +47,7 @@ updates: # Docker - package-ecosystem: "docker" target-branch: main - directory: ./edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./edc-controlplane/edc-runtime-memory/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./edc-dataplane/edc-dataplane-azure-vault/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./edc-tests/runtime/mock-connector/src/main/docker/ - labels: - - "dependabot" - - "docker" - schedule: - interval: "weekly" - - - package-ecosystem: "docker" - target-branch: main - directory: ./samples/edc-dast/edc-dast-runtime/src/main/docker/ + directory: resources labels: - "dependabot" - "docker" diff --git a/.github/workflows/deployment-test.yaml b/.github/workflows/deployment-test.yaml index 281ff66c4..cdb4975db 100644 --- a/.github/workflows/deployment-test.yaml +++ b/.github/workflows/deployment-test.yaml @@ -18,7 +18,6 @@ # SPDX-License-Identifier: Apache-2.0 ################################################################################# - --- name: "Deployment Tests" @@ -28,7 +27,6 @@ on: workflow_dispatch: jobs: - secret-presence: runs-on: ubuntu-latest outputs: @@ -81,17 +79,17 @@ jobs: fail-fast: false # this will verify that the official distribution of the Tractus-X EDC Helm chart runs on the last 3 Kubernetes versions matrix: - k8s-version: ["v1.30.0", - "v1.29.4", - "v1.28.9"] + k8s-version: [ "v1.30.2", + "v1.29.4", + "v1.28.9" ] steps: - name: Checkout uses: actions/checkout@v4 - uses: ./.github/actions/run-deployment-test - name: "Run deployment test using KinD and Helm" + name: "Run deployment test using KinD and Helm - tokenbased auth" with: imagename: "edc-controlplane-postgresql-hashicorp-vault edc-dataplane-hashicorp-vault" - rootDir: "." + rootDir: "edc-controlplane/edc-controlplane-postgresql-hashicorp-vault edc-dataplane/edc-dataplane-hashicorp-vault" k8sversion: ${{ matrix.k8s-version }} helm_command: |- helm install tx-prod charts/tractusx-connector \ @@ -103,14 +101,33 @@ jobs: kubectl rollout status deployment tx-prod-controlplane kubectl rollout status deployment tx-prod-dataplane - # execute the helm test + # execute the helm test using token based auth in the Management API helm test tx-prod + - uses: ./.github/actions/run-deployment-test + name: "Run deployment test using KinD and Helm - delegated auth" + with: + imagename: "edc-controlplane-postgresql-hashicorp-vault edc-dataplane-hashicorp-vault" + rootDir: "edc-controlplane/edc-controlplane-postgresql-hashicorp-vault edc-dataplane/edc-dataplane-hashicorp-vault" + k8sversion: ${{ matrix.k8s-version }} + helm_command: |- + helm install tx-prod charts/tractusx-connector \ + -f edc-tests/deployment/src/main/resources/helm/tractusx-connector-test.yaml \ + --set controlplane.endpoints.management.jwksUrl="http://foo-bar.com/.well-known/jwks.json" \ + --dependency-update \ + --wait-for-jobs --timeout=120s + + # wait for the pod to become ready + kubectl rollout status deployment tx-prod-controlplane + kubectl rollout status deployment tx-prod-dataplane + + # no helm test here, because the delegated auth won't work without an actual IdP + test-azure-vault-postgres: runs-on: ubuntu-latest needs: [ test-prepare, secret-presence ] -# if: | -# needs.secret-presence.outputs.AZURE_KV_CREDS + # if: | + # needs.secret-presence.outputs.AZURE_KV_CREDS # DEACTIVATE this job for now because our Azure Credentials are expired # TODO: reactivate once we have refreshed Azure Credentials @@ -125,7 +142,7 @@ jobs: name: "Run deployment test using KinD and Helm" with: imagename: "edc-controlplane-postgresql-azure-vault edc-dataplane-azure-vault" - rootDir: "." + rootDir: "edc-controlplane/edc-controlplane-postgresql-azure-vault edc-dataplane/edc-dataplane-azure-vault" helm_command: |- az keyvault secret set --vault-name ${{ secrets.AZURE_VAULT_NAME }} --name aes-keys --value "$(cat aes.key)" > /dev/null az keyvault secret set --vault-name ${{ secrets.AZURE_VAULT_NAME }} --name client-secret --value "$(cat client.secret)" > /dev/null diff --git a/.github/workflows/publish-new-release.yml b/.github/workflows/publish-new-release.yml index f87be958e..38b3c0d61 100644 --- a/.github/workflows/publish-new-release.yml +++ b/.github/workflows/publish-new-release.yml @@ -60,66 +60,26 @@ jobs: maven-release: name: Publish extension's release version to maven repository needs: [ release-version ] - runs-on: ubuntu-latest permissions: contents: read packages: write if: github.event.pull_request.merged == true && needs.release-version.outputs.RELEASE_VERSION - steps: - - name: Export RELEASE_VERSION env - run: | - echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV - - # Set-Up - - uses: actions/checkout@v4 - - uses: ./.github/actions/setup-java - - # Import GPG Key - - uses: ./.github/actions/import-gpg-key - name: "Import GPG Key" - with: - gpg-private-key: ${{ secrets.ORG_GPG_PRIVATE_KEY }} - - # publish releases - - name: Publish version - env: - OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} - OSSRH_USER: ${{ secrets.ORG_OSSRH_USERNAME }} - run: |- - echo "Publishing Version $RELEASE_VERSION to Sonatype/MavenCentral" - ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository --no-parallel -Pversion=$RELEASE_VERSION -Psigning.gnupg.executable=gpg -Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" + uses: ./.github/workflows/trigger-maven-publish.yaml + secrets: inherit + with: + version: $RELEASE_VERSION docker-release: name: Publish Docker images - runs-on: ubuntu-latest needs: [ release-version ] permissions: contents: write if: github.event.pull_request.merged == true && needs.release-version.outputs.RELEASE_VERSION - strategy: - fail-fast: false - matrix: - variant: [ { dir: edc-controlplane, img: edc-runtime-memory }, - { dir: edc-controlplane, img: edc-controlplane-postgresql-hashicorp-vault }, - { dir: edc-controlplane, img: edc-controlplane-postgresql-azure-vault }, - { dir: edc-dataplane, img: edc-dataplane-azure-vault }, - { dir: edc-dataplane, img: edc-dataplane-hashicorp-vault }, - { dir: edc-tests/runtime, img: mock-connector }] - steps: - - uses: actions/checkout@v4 - - name: Export RELEASE_VERSION env - run: | - echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV - - uses: ./.github/actions/publish-docker-image - name: Publish ${{ matrix.variant.img }} - with: - docker_tag: ${{ env.RELEASE_VERSION }} - rootDir: ${{ matrix.variant.dir }}/${{ matrix.variant.img }} - imagename: ${{ matrix.variant.img }} - docker_user: ${{ secrets.DOCKER_HUB_USER }} - docker_token: ${{ secrets.DOCKER_HUB_TOKEN }} - do_push: 'true' + uses: ./.github/workflows/trigger-docker-publish.yaml + secrets: inherit + with: + docker_tag: $RELEASE_VERSION # Release: Helm Charts helm-release: @@ -128,7 +88,6 @@ jobs: runs-on: ubuntu-latest permissions: contents: write - packages: write pages: write if: github.event.pull_request.merged == true && needs.release-version.outputs.RELEASE_VERSION @@ -249,3 +208,13 @@ jobs: with: downstream-version: ${{ needs.release-version.outputs.RELEASE_VERSION }} secrets: inherit + + publish-openapi-to-gh-pages: + name: "Publish OpenAPI UI spec GitHub Pages" + permissions: + contents: write + needs: [ release-version ] + uses: ./.github/workflows/publish-openapi-ui.yml + secrets: inherit + with: + version: ${{ needs.release-version.outputs.RELEASE_VERSION }} diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish-new-snapshot.yaml similarity index 59% rename from .github/workflows/publish.yaml rename to .github/workflows/publish-new-snapshot.yaml index 34ec2d3ca..49e3d7861 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish-new-snapshot.yaml @@ -22,7 +22,7 @@ --- -name: "Publish Artefacts" +name: "Publish new snapshot" on: workflow_run: @@ -39,6 +39,8 @@ on: - published workflow_dispatch: + # periodic build triggers are defined in run-all-tests.yml, which triggers this workflow + concurrency: # cancel only running jobs on pull requests @@ -65,77 +67,66 @@ jobs: [ ! -z "${{ secrets.SWAGGERHUB_USER }}" ] && echo "HAS_SWAGGER=true" >> $GITHUB_OUTPUT exit 0 - build-docker-images: - name: "Create Docker Images" + determine-version: runs-on: ubuntu-latest - needs: [ secret-presence ] + outputs: + VERSION: ${{ steps.get-version.outputs.VERSION }} + steps: + - uses: actions/checkout@v4 + - name: "Get version" + id: get-version + run: | + + # only create the version string if the run-all-tests workflow was triggered by a cron event + + if [[ ${{ github.event.workflow_run.event }} == "schedule" ]]; then + echo "VERSION=$(IFS=.- read -r RELEASE_VERSION_MAJOR RELEASE_VERSION_MINOR RELEASE_VERSION_PATCH SNAPSHOT<<<$(grep "version" gradle.properties | awk -F= '{print $2}') && echo $RELEASE_VERSION_MAJOR.$RELEASE_VERSION_MINOR.$RELEASE_VERSION_PATCH-$(date +"%Y%m%d")-SNAPSHOT)" >> "$GITHUB_OUTPUT" + fi + + publish-docker-images: + name: "Create Docker Images" + needs: [ secret-presence, determine-version] if: | needs.secret-presence.outputs.DOCKER_HUB_TOKEN - strategy: - fail-fast: false - matrix: - variant: [ { dir: edc-controlplane, img: edc-runtime-memory }, - { dir: edc-controlplane, img: edc-controlplane-postgresql-hashicorp-vault }, - { dir: edc-controlplane, img: edc-controlplane-postgresql-azure-vault }, - { dir: edc-dataplane, img: edc-dataplane-azure-vault }, - { dir: edc-dataplane, img: edc-dataplane-hashicorp-vault }, - { dir: edc-tests/runtime, img: mock-connector }] permissions: contents: write - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/publish-docker-image - name: Publish ${{ matrix.variant.img }} - with: - docker_tag: ${{ needs.release-version.outputs.RELEASE_VERSION }} - rootDir: ${{ matrix.variant.dir }}/${{ matrix.variant.img }} - imagename: ${{ matrix.variant.img }} - docker_user: ${{ secrets.DOCKER_HUB_USER }} - docker_token: ${{ secrets.DOCKER_HUB_TOKEN }} - do_push: ${{ github.event_name != 'pull_request' }} + uses: ./.github/workflows/trigger-docker-publish.yaml + secrets: inherit + with: + docker_tag: ${{ needs.determine-version.outputs.VERSION }} - publish-to-sonatype: + + publish-maven-artifacts: name: "Publish artefacts to OSSRH Snapshots / MavenCentral" - runs-on: ubuntu-latest permissions: contents: read - packages: write - needs: [ secret-presence ] + needs: [ secret-presence, determine-version ] # do not run on PR branches, do not run on releases if: | needs.secret-presence.outputs.HAS_OSSRH && github.event_name != 'pull_request' && github.ref != 'refs/heads/releases' - steps: - # Set-Up - - uses: actions/checkout@v4 - - # Import GPG Key - - uses: ./.github/actions/import-gpg-key - name: "Import GPG Key" - with: - gpg-private-key: ${{ secrets.ORG_GPG_PRIVATE_KEY }} - - - uses: ./.github/actions/setup-java - # publish snapshots or releases - - name: Publish version - env: - OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} - OSSRH_USER: ${{ secrets.ORG_OSSRH_USERNAME }} - run: |- - VERSION=$(./gradlew properties -q | grep "version:" | awk '{print $2}') - cmd="" - if [[ $VERSION != *-SNAPSHOT ]] - then - cmd="closeAndReleaseSonatypeStagingRepository"; - fi - echo "Publishing Version $VERSION to Sonatype" - ./gradlew publishToSonatype ${cmd} --no-parallel -Pversion=$VERSION -Psigning.gnupg.executable=gpg -Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" + uses: ./.github/workflows/trigger-maven-publish.yaml + secrets: inherit + with: + version: ${{ needs.determine-version.outputs.VERSION }} publish-to-swaggerhub: name: "Publish OpenAPI spec to Swaggerhub" permissions: contents: read - needs: [ secret-presence ] + needs: [ secret-presence, determine-version ] if: needs.secret-presence.outputs.HAS_SWAGGER uses: ./.github/workflows/publish-swaggerhub.yaml secrets: inherit + with: + downstream-version: ${{ needs.determine-version.outputs.VERSION }} + + publish-openapi-to-gh-pages: + name: "Publish OpenAPI UI spec GitHub Pages" + permissions: + contents: write + needs: [ secret-presence, determine-version ] + uses: ./.github/workflows/publish-openapi-ui.yml + secrets: inherit + with: + version: ${{ needs.determine-version.outputs.VERSION }} diff --git a/.github/workflows/publish-openapi-ui.yml b/.github/workflows/publish-openapi-ui.yml new file mode 100644 index 000000000..ceb5103f4 --- /dev/null +++ b/.github/workflows/publish-openapi-ui.yml @@ -0,0 +1,122 @@ +################################################################################# +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License, Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +################################################################################# + +--- +name: publish openapi ui + +on: + + workflow_dispatch: + inputs: + version: + required: false + description: "Version of the Tractus-X EDC API to be should be published" + type: string + + workflow_call: + inputs: + version: + required: false + description: "Version of the Tractus-X EDC API to be should be published" + type: string + +jobs: + generate-openapi-spec: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-java + + - name: Generate openapi spec + run: ./gradlew resolve + - uses: actions/upload-artifact@v4 + with: + name: openapi-spec + path: resources/openapi/yaml + + generate-swagger-ui: + needs: generate-openapi-spec + runs-on: ubuntu-latest + strategy: + matrix: + apiGroup: [ + { name: "control-plane", folder: "edc-controlplane/edc-controlplane-base" }, + { name: "data-plane", folder: "edc-dataplane/edc-dataplane-base" } + ] + steps: + - uses: actions/checkout@v4 + - uses: eclipse-edc/.github/.github/actions/setup-build@main + - uses: actions/download-artifact@v4 + with: + name: openapi-spec + path: resources/openapi/yaml + + - name: Set version + run: | + if [ -z ${{ inputs.version }} ]; then + export VERSION=$(grep "version" gradle.properties | awk -F= '{print $2}') + else + export VERSION=${{ inputs.version }} + fi + + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + + - name: Download upstream API specs for ${{ matrix.apiGroup.name }} + run: | + ./gradlew -p ${{ matrix.apiGroup.folder }} downloadOpenapi + cp ${{ matrix.apiGroup.folder }}/build/docs/openapi/* resources/openapi/yaml/${{ matrix.apiGroup.name }} + + - name: Merge API specs + run: | + ./gradlew -Pversion=${{ env.VERSION }} -PapiTitle="Tractus-X EDC ${{ matrix.apiGroup.name }} API" -PapiDescription="Tractus-X EDC ${{ matrix.apiGroup.name }} API Documentation" :mergeApiSpec --input=./resources/openapi/yaml/${{ matrix.apiGroup.name }} --output=./resources/openapi/yaml/${{ matrix.apiGroup.name }}.yaml + + - name: Generate Swagger UI current version + uses: Legion2/swagger-ui-action@v1 + with: + output: dist/${{ env.VERSION }} + spec-file: resources/openapi/yaml/${{ matrix.apiGroup.name }}.yaml + + - name: Generate Swagger UI stable version + uses: Legion2/swagger-ui-action@v1 + if: ${{ !endsWith( env.VERSION, '-SNAPSHOT') }} + with: + output: dist + spec-file: resources/openapi/yaml/${{ matrix.apiGroup.name }}.yaml + + - uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.apiGroup.name }}-api + path: dist + + deploy-swagger-ui: + needs: generate-swagger-ui + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + path: openapi + pattern: "*-api" + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: . + keep_files: true diff --git a/.github/workflows/publish-swaggerhub.yaml b/.github/workflows/publish-swaggerhub.yaml index 9ea7ffae6..55f61c27a 100644 --- a/.github/workflows/publish-swaggerhub.yaml +++ b/.github/workflows/publish-swaggerhub.yaml @@ -19,6 +19,7 @@ ################################################################################# +# DEPRECATED: openapi are published on github-pages now, please look at publish-openapi-ui --- name: "Publish OpenAPI to Swaggerhub" diff --git a/.github/workflows/run-all-tests.yml b/.github/workflows/run-all-tests.yml index 26eacc08a..9b6843b86 100644 --- a/.github/workflows/run-all-tests.yml +++ b/.github/workflows/run-all-tests.yml @@ -37,6 +37,9 @@ on: pull_request: workflow_dispatch: + schedule: + - cron: 0 3 * * 1 # run on 03:00 UTC every Monday + concurrency: # cancel older running jobs on the same branch group: ${{ github.workflow }}-${{ github.ref }} @@ -62,6 +65,7 @@ jobs: needs: - verify - deployment-test + - upgradeability-test runs-on: ubuntu-latest steps: - name: 'Master test job' diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/trigger-docker-publish.yaml similarity index 81% rename from .github/workflows/publish-docker.yaml rename to .github/workflows/trigger-docker-publish.yaml index bf5ac3b01..296d72994 100644 --- a/.github/workflows/publish-docker.yaml +++ b/.github/workflows/trigger-docker-publish.yaml @@ -20,7 +20,7 @@ --- -name: "Create Docker images" +name: "Create and publish Docker images" on: workflow_dispatch: @@ -33,14 +33,21 @@ on: description: 'Explicitly specify the Docker tag. Note that SHA and latest are added automatically.' required: false -concurrency: - # cancel only running jobs on pull requests - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + workflow_call: + inputs: + namespace: + type: string + description: 'The namespace (=repo) in DockerHub' + required: false + default: "tractusx" + docker_tag: + type: string + description: 'Explicitly specify the Docker tag. Note that SHA and latest are added automatically.' + required: false jobs: create-docker-image: - name: "Create Docker Images for the ControlPlane" + name: "Build and push images" runs-on: ubuntu-latest strategy: fail-fast: false @@ -53,9 +60,11 @@ jobs: { dir: edc-tests/runtime, img: mock-connector }] permissions: contents: write - packages: write steps: - uses: actions/checkout@v4 + - name: Log inputs + run: | + echo "Input Version: ${{ inputs.version }}, Input namespace: ${{ inputs.namespace}}" - uses: ./.github/actions/publish-docker-image name: Publish ${{ matrix.variant.img }} with: @@ -65,4 +74,3 @@ jobs: namespace: ${{ inputs.namespace }} docker_user: ${{ secrets.DOCKER_HUB_USER }} docker_token: ${{ secrets.DOCKER_HUB_TOKEN }} - do_push: 'true' diff --git a/.github/workflows/publish-maven.yaml b/.github/workflows/trigger-maven-publish.yaml similarity index 61% rename from .github/workflows/publish-maven.yaml rename to .github/workflows/trigger-maven-publish.yaml index e30663c3e..94cd7594f 100644 --- a/.github/workflows/publish-maven.yaml +++ b/.github/workflows/trigger-maven-publish.yaml @@ -20,19 +20,20 @@ --- -name: "Manually publish Maven Artefacts to OSSRH" +name: "Publish Maven Artefacts to OSSRH" on: workflow_dispatch: inputs: version: required: false - description: 'a semver string denoting the version. Append -SNAPSHOT for snapshots. If ommitted, the version is taken from gradle.properties' - -concurrency: - # cancel only running jobs on pull requests - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + description: 'a semver string denoting the version. Append -SNAPSHOT for snapshots. If omitted, the version is taken from gradle.properties' + workflow_call: + inputs: + version: + type: string + required: false + description: 'a semver string denoting the version. Append -SNAPSHOT for snapshots. If omitted, the version is taken from gradle.properties' jobs: maven-release: @@ -40,7 +41,6 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - packages: write steps: # Set-Up - uses: actions/checkout@v4 @@ -58,12 +58,27 @@ jobs: OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} OSSRH_USER: ${{ secrets.ORG_OSSRH_USERNAME }} run: |- - if [ -z ${{ inputs.version }} ]; - then + + echo "Input Version: ${{ inputs.version }}" + + # check if version input was specified, else read from gradle.properties + + if [ ! -z ${{ inputs.version }} ]; + then + VERSION=${{ inputs.version }} + echo "Publishing using version from parameter: $VERSION" + else VERSION=$(./gradlew properties -q | grep "version:" | awk '{print $2}') echo "Publishing using version from gradle.properties: $VERSION" - ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository --no-parallel -Pversion=$VERSION -Psigning.gnupg.executable=gpg -Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" - else - echo "Publishing using version from parameter: ${{ inputs.version }}" - ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository --no-parallel -Pversion=${{ inputs.version }} -Psigning.gnupg.executable=gpg -Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" fi + + # check if the version is a SNAPSHOT, and if not, append command to close staging repo + + cmd="" + if [[ $VERSION != *-SNAPSHOT ]] + then + cmd="closeAndReleaseSonatypeStagingRepository"; + fi + echo "Publishing Version $VERSION to Sonatype" + + ./gradlew publishToSonatype ${cmd} --no-parallel -Pversion=$VERSION -Psigning.gnupg.executable=gpg -Psigning.gnupg.passphrase="${{ secrets.ORG_GPG_PASSPHRASE }}" diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 96ea5885d..98a865bf1 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -58,7 +58,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in repo mode - uses: aquasecurity/trivy-action@0.23.0 + uses: aquasecurity/trivy-action@0.24.0 with: scan-type: "config" # ignore-unfixed: true @@ -102,7 +102,7 @@ jobs: ## the next two steps will only execute if the image exists check was successful - name: Run Trivy vulnerability scanner if: success() && steps.imageCheck.outcome != 'failure' - uses: aquasecurity/trivy-action@0.23.0 + uses: aquasecurity/trivy-action@0.24.0 with: image-ref: "tractusx/${{ matrix.image }}:sha-${{ needs.git-sha7.outputs.value }}" format: "sarif" diff --git a/DEPENDENCIES b/DEPENDENCIES index 08ae25cf3..517680115 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -5,23 +5,28 @@ maven/mavencentral/com.apicatalog/iron-ed25519-cryptosuite-2020/0.14.0, Apache-2 maven/mavencentral/com.apicatalog/iron-verifiable-credentials/0.14.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.apicatalog/titanium-json-ld/1.0.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.apicatalog/titanium-json-ld/1.4.0, Apache-2.0, approved, #15200 -maven/mavencentral/com.azure/azure-core-http-netty/1.13.11, MIT AND Apache-2.0, approved, #7948 +maven/mavencentral/com.apicatalog/titanium-json-ld/1.4.1, Apache-2.0, approved, #15200 maven/mavencentral/com.azure/azure-core-http-netty/1.15.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-core-http-netty/1.15.1, MIT, approved, clearlydefined -maven/mavencentral/com.azure/azure-core/1.45.1, MIT AND Apache-2.0, approved, #11845 +maven/mavencentral/com.azure/azure-core-http-netty/1.15.2, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-core-http-netty/1.15.3, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-core/1.49.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-core/1.49.1, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-core/1.50.0, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-core/1.51.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-identity/1.13.0, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-identity/1.13.2, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-json/1.1.0, MIT AND Apache-2.0, approved, #10547 -maven/mavencentral/com.azure/azure-security-keyvault-secrets/4.7.3, MIT, approved, #10868 -maven/mavencentral/com.azure/azure-security-keyvault-secrets/4.8.4, MIT, approved, #13690 +maven/mavencentral/com.azure/azure-json/1.2.0, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-security-keyvault-secrets/4.8.5, MIT, approved, #13690 maven/mavencentral/com.azure/azure-storage-blob/12.26.0, MIT, approved, clearlydefined -maven/mavencentral/com.azure/azure-storage-blob/12.26.1, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-storage-blob/12.27.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-storage-common/12.25.0, MIT, approved, clearlydefined -maven/mavencentral/com.azure/azure-storage-common/12.25.1, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-storage-common/12.26.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-storage-internal-avro/12.11.0, MIT, approved, clearlydefined -maven/mavencentral/com.azure/azure-storage-internal-avro/12.11.1, MIT, approved, clearlydefined +maven/mavencentral/com.azure/azure-storage-internal-avro/12.12.0, MIT, approved, clearlydefined maven/mavencentral/com.azure/azure-xml/1.0.0, MIT, approved, #14410 +maven/mavencentral/com.azure/azure-xml/1.1.0, MIT, approved, clearlydefined maven/mavencentral/com.ethlo.time/itu/1.7.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.10.3, Apache-2.0, approved, CQ21280 maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.13.5, Apache-2.0, approved, clearlydefined @@ -49,15 +54,16 @@ maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.17. maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.14.0, Apache-2.0, approved, #5933 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.16.2, Apache-2.0, approved, #11855 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.17.2, Apache-2.0, approved, #13669 -maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.17.1, Apache-2.0, approved, #14161 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.17.2, Apache-2.0, approved, #14161 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.5, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.14.0, Apache-2.0, approved, #4699 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.16.2, Apache-2.0, approved, #11853 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.17.2, Apache-2.0, approved, #14160 +maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/2.16.2, Apache-2.0, approved, #11851 maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/2.17.2, Apache-2.0, approved, #14194 maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.16.2, Apache-2.0, approved, #11858 maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.17.2, Apache-2.0, approved, #14195 +maven/mavencentral/com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.16.2, Apache-2.0, approved, #11856 maven/mavencentral/com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.17.0, Apache-2.0, approved, #13668 maven/mavencentral/com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.17.2, Apache-2.0, approved, #13668 maven/mavencentral/com.fasterxml.jackson/jackson-bom/2.16.2, Apache-2.0, approved, #11852 @@ -65,9 +71,9 @@ maven/mavencentral/com.fasterxml.jackson/jackson-bom/2.17.2, Apache-2.0, approve maven/mavencentral/com.fasterxml.uuid/java-uuid-generator/4.1.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.woodstox/woodstox-core/6.7.0, Apache-2.0, approved, #15476 maven/mavencentral/com.github.cliftonlabs/json-simple/3.0.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/com.github.docker-java/docker-java-api/3.3.6, Apache-2.0, approved, #10346 -maven/mavencentral/com.github.docker-java/docker-java-transport-zerodep/3.3.6, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #15251 -maven/mavencentral/com.github.docker-java/docker-java-transport/3.3.6, Apache-2.0, approved, #7942 +maven/mavencentral/com.github.docker-java/docker-java-api/3.4.0, Apache-2.0, approved, clearlydefined +maven/mavencentral/com.github.docker-java/docker-java-transport-zerodep/3.4.0, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #15745 +maven/mavencentral/com.github.docker-java/docker-java-transport/3.4.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.github.java-json-tools/btf/1.3, Apache-2.0 OR LGPL-3.0-only, approved, #15201 maven/mavencentral/com.github.java-json-tools/jackson-coreutils-equivalence/1.0, LGPL-3.0 OR Apache-2.0, approved, clearlydefined maven/mavencentral/com.github.java-json-tools/jackson-coreutils/2.0, Apache-2.0 OR LGPL-3.0-or-later, approved, #15186 @@ -101,6 +107,7 @@ maven/mavencentral/com.lmax/disruptor/3.4.4, Apache-2.0, approved, clearlydefine maven/mavencentral/com.microsoft.azure/msal4j-persistence-extension/1.3.0, MIT, approved, #14411 maven/mavencentral/com.microsoft.azure/msal4j/1.15.0, MIT, approved, clearlydefined maven/mavencentral/com.microsoft.azure/msal4j/1.15.1, MIT, approved, clearlydefined +maven/mavencentral/com.microsoft.azure/msal4j/1.16.2, MIT, approved, clearlydefined maven/mavencentral/com.networknt/json-schema-validator/1.0.76, Apache-2.0, approved, CQ22638 maven/mavencentral/com.nimbusds/content-type/2.3, Apache-2.0, approved, clearlydefined maven/mavencentral/com.nimbusds/lang-tag/1.7, Apache-2.0, approved, clearlydefined @@ -109,7 +116,7 @@ maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.37.3, Apache-2.0, approved, #1 maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.40, Apache-2.0, approved, #15156 maven/mavencentral/com.nimbusds/oauth2-oidc-sdk/11.9.1, Apache-2.0, approved, #12667 maven/mavencentral/com.puppycrawl.tools/checkstyle/10.17.0, LGPL-2.1-or-later AND (Apache-2.0 AND LGPL-2.1-or-later) AND Apache-2.0, approved, #15077 -maven/mavencentral/com.samskivert/jmustache/1.15, BSD-2-Clause, approved, clearlydefined +maven/mavencentral/com.samskivert/jmustache/1.15, BSD-2-Clause AND BSD-3-Clause, approved, clearlydefined maven/mavencentral/com.squareup.okhttp3/okhttp-dnsoverhttps/4.12.0, Apache-2.0, approved, #11159 maven/mavencentral/com.squareup.okhttp3/okhttp/4.12.0, Apache-2.0, approved, #15227 maven/mavencentral/com.squareup.okhttp3/okhttp/4.9.3, Apache-2.0 AND MPL-2.0, approved, #3225 @@ -123,6 +130,7 @@ maven/mavencentral/commons-beanutils/commons-beanutils/1.8.3, Apache-2.0, approv maven/mavencentral/commons-beanutils/commons-beanutils/1.9.4, Apache-2.0, approved, CQ12654 maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0 AND BSD-3-Clause, approved, CQ15971 maven/mavencentral/commons-codec/commons-codec/1.15, Apache-2.0 AND BSD-3-Clause AND LicenseRef-Public-Domain, approved, CQ22641 +maven/mavencentral/commons-codec/commons-codec/1.17.1, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #14583 maven/mavencentral/commons-collections/commons-collections/3.2.2, Apache-2.0, approved, #15185 maven/mavencentral/commons-io/commons-io/2.11.0, Apache-2.0, approved, CQ23745 maven/mavencentral/commons-logging/commons-logging/1.1.1, Apache-2.0, approved, CQ1907 @@ -136,30 +144,25 @@ maven/mavencentral/io.github.classgraph/classgraph/4.8.165, MIT, approved, CQ225 maven/mavencentral/io.micrometer/micrometer-commons/1.13.2, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #14826 maven/mavencentral/io.micrometer/micrometer-core/1.13.2, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #14827 maven/mavencentral/io.micrometer/micrometer-observation/1.13.2, Apache-2.0, approved, #14829 -maven/mavencentral/io.netty/netty-buffer/4.1.108.Final, Apache-2.0, approved, CQ21842 maven/mavencentral/io.netty/netty-buffer/4.1.109.Final, Apache-2.0, approved, CQ21842 maven/mavencentral/io.netty/netty-buffer/4.1.110.Final, Apache-2.0, approved, CQ21842 maven/mavencentral/io.netty/netty-buffer/4.1.111.Final, Apache-2.0, approved, CQ21842 maven/mavencentral/io.netty/netty-buffer/4.1.86.Final, Apache-2.0, approved, CQ21842 maven/mavencentral/io.netty/netty-codec-dns/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec-http/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec-http2/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http2/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http2/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http2/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http2/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-socks/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-socks/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-common/4.1.108.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 maven/mavencentral/io.netty/netty-common/4.1.109.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 maven/mavencentral/io.netty/netty-common/4.1.110.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 maven/mavencentral/io.netty/netty-common/4.1.111.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 @@ -167,7 +170,6 @@ maven/mavencentral/io.netty/netty-common/4.1.86.Final, Apache-2.0 AND MIT AND CC maven/mavencentral/io.netty/netty-handler-proxy/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler-proxy/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler-proxy/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-handler/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 @@ -175,7 +177,6 @@ maven/mavencentral/io.netty/netty-handler/4.1.86.Final, Apache-2.0 AND BSD-3-Cla maven/mavencentral/io.netty/netty-resolver-dns-classes-macos/4.1.109.Final, Apache-2.0, approved, #6367 maven/mavencentral/io.netty/netty-resolver-dns-native-macos/4.1.109.Final, Apache-2.0, approved, #7004 maven/mavencentral/io.netty/netty-resolver-dns/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-resolver/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-resolver/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-resolver/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-resolver/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 @@ -184,7 +185,6 @@ maven/mavencentral/io.netty/netty-tcnative-boringssl-static/2.0.56.Final, Apache maven/mavencentral/io.netty/netty-tcnative-boringssl-static/2.0.65.Final, Apache-2.0 OR LicenseRef-Public-Domain OR BSD-2-Clause OR MIT, approved, CQ15280 maven/mavencentral/io.netty/netty-tcnative-classes/2.0.56.Final, Apache-2.0, approved, clearlydefined maven/mavencentral/io.netty/netty-tcnative-classes/2.0.65.Final, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.netty/netty-transport-classes-epoll/4.1.108.Final, Apache-2.0, approved, #6366 maven/mavencentral/io.netty/netty-transport-classes-epoll/4.1.110.Final, Apache-2.0, approved, #6366 maven/mavencentral/io.netty/netty-transport-classes-epoll/4.1.111.Final, Apache-2.0, approved, #6366 maven/mavencentral/io.netty/netty-transport-classes-kqueue/4.1.110.Final, Apache-2.0, approved, #4107 @@ -195,12 +195,12 @@ maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.109.Final, Ap maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-transport/4.1.108.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport/4.1.109.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport/4.1.110.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport/4.1.111.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport/4.1.86.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.opentelemetry.instrumentation/opentelemetry-instrumentation-annotations/1.32.0, Apache-2.0, approved, #11684 +maven/mavencentral/io.opentelemetry.javaagent/opentelemetry-javaagent/2.6.0, Apache-2.0, restricted, clearlydefined maven/mavencentral/io.opentelemetry/opentelemetry-api/1.32.0, Apache-2.0, approved, #11682 maven/mavencentral/io.opentelemetry/opentelemetry-context/1.32.0, Apache-2.0, approved, #11683 maven/mavencentral/io.projectreactor.netty/reactor-netty-core/1.0.45, Apache-2.0, approved, #9687 @@ -269,7 +269,6 @@ maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.14.1, Apache-2.0, approved, maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.14.15, Apache-2.0, approved, #7164 maven/mavencentral/net.bytebuddy/byte-buddy/1.14.1, Apache-2.0 AND BSD-3-Clause, approved, #7163 maven/mavencentral/net.bytebuddy/byte-buddy/1.14.15, Apache-2.0 AND BSD-3-Clause, approved, #7163 -maven/mavencentral/net.bytebuddy/byte-buddy/1.14.16, Apache-2.0 AND BSD-3-Clause, approved, #7163 maven/mavencentral/net.bytebuddy/byte-buddy/1.14.18, Apache-2.0 AND BSD-3-Clause, approved, #7163 maven/mavencentral/net.java.dev.jna/jna-platform/5.13.0, Apache-2.0 OR LGPL-2.1-or-later, approved, #6707 maven/mavencentral/net.java.dev.jna/jna-platform/5.6.0, Apache-2.0 OR LGPL-2.1-or-later, approved, CQ22390 @@ -304,6 +303,7 @@ maven/mavencentral/org.apache.httpcomponents.core5/httpcore5/5.1.3, Apache-2.0, maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0, approved, #15248 maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.13, Apache-2.0, approved, CQ23528 maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.14, Apache-2.0, approved, CQ23528 +maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.16, Apache-2.0, approved, CQ23528 maven/mavencentral/org.apache.httpcomponents/httpmime/4.5.13, Apache-2.0, approved, CQ11718 maven/mavencentral/org.apache.maven.doxia/doxia-core/1.12.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.maven.doxia/doxia-logging-api/1.12.0, Apache-2.0, approved, clearlydefined @@ -311,10 +311,9 @@ maven/mavencentral/org.apache.maven.doxia/doxia-module-xdoc/1.12.0, Apache-2.0, maven/mavencentral/org.apache.maven.doxia/doxia-sink-api/1.12.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.velocity.tools/velocity-tools-generic/3.1, Apache-2.0, approved, #9331 maven/mavencentral/org.apache.velocity/velocity-engine-core/2.3, Apache-2.0, approved, #2478 -maven/mavencentral/org.apache.velocity/velocity-engine-scripting/2.3, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.apache.velocity/velocity-engine-scripting/2.3, Apache-2.0 AND BSD-3-Clause, approved, #15744 maven/mavencentral/org.apache.xbean/xbean-reflect/3.7, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apiguardian/apiguardian-api/1.1.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/org.assertj/assertj-core/3.26.0, Apache-2.0, approved, #14886 maven/mavencentral/org.assertj/assertj-core/3.26.3, Apache-2.0, approved, #14886 maven/mavencentral/org.awaitility/awaitility/4.2.1, Apache-2.0, approved, #14178 maven/mavencentral/org.bouncycastle/bcpkix-jdk18on/1.72, MIT, approved, #3789 @@ -334,211 +333,216 @@ maven/mavencentral/org.codehaus.plexus/plexus-utils/3.1.1, , approved, CQ16492 maven/mavencentral/org.codehaus.plexus/plexus-utils/3.3.0, , approved, CQ21066 maven/mavencentral/org.codehaus.woodstox/stax2-api/4.2.2, BSD-2-Clause, approved, #2670 maven/mavencentral/org.eclipse.angus/angus-activation/1.0.0, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.angus -maven/mavencentral/org.eclipse.edc.aws/aws-s3-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.aws/aws-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.aws/data-plane-aws-s3/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.aws/validator-data-address-s3/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.azure/azure-blob-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.azure/data-plane-azure-storage/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc.azure/vault-azure/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/accesstoken-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/accesstokendata-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/api-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/api-observability/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-index-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/auth-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/auth-tokenbased/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/autodoc-processor/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/boot-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/boot-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/boot-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/boot/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/callback-event-dispatcher/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/callback-http-dispatcher/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/callback-static-endpoint/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-util-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/configuration-filesystem/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/connector-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-agreement-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-definition-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-definition-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-negotiation-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-negotiation-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-api-configuration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-aggregate-services/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-api-client-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-api-client/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-catalog/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-contract/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-policies-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-transfer/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/core-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/core-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/crawler-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/crawler-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/credential-query-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/crypto-common-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-address-http-data-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-client-embedded/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-control-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-public-api-v2/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-client/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-control-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-self-registration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-signaling-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-signaling-client/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-signaling-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-util/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-util/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/did-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-http-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-http-dispatcher/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-http-api-configuration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-http-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-http-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-dispatcher/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-dispatcher/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-version-http-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/edr-index-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/edr-store-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/edr-store-receiver/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/edr-store-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/federated-catalog-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/federated-catalog-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/federated-catalog-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/http-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/http-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/http/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/iam-mock/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-did-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-did-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-did-web/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-did/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-keypairs/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-participants/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-hub-store-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-issuers-configuration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-service/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-client-configuration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-embedded/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-remote-client/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-remote-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-sts-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/identity-trust-transform/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-micrometer/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-providers-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jetty-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jetty-micrometer/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-ld-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-ld-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-ld/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/junit-base/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/junit/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jws2020-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jwt-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jwt-verifiable-credentials/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/keypair-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/keypair-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/keys-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/keys-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/ldp-verifiable-credentials/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api-configuration/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api-test-fixtures/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/micrometer-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/oauth2-client/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/oauth2-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/participant-context-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-definition-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-definition-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-engine-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-evaluator-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-model/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-model/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-monitor-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-monitor-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-monitor-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/presentation-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/query-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/secrets-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-lease/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-pool-apache-commons/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/state-machine-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/store-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/token-core/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/token-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-datasource-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-local/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-data-plane-signaling/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-data-plane-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-process-api/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-process-store-sql/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-pull-http-dynamic-receiver/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transform-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transform-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/util-lib/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/util-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-data-address-http-data/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-spi/0.7.2-SNAPSHOT, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/vault-hashicorp/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/verifiable-credential-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/verifiable-credentials-spi/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/verifiable-credentials/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/verifiable-presentation-lib/0.8.0, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/web-spi/0.8.0, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.aws/aws-s3-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.aws/aws-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.aws/data-plane-aws-s3/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.aws/validator-data-address-s3/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.azure/azure-blob-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.azure/data-plane-azure-storage/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc.azure/vault-azure/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/accesstoken-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/accesstokendata-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/api-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/api-observability/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-index-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-delegated/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-tokenbased/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/autodoc-processor/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/boot-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/boot-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/boot-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/boot/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/callback-event-dispatcher/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/callback-http-dispatcher/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/callback-static-endpoint/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-util-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/configuration-filesystem/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/connector-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-agreement-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-definition-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-definition-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-negotiation-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-negotiation-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-api-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-aggregate-services/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api-client-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api-client/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-catalog/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-contract/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-policies-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-transfer/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/core-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/core-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/crawler-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/crawler-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/credential-query-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/crypto-common-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-address-http-data-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-client-embedded/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-control-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-instance-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-public-api-v2/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-client/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-control-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-self-registration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-signaling-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-signaling-client/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-signaling-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-util/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-util/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/did-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-http-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-http-dispatcher/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-http-api-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-http-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-http-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-dispatcher/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-dispatcher/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-version-http-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/edr-index-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/edr-store-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/edr-store-receiver/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/edr-store-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/federated-catalog-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/federated-catalog-cache-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/federated-catalog-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/federated-catalog-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/http-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/http-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/http/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/iam-mock/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-did-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-did-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-did-web/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-did/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-keypairs/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-participants/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-hub-store-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-issuers-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-service/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-client-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-embedded/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-remote-client/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-remote-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-sts-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/identity-trust-transform/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-micrometer/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-providers-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jetty-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jetty-micrometer/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/junit-base/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/junit/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jws2020-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jwt-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jwt-verifiable-credentials/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/keypair-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/keypair-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/keys-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/keys-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/ldp-verifiable-credentials/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api-configuration/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api-test-fixtures/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/micrometer-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/oauth2-client/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/oauth2-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/participant-context-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-definition-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-definition-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-engine-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-evaluator-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-model/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-model/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-monitor-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-monitor-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-monitor-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/presentation-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/query-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/secrets-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-bootstrapper/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-lease/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-pool-apache-commons/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/state-machine-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/store-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/token-core/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/token-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-datasource-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-local/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-data-plane-signaling/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-data-plane-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-process-api/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-process-store-sql/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-pull-http-dynamic-receiver/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transform-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transform-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/util-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/util-lib/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-data-address-http-data/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-spi/0.8.2-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/vault-hashicorp/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/verifiable-credential-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/verifiable-credentials-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/verifiable-credentials/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/verifiable-presentation-lib/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/web-spi/0.8.2-20240805-SNAPSHOT, Apache-2.0, approved, technology.edc maven/mavencentral/org.eclipse.jetty.toolchain/jetty-jakarta-servlet-api/5.0.2, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty.toolchain/jetty-jakarta-websocket-api/2.0.0, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-client/11.0.22, EPL-2.0 OR Apache-2.0, approved, rt.jetty @@ -561,9 +565,9 @@ maven/mavencentral/org.eclipse.jetty/jetty-servlet/11.0.22, EPL-2.0 OR Apache-2. maven/mavencentral/org.eclipse.jetty/jetty-util/11.0.22, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.22, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.22, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.parsson/parsson/1.1.6, EPL-2.0, approved, ee4j.parsson -maven/mavencentral/org.flywaydb/flyway-core/10.15.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/org.flywaydb/flyway-database-postgresql/10.15.2, Apache-2.0, approved, #15694 +maven/mavencentral/org.eclipse.parsson/parsson/1.1.7, EPL-2.0, approved, ee4j.parsson +maven/mavencentral/org.flywaydb/flyway-core/10.17.0, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.flywaydb/flyway-database-postgresql/10.17.0, NOASSERTION, restricted, clearlydefined maven/mavencentral/org.glassfish.hk2.external/aopalliance-repackaged/3.0.6, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish maven/mavencentral/org.glassfish.hk2/hk2-api/3.0.6, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish maven/mavencentral/org.glassfish.hk2/hk2-locator/3.0.6, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish @@ -639,71 +643,75 @@ maven/mavencentral/org.slf4j/slf4j-api/1.7.7, MIT, approved, CQ9827 maven/mavencentral/org.slf4j/slf4j-api/2.0.13, MIT, approved, #5915 maven/mavencentral/org.slf4j/slf4j-api/2.0.6, MIT, approved, #5915 maven/mavencentral/org.slf4j/slf4j-api/2.0.9, MIT, approved, #5915 -maven/mavencentral/org.testcontainers/database-commons/1.19.8, Apache-2.0, approved, #10345 -maven/mavencentral/org.testcontainers/jdbc/1.19.8, Apache-2.0, approved, #10348 -maven/mavencentral/org.testcontainers/junit-jupiter/1.19.8, MIT, approved, #10344 -maven/mavencentral/org.testcontainers/postgresql/1.19.8, MIT, approved, #10350 -maven/mavencentral/org.testcontainers/testcontainers/1.19.8, MIT, approved, #15203 +maven/mavencentral/org.testcontainers/database-commons/1.20.1, MIT, approved, clearlydefined +maven/mavencentral/org.testcontainers/jdbc/1.20.1, MIT, approved, clearlydefined +maven/mavencentral/org.testcontainers/junit-jupiter/1.20.1, MIT, approved, clearlydefined +maven/mavencentral/org.testcontainers/postgresql/1.20.1, MIT, approved, clearlydefined +maven/mavencentral/org.testcontainers/testcontainers/1.20.1, MIT, approved, #15747 maven/mavencentral/org.xmlresolver/xmlresolver/5.2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/org.xmlunit/xmlunit-core/2.9.1, Apache-2.0, approved, #6272 maven/mavencentral/org.xmlunit/xmlunit-placeholders/2.9.1, Apache-2.0, approved, clearlydefined maven/mavencentral/org.yaml/snakeyaml/1.33, Apache-2.0, approved, clearlydefined maven/mavencentral/org.yaml/snakeyaml/2.2, Apache-2.0 AND (Apache-2.0 OR BSD-3-Clause OR EPL-1.0 OR GPL-2.0-or-later OR LGPL-2.1-or-later), approved, #10232 -maven/mavencentral/software.amazon.awssdk/annotations/2.25.66, Apache-2.0, approved, #13691 -maven/mavencentral/software.amazon.awssdk/annotations/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/apache-client/2.25.66, Apache-2.0, approved, #13687 -maven/mavencentral/software.amazon.awssdk/apache-client/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/arns/2.25.66, Apache-2.0, approved, #13695 -maven/mavencentral/software.amazon.awssdk/arns/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/auth/2.25.66, Apache-2.0, approved, #13692 -maven/mavencentral/software.amazon.awssdk/auth/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/aws-core/2.25.66, Apache-2.0, approved, #13702 -maven/mavencentral/software.amazon.awssdk/aws-core/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.25.66, Apache-2.0, approved, #13701 -maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.25.66, Apache-2.0, approved, #13684 -maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/checksums-spi/2.25.66, Apache-2.0, approved, #13686 -maven/mavencentral/software.amazon.awssdk/checksums-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/checksums/2.25.66, Apache-2.0, approved, #13677 -maven/mavencentral/software.amazon.awssdk/checksums/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/crt-core/2.25.66, Apache-2.0, approved, #13705 -maven/mavencentral/software.amazon.awssdk/crt-core/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.25.66, Apache-2.0, approved, #13681 -maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.25.66, Apache-2.0, approved, #13696 -maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.25.66, Apache-2.0, approved, #13704 -maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/http-auth/2.25.66, Apache-2.0, approved, #13682 -maven/mavencentral/software.amazon.awssdk/http-auth/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/http-client-spi/2.25.66, Apache-2.0, approved, #13706 -maven/mavencentral/software.amazon.awssdk/http-client-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/iam/2.25.66, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/identity-spi/2.25.66, Apache-2.0, approved, #13685 -maven/mavencentral/software.amazon.awssdk/identity-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/json-utils/2.25.66, Apache-2.0, approved, #13698 -maven/mavencentral/software.amazon.awssdk/json-utils/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/metrics-spi/2.25.66, Apache-2.0, approved, #13680 -maven/mavencentral/software.amazon.awssdk/metrics-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.25.66, Apache-2.0, approved, #13693 -maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/profiles/2.25.66, Apache-2.0, approved, #13697 -maven/mavencentral/software.amazon.awssdk/profiles/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/protocol-core/2.25.66, Apache-2.0, approved, #13679 -maven/mavencentral/software.amazon.awssdk/protocol-core/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/regions/2.25.66, Apache-2.0, approved, #13694 -maven/mavencentral/software.amazon.awssdk/regions/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/retries-spi/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/retries/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/s3-transfer-manager/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/s3/2.25.66, Apache-2.0, approved, #13688 -maven/mavencentral/software.amazon.awssdk/s3/2.26.17, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/sdk-core/2.25.66, Apache-2.0, approved, #13700 -maven/mavencentral/software.amazon.awssdk/sdk-core/2.26.17, Apache-2.0, approved, #15695 -maven/mavencentral/software.amazon.awssdk/sts/2.25.66, Apache-2.0, approved, clearlydefined -maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.25.66, Apache-2.0, approved, #13703 -maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.26.17, Apache-2.0, approved, #15693 -maven/mavencentral/software.amazon.awssdk/utils/2.25.66, Apache-2.0, approved, #13689 -maven/mavencentral/software.amazon.awssdk/utils/2.26.17, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/annotations/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/annotations/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/apache-client/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/apache-client/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/arns/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/arns/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/auth/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/auth/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-core/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-core/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/checksums-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/checksums-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/checksums/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/checksums/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/crt-core/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/crt-core/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-aws-eventstream/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-aws-eventstream/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-auth/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-client-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/http-client-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/iam/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/identity-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/identity-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/json-utils/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/json-utils/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/metrics-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/metrics-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/profiles/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/profiles/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/protocol-core/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/protocol-core/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/regions/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/regions/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/retries-spi/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/retries-spi/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/retries/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/retries/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/s3-transfer-manager/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/s3/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/s3/2.26.29, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/sdk-core/2.26.27, Apache-2.0, approved, #15695 +maven/mavencentral/software.amazon.awssdk/sdk-core/2.26.29, Apache-2.0, approved, #15695 +maven/mavencentral/software.amazon.awssdk/sts/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.26.27, Apache-2.0, approved, #15693 +maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.26.29, Apache-2.0, approved, #15693 +maven/mavencentral/software.amazon.awssdk/utils/2.26.27, Apache-2.0, approved, clearlydefined +maven/mavencentral/software.amazon.awssdk/utils/2.26.29, Apache-2.0, approved, clearlydefined maven/mavencentral/software.amazon.eventstream/eventstream/1.0.1, Apache-2.0, approved, clearlydefined diff --git a/build.gradle.kts b/build.gradle.kts index 2fec7596d..7ab4eb2ac 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -140,68 +140,62 @@ allprojects { } -// the "dockerize" task is added to all projects that use the `shadowJar` plugin subprojects { afterEvaluate { - if (project.plugins.hasPlugin("com.github.johnrengelman.shadow") && - file("${project.projectDir}/src/main/docker/Dockerfile").exists() - ) { - val buildDir = project.layout.buildDirectory.get().asFile - - val agentFile = buildDir.resolve("opentelemetry-javaagent.jar") - // create task to download the opentelemetry agent - val openTelemetryAgentUrl = "https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.32.0/opentelemetry-javaagent.jar" - val downloadOtel = tasks.create("downloadOtel") { - // only execute task if the opentelemetry agent does not exist. invoke the "clean" task to force - onlyIf { - !agentFile.exists() - } - // this task could be the first in the graph, so "build/" may not yet exist. Let's be defensive - doFirst { - buildDir.mkdirs() - } - // download the jar file - doLast { - val download = { url: String, destFile: File -> - ant.invokeMethod( - "get", - mapOf("src" to url, "dest" to destFile) - ) - } - logger.lifecycle("Downloading OpenTelemetry Agent") - download(openTelemetryAgentUrl, agentFile) + // the "dockerize" task is added to all projects that use the `shadowJar` plugin + if (project.plugins.hasPlugin("com.github.johnrengelman.shadow")) { + val downloadOpentelemetryAgent = tasks.create("downloadOpentelemetryAgent", Copy::class) { + val openTelemetry = configurations.create("open-telemetry") + + dependencies { + openTelemetry(libs.opentelemetry.javaagent) } + + from(openTelemetry) + into("build/resources/otel") + rename { "opentelemetry-javaagent.jar" } } - // this task copies some legal docs into the build folder, so we can easily copy them into the docker images val copyLegalDocs = tasks.create("copyLegalDocs", Copy::class) { from(project.rootProject.projectDir) - into("${buildDir}/legal") + into("build/legal") include("SECURITY.md", "NOTICE.md", "DEPENDENCIES", "LICENSE") - dependsOn(tasks.named(ShadowJavaPlugin.SHADOW_JAR_TASK_NAME)) } + val copyDockerfile = tasks.create("copyDockerfile", Copy::class) { + from(rootProject.projectDir.toPath().resolve("resources")) + into(project.layout.buildDirectory.dir("resources").get().dir("docker")) + include("Dockerfile") + } + + val shadowJarTask = tasks.named(ShadowJavaPlugin.SHADOW_JAR_TASK_NAME).get() + + shadowJarTask + .dependsOn(copyDockerfile) + .dependsOn(copyLegalDocs) + .dependsOn(downloadOpentelemetryAgent) + //actually apply the plugin to the (sub-)project apply(plugin = "com.bmuschko.docker-remote-api") - // configure the "dockerize" task + val dockerTask: DockerBuildImage = tasks.create("dockerize", DockerBuildImage::class) { + dockerFile.set(File("build/resources/docker/Dockerfile")) + val dockerContextDir = project.projectDir - dockerFile.set(file("$dockerContextDir/src/main/docker/Dockerfile")) images.add("${project.name}:${project.version}") images.add("${project.name}:latest") - // specify platform with the -Dplatform flag: - if (System.getProperty("platform") != null) + + if (System.getProperty("platform") != null) { platform.set(System.getProperty("platform")) + } + buildArgs.put("JAR", "build/libs/${project.name}.jar") - buildArgs.put("OTEL_JAR", agentFile.relativeTo(dockerContextDir).path) + buildArgs.put("OTEL_JAR", "build/resources/otel/opentelemetry-javaagent.jar") buildArgs.put("ADDITIONAL_FILES", "build/legal/*") inputDir.set(file(dockerContextDir)) } - // make sure always runs after "dockerize" and after "copyOtel" - dockerTask - .dependsOn(tasks.named(ShadowJavaPlugin.SHADOW_JAR_TASK_NAME)) - .dependsOn(downloadOtel) - .dependsOn(copyLegalDocs) + + dockerTask.dependsOn(shadowJarTask) } } diff --git a/charts/tractusx-connector-azure-vault/Chart.yaml b/charts/tractusx-connector-azure-vault/Chart.yaml index ff6ba8cea..27d9a26f0 100644 --- a/charts/tractusx-connector-azure-vault/Chart.yaml +++ b/charts/tractusx-connector-azure-vault/Chart.yaml @@ -42,13 +42,13 @@ type: application # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.8.0-rc1 +version: 0.8.0-rc2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.8.0-rc1" +appVersion: "0.8.0-rc2" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector diff --git a/charts/tractusx-connector-azure-vault/README.md b/charts/tractusx-connector-azure-vault/README.md index 166b70630..b74940a34 100644 --- a/charts/tractusx-connector-azure-vault/README.md +++ b/charts/tractusx-connector-azure-vault/README.md @@ -1,6 +1,6 @@ # tractusx-connector-azure-vault -![Version: 0.8.0-rc1](https://img.shields.io/badge/Version-0.8.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc1](https://img.shields.io/badge/AppVersion-0.8.0--rc1-informational?style=flat-square) +![Version: 0.8.0-rc2](https://img.shields.io/badge/Version-0.8.0--rc2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc2](https://img.shields.io/badge/AppVersion-0.8.0--rc2-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector. The connector deployment consists of two runtime consists of a Control Plane and a Data Plane. Note that _no_ external dependencies such as a PostgreSQL database and Azure KeyVault are included. @@ -44,7 +44,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0.8.0-rc1 \ +helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0.8.0-rc2 \ -f /tractusx-connector-azure-vault-test.yaml \ --set vault.azure.name=$AZURE_VAULT_NAME \ --set vault.azure.client=$AZURE_CLIENT_ID \ @@ -83,7 +83,8 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | controlplane.debug.enabled | bool | `false` | Enables java debugging mode. | | controlplane.debug.port | int | `1044` | Port where the debuggee can connect to. | | controlplane.debug.suspendOnStart | bool | `false` | Defines if the JVM should wait with starting the application until someone connected to the debugging port. | -| controlplane.endpoints | object | `{"catalog":{"path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints | object | `{"catalog":{"authKey":"password","path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","jwksUrl":null,"path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints.catalog.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | | controlplane.endpoints.catalog.path | string | `"/catalog"` | path for incoming catalog cache query requests | | controlplane.endpoints.catalog.port | int | `8085` | port for incoming catalog cache query requests | | controlplane.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | @@ -92,8 +93,9 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | controlplane.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | controlplane.endpoints.default.path | string | `"/api"` | path for incoming api calls | | controlplane.endpoints.default.port | int | `8080` | port for incoming api calls | -| controlplane.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| controlplane.endpoints.management | object | `{"authKey":"password","jwksUrl":null,"path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | | controlplane.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | +| controlplane.endpoints.management.jwksUrl | string | `nil` | if the JWKS url is set, the DelegatedAuth service will be engaged | | controlplane.endpoints.management.path | string | `"/management"` | path for incoming api calls | | controlplane.endpoints.management.port | int | `8081` | port for incoming api calls | | controlplane.endpoints.metrics | object | `{"path":"/metrics","port":9090}` | metrics api, used for application metrics, must not be internet facing | diff --git a/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml b/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml index b8a4b2efa..471bc9d3d 100644 --- a/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml @@ -152,8 +152,14 @@ spec: ####### # API # ####### + {{- if .Values.controlplane.endpoints.management.jwksUrl }} + - name: "EDC_API_AUTH_DAC_KEY_URL" + value: {{ .Values.controlplane.endpoints.management.jwksUrl | quote}} + {{- else }} - name: "EDC_API_AUTH_KEY" value: {{ .Values.controlplane.endpoints.management.authKey | required ".Values.controlplane.endpoints.management.authKey is required" | quote }} + {{- end }} + - name: "WEB_HTTP_DEFAULT_PORT" value: {{ .Values.controlplane.endpoints.default.port | quote }} - name: "WEB_HTTP_DEFAULT_PATH" @@ -176,6 +182,10 @@ spec: value: {{ .Values.controlplane.endpoints.catalog.port | quote }} - name: "WEB_HTTP_CATALOG_PATH" value: {{ .Values.controlplane.endpoints.catalog.path | quote }} + - name: "WEB_HTTP_CATALOG_AUTH_TYPE" + value: "tokenbased" + - name: "WEB_HTTP_CATALOG_AUTH_KEY" + value: {{ .Values.controlplane.endpoints.catalog.authKey | required ".Values.controlplane.endpoints.catalog.authKey is required" | quote }} ######### @@ -273,6 +283,26 @@ spec: - name: "EDC_DATASOURCE_EDR_URL" value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} + # see extension https://github.com/eclipse-edc/FederatedCatalog/tree/main/extensions/store/sql/federated-catalog-cache-sql + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_NAME" + value: "federatedcatalog" + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_USER" + value: {{ .Values.postgresql.auth.username | required ".Values.postgresql.auth.username is required" | quote }} + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_PASSWORD" + value: {{ .Values.postgresql.auth.password | required ".Values.postgresql.auth.password is required" | quote }} + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_URL" + value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} + + # see extension https://github.com/eclipse-edc/Connector/tree/main/extensions/data-plane-selector/store/sql/data-plane-instance-store-sql + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_NAME" + value: "dataplaneinstance" + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_USER" + value: {{ .Values.postgresql.auth.username | required ".Values.postgresql.auth.username is required" | quote }} + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_PASSWORD" + value: {{ .Values.postgresql.auth.password | required ".Values.postgresql.auth.password is required" | quote }} + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_URL" + value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} + ############################# ## IATP / STS / DIM CONFIG ## ############################# @@ -282,8 +312,10 @@ spec: value: {{ .Values.iatp.sts.oauth.client.id | required ".Values.iatp.sts.oauth.client.id is required" | quote}} - name: "EDC_IAM_STS_OAUTH_CLIENT_SECRET_ALIAS" value: {{ .Values.iatp.sts.oauth.client.secret_alias | required ".Values.iatp.sts.oauth.client.secret_alias is required" | quote}} + {{- if .Values.iatp.sts.dim.url }} - name: "TX_EDC_IAM_STS_DIM_URL" - value: {{ .Values.iatp.sts.dim.url | required ".Values.iatp.sts.dim.url is required" | quote}} + value: {{ .Values.iatp.sts.dim.url | quote}} + {{- end}} {{- range $index, $issuer := .Values.iatp.trustedIssuers }} - name: "EDC_IAM_TRUSTED-ISSUER_{{$index}}-ISSUER_ID" diff --git a/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml b/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml index 298d66c0e..c3e80a029 100644 --- a/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml @@ -219,8 +219,11 @@ spec: value: {{ .Values.iatp.sts.oauth.client.id | required ".Values.iatp.sts.oauth.client.id is required" | quote}} - name: "EDC_IAM_STS_OAUTH_CLIENT_SECRET_ALIAS" value: {{ .Values.iatp.sts.oauth.client.secret_alias | required ".Values.iatp.sts.oauth.client.secret_alias is required" | quote}} + + {{- if .Values.iatp.sts.dim.url }} - name: "TX_EDC_IAM_STS_DIM_URL" - value: {{ .Values.iatp.sts.dim.url | required ".Values.iatp.sts.dim.url is required" | quote}} + value: {{ .Values.iatp.sts.dim.url | quote}} + {{- end}} ################ ## POSTGRESQL ## diff --git a/charts/tractusx-connector-azure-vault/templates/ingress-controlplane.yaml b/charts/tractusx-connector-azure-vault/templates/ingress-controlplane.yaml index 0be9a53a8..8957cbf4c 100644 --- a/charts/tractusx-connector-azure-vault/templates/ingress-controlplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/ingress-controlplane.yaml @@ -20,7 +20,6 @@ {{- $fullName := include "txdc.fullname" . }} {{- $controlLabels := include "txdc.controlplane.labels" . }} {{- $controlEdcEndpoints := .Values.controlplane.endpoints }} -{{- $gitVersion := .Capabilities.KubeVersion.GitVersion }} {{- $namespace := .Release.Namespace }} {{- range .Values.controlplane.ingresses }} @@ -28,13 +27,7 @@ {{- $controlIngressName := printf "%s-controlplane-%s" $fullName .hostname }} {{- $annotations := .annotations | default dict }} --- -{{- if semverCompare ">=1.19-0" $gitVersion }} apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" $gitVersion }} -apiVersion: networking.k8s.io/v1beta1 -{{- else }} -apiVersion: extensions/v1beta1 -{{- end }} kind: Ingress metadata: name: {{ $controlIngressName }} @@ -42,11 +35,6 @@ metadata: labels: {{- $controlLabels | nindent 4 }} annotations: - {{- if and .className (not (semverCompare ">=1.18-0" $gitVersion)) }} - {{- if not (hasKey $annotations "kubernetes.io/ingress.class") }} - {{- $_ := set $annotations "kubernetes.io/ingress.class" .className}} - {{- end }} - {{- end }} {{- if .certManager }} {{- if .certManager.issuer }} {{- $_ := set $annotations "cert-manager.io/issuer" .certManager.issuer}} @@ -59,7 +47,7 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if and .className (semverCompare ">=1.18-0" $gitVersion) }} + {{- if .className }} ingressClassName: {{ .className }} {{- end }} {{- if .hostname }} @@ -83,13 +71,10 @@ spec: - path: {{ $mapping.path }} pathType: Prefix backend: - {{- if semverCompare ">=1.19-0" $gitVersion }} service: name: {{ $fullName }}-controlplane port: number: {{ $mapping.port }} - {{- else }} - {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/tractusx-connector-azure-vault/templates/ingress-dataplane.yaml b/charts/tractusx-connector-azure-vault/templates/ingress-dataplane.yaml index c59084455..b46c30285 100644 --- a/charts/tractusx-connector-azure-vault/templates/ingress-dataplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/ingress-dataplane.yaml @@ -20,7 +20,6 @@ {{- $fullName := include "txdc.fullname" . }} {{- $dataLabels := include "txdc.dataplane.labels" . }} {{- $dataEdcEndpoints := .Values.dataplane.endpoints }} -{{- $gitVersion := .Capabilities.KubeVersion.GitVersion }} {{- $namespace := .Release.Namespace }} {{- range .Values.dataplane.ingresses }} @@ -28,13 +27,7 @@ {{- $dataIngressName := printf "%s-dataplane-%s" $fullName .hostname }} {{- $annotations := .annotations | default dict }} --- -{{- if semverCompare ">=1.19-0" $gitVersion }} apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" $gitVersion }} -apiVersion: networking.k8s.io/v1beta1 -{{- else }} -apiVersion: extensions/v1beta1 -{{- end }} kind: Ingress metadata: name: {{ $dataIngressName }} @@ -42,11 +35,6 @@ metadata: labels: {{- $dataLabels | nindent 4 }} annotations: - {{- if and .className (not (semverCompare ">=1.18-0" $gitVersion)) }} - {{- if not (hasKey $annotations "kubernetes.io/ingress.class") }} - {{- $_ := set $annotations "kubernetes.io/ingress.class" .className}} - {{- end }} - {{- end }} {{- if .certManager }} {{- if .certManager.issuer }} {{- $_ := set $annotations "cert-manager.io/issuer" .certManager.issuer}} @@ -59,7 +47,7 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if and .className (semverCompare ">=1.18-0" $gitVersion) }} + {{- if .className }} ingressClassName: {{ .className }} {{- end }} {{- if .hostname }} @@ -83,13 +71,10 @@ spec: - path: {{ $mapping.path }} pathType: Prefix backend: - {{- if semverCompare ">=1.19-0" $gitVersion }} service: name: {{ $fullName }}-dataplane port: number: {{ $mapping.port }} - {{- else }} - {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/tractusx-connector-azure-vault/templates/tests/test-controlplane.yaml b/charts/tractusx-connector-azure-vault/templates/tests/test-controlplane.yaml index 33b188764..93bcf2a6c 100644 --- a/charts/tractusx-connector-azure-vault/templates/tests/test-controlplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/tests/test-controlplane.yaml @@ -45,7 +45,7 @@ spec: "@id": "tx:BPN000001234", "tx:groups": ["group1", "group2", "group3"] }' ] - args: [ '{{- printf "http://%s-controlplane:%v%s/business-partner-groups" (include "txdc.fullname" $ ) $.Values.controlplane.endpoints.management.port $.Values.controlplane.endpoints.management.path -}}' ] + args: [ '{{- printf "http://%s-controlplane:%v%s/v3/business-partner-groups" (include "txdc.fullname" $ ) $.Values.controlplane.endpoints.management.port $.Values.controlplane.endpoints.management.path -}}' ] restartPolicy: Never securityContext: fsGroup: 101 # curl_group diff --git a/charts/tractusx-connector-azure-vault/values.yaml b/charts/tractusx-connector-azure-vault/values.yaml index 2bef692b0..a5f538ea3 100644 --- a/charts/tractusx-connector-azure-vault/values.yaml +++ b/charts/tractusx-connector-azure-vault/values.yaml @@ -122,6 +122,8 @@ controlplane: path: /management # -- authentication key, must be attached to each request as `X-Api-Key` header authKey: "password" + # -- if the JWKS url is set, the DelegatedAuth service will be engaged + jwksUrl: # -- control api, used for internal control calls. can be added to the internal ingress, but should probably not control: # -- port for incoming api calls @@ -146,6 +148,8 @@ controlplane: port: 8085 # -- path for incoming catalog cache query requests path: /catalog + # -- authentication key, must be attached to each request as `X-Api-Key` header + authKey: "password" bdrs: # -- Time that a cached BPN/DID resolution map is valid in seconds, default is 600 seconds (10 min) diff --git a/charts/tractusx-connector-memory/Chart.yaml b/charts/tractusx-connector-memory/Chart.yaml index 08adb2a2f..2ee681d5a 100644 --- a/charts/tractusx-connector-memory/Chart.yaml +++ b/charts/tractusx-connector-memory/Chart.yaml @@ -35,12 +35,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.8.0-rc1 +version: 0.8.0-rc2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.8.0-rc1" +appVersion: "0.8.0-rc2" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector-memory sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector-memory diff --git a/charts/tractusx-connector-memory/README.md b/charts/tractusx-connector-memory/README.md index 706808a52..fc14ae90f 100644 --- a/charts/tractusx-connector-memory/README.md +++ b/charts/tractusx-connector-memory/README.md @@ -1,6 +1,6 @@ # tractusx-connector-memory -![Version: 0.8.0-rc1](https://img.shields.io/badge/Version-0.8.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc1](https://img.shields.io/badge/AppVersion-0.8.0--rc1-informational?style=flat-square) +![Version: 0.8.0-rc2](https://img.shields.io/badge/Version-0.8.0--rc2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc2](https://img.shields.io/badge/AppVersion-0.8.0--rc2-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector based on memory. Please only use this for development or testing purposes, never in production workloads! @@ -41,7 +41,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector-memory --version 0.8.0-rc1 \ +helm install my-release tractusx-edc/tractusx-connector-memory --version 0.8.0-rc2 \ -f /tractusx-connector-memory-test.yaml \ --set vault.secrets="client-secret:$YOUR_CLIENT_SECRET" ``` @@ -83,7 +83,8 @@ helm install my-release tractusx-edc/tractusx-connector-memory --version 0.8.0-r | runtime.debug.enabled | bool | `false` | Enables java debugging mode. | | runtime.debug.port | int | `1044` | Port where the debuggee can connect to. | | runtime.debug.suspendOnStart | bool | `false` | Defines if the JVM should wait with starting the application until someone connected to the debugging port. | -| runtime.endpoints | object | `{"catalog":{"path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"protocol":{"path":"/api/v1/dsp","port":8084},"proxy":{"authKey":"password","path":"/proxy","port":8186},"public":{"path":"/api/public","port":8086}}` | endpoints of the controlplane | +| runtime.endpoints | object | `{"catalog":{"authKey":"password","path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","jwksUrl":null,"path":"/management","port":8081},"protocol":{"path":"/api/v1/dsp","port":8084},"proxy":{"authKey":"password","path":"/proxy","port":8186},"public":{"path":"/api/public","port":8086}}` | endpoints of the controlplane | +| runtime.endpoints.catalog.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | | runtime.endpoints.catalog.path | string | `"/catalog"` | path for incoming catalog cache query requests | | runtime.endpoints.catalog.port | int | `8085` | port for incoming catalog cache query requests | | runtime.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | @@ -92,8 +93,9 @@ helm install my-release tractusx-edc/tractusx-connector-memory --version 0.8.0-r | runtime.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | runtime.endpoints.default.path | string | `"/api"` | path for incoming api calls | | runtime.endpoints.default.port | int | `8080` | port for incoming api calls | -| runtime.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| runtime.endpoints.management | object | `{"authKey":"password","jwksUrl":null,"path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | | runtime.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | +| runtime.endpoints.management.jwksUrl | string | `nil` | if the JWKS url is set, the DelegatedAuth service will be engaged | | runtime.endpoints.management.path | string | `"/management"` | path for incoming api calls | | runtime.endpoints.management.port | int | `8081` | port for incoming api calls | | runtime.endpoints.protocol | object | `{"path":"/api/v1/dsp","port":8084}` | dsp api, used for inter connector communication and must be internet facing | diff --git a/charts/tractusx-connector-memory/templates/deployment-runtime.yaml b/charts/tractusx-connector-memory/templates/deployment-runtime.yaml index 806c3c503..439f865e1 100644 --- a/charts/tractusx-connector-memory/templates/deployment-runtime.yaml +++ b/charts/tractusx-connector-memory/templates/deployment-runtime.yaml @@ -152,8 +152,14 @@ spec: ####### # API # ####### + {{- if .Values.runtime.endpoints.management.jwksUrl }} + - name: "EDC_API_AUTH_DAC_KEY_URL" + value: {{ .Values.runtime.endpoints.management.jwksUrl | quote}} + {{- else }} - name: "EDC_API_AUTH_KEY" - value: {{ .Values.runtime.endpoints.management.authKey | required ".Values.runtime.endpoints.management.authKey is required" | quote }} + value: {{ .Values.runtime.endpoints.management.authKey | required ".Values.controlplane.endpoints.management.authKey is required" | quote }} + {{- end }} + - name: "TX_EDC_DPF_CONSUMER_PROXY_AUTH_APIKEY" value: {{ .Values.runtime.endpoints.proxy.authKey | required ".Values.runtime.endpoints.proxy.authKey is required" | quote }} - name: "WEB_HTTP_DEFAULT_PORT" @@ -191,6 +197,10 @@ spec: value: {{ .Values.runtime.endpoints.catalog.port | quote }} - name: "WEB_HTTP_CATALOG_PATH" value: {{ .Values.runtime.endpoints.catalog.path | quote }} + - name: "WEB_HTTP_CATALOG_AUTH_TYPE" + value: "tokenbased" + - name: "WEB_HTTP_CATALOG_AUTH_KEY" + value: {{ .Values.runtime.endpoints.catalog.authKey | required ".Values.runtime.endpoints.catalog.authKey is required" | quote }} ######### ## DSP ## @@ -212,8 +222,11 @@ spec: value: {{ .Values.iatp.sts.oauth.client.id | required ".Values.iatp.sts.oauth.client.id is required" | quote}} - name: "EDC_IAM_STS_OAUTH_CLIENT_SECRET_ALIAS" value: {{ .Values.iatp.sts.oauth.client.secret_alias | required ".Values.iatp.sts.oauth.client.secret_alias is required" | quote}} + + {{- if .Values.iatp.sts.dim.url }} - name: "TX_EDC_IAM_STS_DIM_URL" - value: {{ .Values.iatp.sts.dim.url | required ".Values.iatp.sts.dim.url is required" | quote}} + value: {{ .Values.iatp.sts.dim.url | quote}} + {{- end}} {{- range $index, $issuer := .Values.iatp.trustedIssuers }} - name: "EDC_IAM_TRUSTED-ISSUER_{{$index}}-ISSUER_ID" diff --git a/charts/tractusx-connector-memory/templates/ingress-runtime.yaml b/charts/tractusx-connector-memory/templates/ingress-runtime.yaml index 211f78685..6b3ed68a1 100644 --- a/charts/tractusx-connector-memory/templates/ingress-runtime.yaml +++ b/charts/tractusx-connector-memory/templates/ingress-runtime.yaml @@ -24,7 +24,6 @@ {{- $fullName := include "txdc.fullname" . }} {{- $controlLabels := include "txdc.runtime.labels" . }} {{- $controlEdcEndpoints := .Values.runtime.endpoints }} -{{- $gitVersion := .Capabilities.KubeVersion.GitVersion }} {{- $namespace := .Release.Namespace }} {{- range .Values.runtime.ingresses }} @@ -32,13 +31,7 @@ {{- $controlIngressName := printf "%s-runtime-%s" $fullName .hostname }} {{- $annotations := .annotations | default dict }} --- -{{- if semverCompare ">=1.19-0" $gitVersion }} apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" $gitVersion }} -apiVersion: networking.k8s.io/v1beta1 -{{- else }} -apiVersion: extensions/v1beta1 -{{- end }} kind: Ingress metadata: name: {{ $controlIngressName }} @@ -46,11 +39,6 @@ metadata: labels: {{- $controlLabels | nindent 4 }} annotations: - {{- if and .className (not (semverCompare ">=1.18-0" $gitVersion)) }} - {{- if not (hasKey $annotations "kubernetes.io/ingress.class") }} - {{- $_ := set $annotations "kubernetes.io/ingress.class" .className}} - {{- end }} - {{- end }} {{- if .certManager }} {{- if .certManager.issuer }} {{- $_ := set $annotations "cert-manager.io/issuer" .certManager.issuer}} @@ -63,7 +51,7 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if and .className (semverCompare ">=1.18-0" $gitVersion) }} + {{- if .className }} ingressClassName: {{ .className }} {{- end }} {{- if .hostname }} @@ -87,13 +75,10 @@ spec: - path: {{ $mapping.path }} pathType: Prefix backend: - {{- if semverCompare ">=1.19-0" $gitVersion }} service: name: {{ $fullName }}-runtime port: number: {{ $mapping.port }} - {{- else }} - {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/tractusx-connector-memory/templates/tests/test-runtime.yaml b/charts/tractusx-connector-memory/templates/tests/test-runtime.yaml index 97892c0c8..8c20d07ac 100644 --- a/charts/tractusx-connector-memory/templates/tests/test-runtime.yaml +++ b/charts/tractusx-connector-memory/templates/tests/test-runtime.yaml @@ -46,7 +46,7 @@ spec: "@id": "tx:BPN000001234", "tx:groups": ["group1", "group2", "group3"] }' ] - args: [ '{{- printf "http://%s-runtime:%v%s/business-partner-groups" (include "txdc.fullname" $ ) $.Values.runtime.endpoints.management.port $.Values.runtime.endpoints.management.path -}}' ] + args: [ '{{- printf "http://%s-runtime:%v%s/v3/business-partner-groups" (include "txdc.fullname" $ ) $.Values.runtime.endpoints.management.port $.Values.runtime.endpoints.management.path -}}' ] restartPolicy: Never securityContext: fsGroup: 101 # curl_group diff --git a/charts/tractusx-connector-memory/values.yaml b/charts/tractusx-connector-memory/values.yaml index 595db2cb1..27360fc3d 100644 --- a/charts/tractusx-connector-memory/values.yaml +++ b/charts/tractusx-connector-memory/values.yaml @@ -117,6 +117,8 @@ runtime: path: /management # -- authentication key, must be attached to each request as `X-Api-Key` header authKey: "password" + # -- if the JWKS url is set, the DelegatedAuth service will be engaged + jwksUrl: # -- control api, used for internal control calls. can be added to the internal ingress, but should probably not control: # -- port for incoming api calls @@ -149,6 +151,8 @@ runtime: port: 8085 # -- path for incoming catalog cache query requests path: /catalog + # -- authentication key, must be attached to each request as `X-Api-Key` header + authKey: "password" token: refresh: diff --git a/charts/tractusx-connector/Chart.yaml b/charts/tractusx-connector/Chart.yaml index ea15cb902..d6186ef2a 100644 --- a/charts/tractusx-connector/Chart.yaml +++ b/charts/tractusx-connector/Chart.yaml @@ -41,12 +41,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.8.0-rc1 +version: 0.8.0-rc2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.8.0-rc1" +appVersion: "0.8.0-rc2" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector diff --git a/charts/tractusx-connector/README.md b/charts/tractusx-connector/README.md index 03384726f..01e6ef66e 100644 --- a/charts/tractusx-connector/README.md +++ b/charts/tractusx-connector/README.md @@ -1,6 +1,6 @@ # tractusx-connector -![Version: 0.8.0-rc1](https://img.shields.io/badge/Version-0.8.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc1](https://img.shields.io/badge/AppVersion-0.8.0--rc1-informational?style=flat-square) +![Version: 0.8.0-rc2](https://img.shields.io/badge/Version-0.8.0--rc2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.8.0-rc2](https://img.shields.io/badge/AppVersion-0.8.0--rc2-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector. The connector deployment consists of two runtime consists of a Control Plane and a Data Plane. Note that _no_ external dependencies such as a PostgreSQL database and HashiCorp Vault are included. @@ -44,7 +44,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector --version 0.8.0-rc1 \ +helm install my-release tractusx-edc/tractusx-connector --version 0.8.0-rc2 \ -f /tractusx-connector-test.yaml ``` @@ -80,7 +80,8 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.8.0-rc1 \ | controlplane.debug.enabled | bool | `false` | Enables java debugging mode. | | controlplane.debug.port | int | `1044` | Port where the debuggee can connect to. | | controlplane.debug.suspendOnStart | bool | `false` | Defines if the JVM should wait with starting the application until someone connected to the debugging port. | -| controlplane.endpoints | object | `{"catalog":{"path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints | object | `{"catalog":{"authKey":"password","path":"/catalog","port":8085},"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","jwksUrl":null,"path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints.catalog.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | | controlplane.endpoints.catalog.path | string | `"/catalog"` | path for incoming catalog cache query requests | | controlplane.endpoints.catalog.port | int | `8085` | port for incoming catalog cache query requests | | controlplane.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | @@ -89,8 +90,9 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.8.0-rc1 \ | controlplane.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | controlplane.endpoints.default.path | string | `"/api"` | path for incoming api calls | | controlplane.endpoints.default.port | int | `8080` | port for incoming api calls | -| controlplane.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| controlplane.endpoints.management | object | `{"authKey":"password","jwksUrl":null,"path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | | controlplane.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each request as `X-Api-Key` header | +| controlplane.endpoints.management.jwksUrl | string | `nil` | if the JWKS url is set, the DelegatedAuth service will be engaged | | controlplane.endpoints.management.path | string | `"/management"` | path for incoming api calls | | controlplane.endpoints.management.port | int | `8081` | port for incoming api calls | | controlplane.endpoints.metrics | object | `{"path":"/metrics","port":9090}` | metrics api, used for application metrics, must not be internet facing | diff --git a/charts/tractusx-connector/templates/deployment-controlplane.yaml b/charts/tractusx-connector/templates/deployment-controlplane.yaml index 90ebc5a64..ffa3c69a3 100644 --- a/charts/tractusx-connector/templates/deployment-controlplane.yaml +++ b/charts/tractusx-connector/templates/deployment-controlplane.yaml @@ -152,8 +152,14 @@ spec: ####### # API # ####### + {{- if .Values.controlplane.endpoints.management.jwksUrl }} + - name: "EDC_API_AUTH_DAC_KEY_URL" + value: {{ .Values.controlplane.endpoints.management.jwksUrl | quote}} + {{- else }} - name: "EDC_API_AUTH_KEY" value: {{ .Values.controlplane.endpoints.management.authKey | required ".Values.controlplane.endpoints.management.authKey is required" | quote }} + {{- end }} + - name: "WEB_HTTP_DEFAULT_PORT" value: {{ .Values.controlplane.endpoints.default.port | quote }} - name: "WEB_HTTP_DEFAULT_PATH" @@ -176,6 +182,11 @@ spec: value: {{ .Values.controlplane.endpoints.catalog.port | quote }} - name: "WEB_HTTP_CATALOG_PATH" value: {{ .Values.controlplane.endpoints.catalog.path | quote }} + - name: "WEB_HTTP_CATALOG_AUTH_TYPE" + value: "tokenbased" + - name: "WEB_HTTP_CATALOG_AUTH_KEY" + value: {{ .Values.controlplane.endpoints.catalog.authKey | required ".Values.controlplane.endpoints.catalog.authKey is required" | quote }} + ######### ## DSP ## @@ -273,7 +284,28 @@ spec: - name: "EDC_DATASOURCE_EDR_URL" value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} - ############################# + # see extension https://github.com/eclipse-edc/FederatedCatalog/tree/main/extensions/store/sql/federated-catalog-cache-sql + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_NAME" + value: "federatedcatalog" + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_USER" + value: {{ .Values.postgresql.auth.username | required ".Values.postgresql.auth.username is required" | quote }} + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_PASSWORD" + value: {{ .Values.postgresql.auth.password | required ".Values.postgresql.auth.password is required" | quote }} + - name: "EDC_DATASOURCE_FEDERATEDCATALOG_URL" + value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} + + # see extension https://github.com/eclipse-edc/Connector/tree/main/extensions/data-plane-selector/store/sql/data-plane-instance-store-sql + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_NAME" + value: "dataplaneinstance" + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_USER" + value: {{ .Values.postgresql.auth.username | required ".Values.postgresql.auth.username is required" | quote }} + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_PASSWORD" + value: {{ .Values.postgresql.auth.password | required ".Values.postgresql.auth.password is required" | quote }} + - name: "EDC_DATASOURCE_DATAPLANEINSTANCE_URL" + value: {{ tpl .Values.postgresql.jdbcUrl . | quote }} + + + ############################# ## IATP / STS / DIM CONFIG ## ############################# - name: "EDC_IAM_STS_OAUTH_TOKEN_URL" @@ -282,8 +314,10 @@ spec: value: {{ .Values.iatp.sts.oauth.client.id | required ".Values.iatp.sts.oauth.client.id is required" | quote}} - name: "EDC_IAM_STS_OAUTH_CLIENT_SECRET_ALIAS" value: {{ .Values.iatp.sts.oauth.client.secret_alias | required ".Values.iatp.sts.oauth.client.secret_alias is required" | quote}} + {{- if .Values.iatp.sts.dim.url }} - name: "TX_EDC_IAM_STS_DIM_URL" - value: {{ .Values.iatp.sts.dim.url | required ".Values.iatp.sts.dim.url is required" | quote}} + value: {{ .Values.iatp.sts.dim.url | quote}} + {{- end }} {{- range $index, $issuer := .Values.iatp.trustedIssuers }} - name: "EDC_IAM_TRUSTED-ISSUER_{{$index}}-ISSUER_ID" diff --git a/charts/tractusx-connector/templates/deployment-dataplane.yaml b/charts/tractusx-connector/templates/deployment-dataplane.yaml index d84c9fc83..afd3deb13 100644 --- a/charts/tractusx-connector/templates/deployment-dataplane.yaml +++ b/charts/tractusx-connector/templates/deployment-dataplane.yaml @@ -215,8 +215,10 @@ spec: value: {{ .Values.iatp.sts.oauth.client.id | required ".Values.iatp.sts.oauth.client.id is required" | quote}} - name: "EDC_IAM_STS_OAUTH_CLIENT_SECRET_ALIAS" value: {{ .Values.iatp.sts.oauth.client.secret_alias | required ".Values.iatp.sts.oauth.client.secret_alias is required" | quote}} + {{- if .Values.iatp.sts.dim.url }} - name: "TX_EDC_IAM_STS_DIM_URL" - value: {{ .Values.iatp.sts.dim.url | required ".Values.iatp.sts.dim.url is required" | quote}} + value: {{ .Values.iatp.sts.dim.url | quote}} + {{- end }} ################ ## POSTGRESQL ## diff --git a/charts/tractusx-connector/templates/ingress-controlplane.yaml b/charts/tractusx-connector/templates/ingress-controlplane.yaml index 292ba233e..624eac3cd 100644 --- a/charts/tractusx-connector/templates/ingress-controlplane.yaml +++ b/charts/tractusx-connector/templates/ingress-controlplane.yaml @@ -24,7 +24,6 @@ {{- $fullName := include "txdc.fullname" . }} {{- $controlLabels := include "txdc.controlplane.labels" . }} {{- $controlEdcEndpoints := .Values.controlplane.endpoints }} -{{- $gitVersion := .Capabilities.KubeVersion.GitVersion }} {{- $namespace := .Release.Namespace }} {{- range .Values.controlplane.ingresses }} @@ -32,13 +31,7 @@ {{- $controlIngressName := printf "%s-controlplane-%s" $fullName .hostname }} {{- $annotations := .annotations | default dict }} --- -{{- if semverCompare ">=1.19-0" $gitVersion }} apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" $gitVersion }} -apiVersion: networking.k8s.io/v1beta1 -{{- else }} -apiVersion: extensions/v1beta1 -{{- end }} kind: Ingress metadata: name: {{ $controlIngressName }} @@ -46,11 +39,6 @@ metadata: labels: {{- $controlLabels | nindent 4 }} annotations: - {{- if and .className (not (semverCompare ">=1.18-0" $gitVersion)) }} - {{- if not (hasKey $annotations "kubernetes.io/ingress.class") }} - {{- $_ := set $annotations "kubernetes.io/ingress.class" .className}} - {{- end }} - {{- end }} {{- if .certManager }} {{- if .certManager.issuer }} {{- $_ := set $annotations "cert-manager.io/issuer" .certManager.issuer}} @@ -63,7 +51,7 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if and .className (semverCompare ">=1.18-0" $gitVersion) }} + {{- if .className }} ingressClassName: {{ .className }} {{- end }} {{- if .hostname }} @@ -87,13 +75,10 @@ spec: - path: {{ $mapping.path }} pathType: Prefix backend: - {{- if semverCompare ">=1.19-0" $gitVersion }} service: name: {{ $fullName }}-controlplane port: number: {{ $mapping.port }} - {{- else }} - {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/tractusx-connector/templates/ingress-dataplane.yaml b/charts/tractusx-connector/templates/ingress-dataplane.yaml index 84df3ffea..9d5653f94 100644 --- a/charts/tractusx-connector/templates/ingress-dataplane.yaml +++ b/charts/tractusx-connector/templates/ingress-dataplane.yaml @@ -24,7 +24,6 @@ {{- $fullName := include "txdc.fullname" . }} {{- $dataLabels := include "txdc.dataplane.labels" . }} {{- $dataEdcEndpoints := .Values.dataplane.endpoints }} -{{- $gitVersion := .Capabilities.KubeVersion.GitVersion }} {{- $namespace := .Release.Namespace }} {{- range .Values.dataplane.ingresses }} @@ -32,13 +31,7 @@ {{- $dataIngressName := printf "%s-dataplane-%s" $fullName .hostname }} {{- $annotations := .annotations | default dict }} --- -{{- if semverCompare ">=1.19-0" $gitVersion }} apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" $gitVersion }} -apiVersion: networking.k8s.io/v1beta1 -{{- else }} -apiVersion: extensions/v1beta1 -{{- end }} kind: Ingress metadata: name: {{ $dataIngressName }} @@ -46,11 +39,6 @@ metadata: labels: {{- $dataLabels | nindent 4 }} annotations: - {{- if and .className (not (semverCompare ">=1.18-0" $gitVersion)) }} - {{- if not (hasKey $annotations "kubernetes.io/ingress.class") }} - {{- $_ := set $annotations "kubernetes.io/ingress.class" .className}} - {{- end }} - {{- end }} {{- if .certManager }} {{- if .certManager.issuer }} {{- $_ := set $annotations "cert-manager.io/issuer" .certManager.issuer}} @@ -63,7 +51,7 @@ metadata: {{- toYaml . | nindent 4 }} {{- end }} spec: - {{- if and .className (semverCompare ">=1.18-0" $gitVersion) }} + {{- if .className }} ingressClassName: {{ .className }} {{- end }} {{- if .hostname }} @@ -87,13 +75,10 @@ spec: - path: {{ $mapping.path }} pathType: Prefix backend: - {{- if semverCompare ">=1.19-0" $gitVersion }} service: name: {{ $fullName }}-dataplane port: number: {{ $mapping.port }} - {{- else }} - {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/tractusx-connector/templates/tests/test-controlplane.yaml b/charts/tractusx-connector/templates/tests/test-mgmt-api-with-token-auth.yaml similarity index 88% rename from charts/tractusx-connector/templates/tests/test-controlplane.yaml rename to charts/tractusx-connector/templates/tests/test-mgmt-api-with-token-auth.yaml index 796b94fa2..7ee31cd9c 100644 --- a/charts/tractusx-connector/templates/tests/test-controlplane.yaml +++ b/charts/tractusx-connector/templates/tests/test-mgmt-api-with-token-auth.yaml @@ -21,7 +21,7 @@ apiVersion: v1 kind: Pod metadata: - name: "{{include "txdc.fullname" .}}-test-controlplane" + name: "controlplane-with-token-auth-test" labels: {{- include "txdc.controlplane.labels" . | nindent 4 }} annotations: @@ -45,7 +45,7 @@ spec: "@id": "tx:BPN000001234", "tx:groups": ["group1", "group2", "group3"] }' ] - args: [ '{{- printf "http://%s-controlplane:%v%s/business-partner-groups" (include "txdc.fullname" $ ) $.Values.controlplane.endpoints.management.port $.Values.controlplane.endpoints.management.path -}}' ] + args: [ '{{- printf "http://%s-controlplane:%v%s/v3/business-partner-groups" (include "txdc.fullname" $ ) $.Values.controlplane.endpoints.management.port $.Values.controlplane.endpoints.management.path -}}' ] restartPolicy: Never securityContext: fsGroup: 101 # curl_group diff --git a/charts/tractusx-connector/values.yaml b/charts/tractusx-connector/values.yaml index 4b1e702f6..2706434a0 100644 --- a/charts/tractusx-connector/values.yaml +++ b/charts/tractusx-connector/values.yaml @@ -124,6 +124,9 @@ controlplane: path: /management # -- authentication key, must be attached to each request as `X-Api-Key` header authKey: "password" + # -- if the JWKS url is set, the DelegatedAuth service will be engaged + jwksUrl: + # -- control api, used for internal control calls. can be added to the internal ingress, but should probably not control: # -- port for incoming api calls @@ -147,6 +150,8 @@ controlplane: port: 8085 # -- path for incoming catalog cache query requests path: /catalog + # -- authentication key, must be attached to each request as `X-Api-Key` header + authKey: "password" bdrs: # -- Time that a cached BPN/DID resolution map is valid in seconds, default is 600 seconds (10 min) diff --git a/docs/development/decision-records/2024-07-18-Improvements-versioning-scheme/README.md b/docs/development/decision-records/2024-07-18-Improvements-versioning-scheme/README.md new file mode 100644 index 000000000..8f8dd4db4 --- /dev/null +++ b/docs/development/decision-records/2024-07-18-Improvements-versioning-scheme/README.md @@ -0,0 +1,66 @@ +# Improvements to the Tractus-X EDC versioning scheme + +## Decision + +Starting with `0.8.x`, Tractus-X EDC will publish an official release roughly every 12 weeks (once per quarter). +Bugfixes will be provided as "pure bugfixes". That means, that a bugfix version is created off of the previous release +version, and contains _only_ the bugfix and nothing else. For example, a bugfix `0.8.2` would branch off of `0.8.1` +rather than `main`. + +Further, Tractus-X EDC will provide more frequent intermediate builds. + +## Rationale + +Tractus-X adopted a quarterly release cadence, so we need to align with that, because Tractus-X EDC versions should be +supported (= bugfixed) for that time. +Up until now, Tractus-X EDC bugfixes were created off of the `main` branch, which means that not only the fix, but also +potentially new features were included in that version. This new scheme keeps bugfixes clean and provides a higher level +of backwards compatibility. + +## Approach + +In our release workflow we need to be able to distinguish between a "release" and a "bugfix", because the latter would +branch off of - and merge back into - a branch other than `main`, i.e. the bugfix branch. In addition, the version +bumping logic must be adapted. + +### Backporting fixes + +There are several distinct scenarios that can arise when a bugfix becomes necessary: + +1. Cherry-picking: the fix is implemented on the `main` branch, and the relevant commit can be cherry-picked into + the bugfix branch. +2. Re-implementing: the fix is implemented on the `main` branch, but has to be manually backported into the bugfix + branch. This can happen if the `main` branch has changed enough since the last release that cherry-picking is + not possible. +3. Fix-only: the bug does not occur on `main`, thus needs to be implemented on the bugfix branch only. +4. Upstream fix required: in cases where the fix must be implemented in the upstream EDC project, Tractus-X EDC must + request that an upstream bugfix version be released. This upstream bugfix can then be incorporated into the Tractus-X + EDC bugfix version. + +### Release cadence + +The cadence of official releases will be lengthened from [6-8 weeks](../2024-04-11_txedc_release_train) to 12 weeks ( +quarterly). This is to keep in step with the overall Tractus-X release cadence. + +### Version maintenance + +As before, Tractus-X EDC will _only_ maintain the latest version. For example, if version `0.8.0` is the latest +official release, bugfixes will only be supplied for that version, i.e. `0.8.1`, `0.8.2` and so forth. Earlier versions +will **not** be maintained. + +Additionally, maintenance will be done exclusively for critical functional or security flaws if no other remedy is +available. No features will be backported. The classification and triage of such flaws remains at the discretion of the +Tractus-X EDC team. + +### Use of release candidates and intermediate builds + +In order to shorten the feedback loop with downstream projects, Tractus-X EDC will publish intermediate builds and +release candidates between official releases. Intermediate builds are technically snapshots and are published +regularly (for example "nightly", "weekly", etc), release candidates are stable releases and are published irregularly +and less frequently. + +- Intermediate builds are denominated `--SNAPSHOT`, for example `0.8.0-20240718-SNAPSHOT` +- release candidates would be named `-rcX`, for example `0.8.0-rc2` + +> _NB: intermediate builds don't include dedicated Helm charts, but they do include Maven artefacts and +Docker images. Release candidates also include Helm charts._ \ No newline at end of file diff --git a/docs/usage/management-api-walkthrough/02_policies.md b/docs/usage/management-api-walkthrough/02_policies.md index 106488721..c3cbb0871 100644 --- a/docs/usage/management-api-walkthrough/02_policies.md +++ b/docs/usage/management-api-walkthrough/02_policies.md @@ -28,7 +28,7 @@ impacting policy definitions. Policies can be created in the EDC as follows: ```http request -POST /v2/policydefinitions HTTP/1.1 +POST /v3/policydefinitions HTTP/1.1 Host: https://provider-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -492,4 +492,4 @@ example could have also used `Policy` type instead of `Set` type (**as they are - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/03_contractdefinitions.md b/docs/usage/management-api-walkthrough/03_contractdefinitions.md index d52669520..6853047e1 100644 --- a/docs/usage/management-api-walkthrough/03_contractdefinitions.md +++ b/docs/usage/management-api-walkthrough/03_contractdefinitions.md @@ -5,7 +5,7 @@ Policy. The two policies are both policies as explained [previously](02_policies stages of communication between Data Provider and Data Consumer. The creation request looks like this: ```http request -POST /v2/contractdefinitions HTTP/1.1 +POST /v3/contractdefinitions HTTP/1.1 Host: https://provider-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -85,8 +85,8 @@ The `edc:Criterion` mechanism is used as well in the provider-internal request-e part of the `edc:QuerySpec` objects that also allow pagination: - `POST /v3/assets/request` -- `POST /v2/policydefinitions/request` -- `POST /v2/contractdefinitions/request` +- `POST /v3/policydefinitions/request` +- `POST /v3/contractdefinitions/request` ## Side-Effects @@ -106,4 +106,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/04_catalog.md b/docs/usage/management-api-walkthrough/04_catalog.md index 470afd75d..35e741d8e 100644 --- a/docs/usage/management-api-walkthrough/04_catalog.md +++ b/docs/usage/management-api-walkthrough/04_catalog.md @@ -5,7 +5,7 @@ Consumer against their own Control Plane and triggers the retrieval of a catalog looks like this: ```http request -POST /v2/catalog/request HTTP/1.1 +POST /v3/catalog/request HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -173,7 +173,7 @@ policies included. - `dcat:hasPolicy` holds the Data Offer that is relevant for the Consumer. - `@id` is the identifier for the Data Offer. The EDC composes this id by concatenating three identifiers in base64-encoding. separated with `:` (colons). The format is `base64(contractDefinitionId):base64(assetId):base64(newUuidV4)`. The last - of three UUIDs changes with every request as every /v2/catalog/request call yields a new catalog with new Data Offers. + of three UUIDs changes with every request as every /v3/catalog/request call yields a new catalog with new Data Offers. - The `odrl:permission`, `odrl:prohibition` and `odrl:obligation` will hold the content of the contractPolicy configured in the [Contract Definition](03_contractdefinitions.md) the Contract Offer was derived from. @@ -183,4 +183,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/05_contractnegotiations.md b/docs/usage/management-api-walkthrough/05_contractnegotiations.md index 7a0239aa1..f311174e6 100644 --- a/docs/usage/management-api-walkthrough/05_contractnegotiations.md +++ b/docs/usage/management-api-walkthrough/05_contractnegotiations.md @@ -11,7 +11,7 @@ It includes To trigger the process, the Data Consumer POSTs against their own Control Plane. ```http request -POST /v2/contractnegotiations HTTP/1.1 +POST /v3/contractnegotiations HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -92,7 +92,7 @@ the `@id` property. ### Polling ```http request -GET /v2/contractnegotiation/773b8795-45f2-4c57-a020-dc04e639baf3 HTTP/1.1 +GET /v3/contractnegotiation/773b8795-45f2-4c57-a020-dc04e639baf3 HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -245,4 +245,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/06_transferprocesses.md b/docs/usage/management-api-walkthrough/06_transferprocesses.md index fff2bbafd..6d2c1784c 100644 --- a/docs/usage/management-api-walkthrough/06_transferprocesses.md +++ b/docs/usage/management-api-walkthrough/06_transferprocesses.md @@ -30,7 +30,7 @@ terminated/suspended or terminated by the policy monitor depending on the config To trigger this process, the Consumer app makes a request to its EDC's Control Plane: ```http request -POST /v2/transferprocesses HTTP/1.1 +POST /v3/transferprocesses HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -110,7 +110,7 @@ the Consumer Control Plane. How to handle EDRs consumption check [here](07_edrs. The state of a given Transfer Process can be requested like this: ```http request -GET /v2/transferprocesses/177aba51-52d7-44dc-beab-fd6151147024 HTTP/1.1 +GET /v3/transferprocesses/177aba51-52d7-44dc-beab-fd6151147024 HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -168,4 +168,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/07_edrs.md b/docs/usage/management-api-walkthrough/07_edrs.md index ee32a5bff..511a4bae2 100644 --- a/docs/usage/management-api-walkthrough/07_edrs.md +++ b/docs/usage/management-api-walkthrough/07_edrs.md @@ -31,7 +31,7 @@ Alternatively TractusX-EDC provides a single API to collapse those two processes Example of negotiating a contract for an asset with a framework agreement policy: ```http request -POST /v2/edrs HTTP/1.1 +POST /v3/edrs HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -123,7 +123,7 @@ The Consumer Control Plane can be queried for EDRs by the Here's an example of querying with `assetId`: ```http request -POST /v2/edrs/request HTTP/1.1 +POST /v3/edrs/request HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -148,7 +148,7 @@ Content-Type: application/json It returns a set of EDR entries holding meta-data including: - `transferProcessId`: The ID of the [Transfer Process](06_transferprocesses.md) that was implicitly initiated - by the POST `/v2/edrs` request. + by the POST `/v3/edrs` request. - `agreementId`: The ID of the agreement that the two EDCs have made in the [Contract Negotiation](05_contractnegotiations.md) phase of their EDR-interaction. - `providerId`: The ID of the provider. @@ -161,7 +161,7 @@ Finally, after first obtaining them from the Provider Control Plane and then locating in the Consumer Control Plane's cache, they can be retrieved using the `transferProcessId`. ```http request -GET /v2/edrs/myTransferProcessId/dataaddress HTTP/1.1 +GET /v3/edrs/myTransferProcessId/dataaddress HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -208,7 +208,7 @@ By using the same API described above and passing a query parameter `auto_refres will be done automatically if necessary transparently. ```http request -GET /v2/edrs/myTransferProcessId/dataaddress?auto_refresh=true HTTP/1.1 +GET /v3/edrs/myTransferProcessId/dataaddress?auto_refresh=true HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -221,7 +221,7 @@ In this way, always a valid token is returned. A explicit refresh API is available for users; ```http -POST /v2/edrs/myTransferProcessId/refresh HTTP/1.1 +POST /v3/edrs/myTransferProcessId/refresh HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -240,7 +240,7 @@ However, if needed this endpoint will delete the EDR entry associated with the ` from the vault. ```http request -DELETE /v2/edrs/myTransferProcessId HTTP/1.1 +DELETE /v3/edrs/myTransferProcessId HTTP/1.1 Host: https://consumer-control.plane/management X-Api-Key: password Content-Type: application/json @@ -325,4 +325,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/08_contractagreements.md b/docs/usage/management-api-walkthrough/08_contractagreements.md index 561ae6c05..f6caa32b8 100644 --- a/docs/usage/management-api-walkthrough/08_contractagreements.md +++ b/docs/usage/management-api-walkthrough/08_contractagreements.md @@ -5,7 +5,7 @@ endpoint (to be used with the previously explained `QuerySpec` object) but allow like this: ```http request -GET /v2/contractagreements/{{AGREEMENT_ID}} HTTP/1.1 +GET /v3/contractagreements/{{AGREEMENT_ID}} HTTP/1.1 Host: https://consumer-control.plane/api/management X-Api-Key: password Content-Type: application/json @@ -66,4 +66,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/docs/usage/management-api-walkthrough/README.md b/docs/usage/management-api-walkthrough/README.md index 5decb34e7..8eed76ab3 100644 --- a/docs/usage/management-api-walkthrough/README.md +++ b/docs/usage/management-api-walkthrough/README.md @@ -20,13 +20,13 @@ endpoints are currently versioned independently of each other. | Resource | Endpoint | Involved Actors | |----------------------------------------------------|--------------------------------------------|-------------------------------------------| | [Asset](01_assets.md) | `/v3/assets` | Provider Admin & Provider EDC | -| [Policy Definition](02_policies.md) | `/v2/policydefinitions` | Provider Admin & Provider EDC | -| [Contract Definition](03_contractdefinitions.md) | `/v2/contractdefinitions` | Provider Admin & Provider EDC | -| [Catalog](04_catalog.md) | `/v2/catalog` | Consumer App, Consumer EDC & Provider EDC | -| [Contract Negotiation](05_contractnegotiations.md) | `/v2/contractnegotiations` | Consumer App, Consumer EDC & Provider EDC | -| [Contract Agreement](08_contractagreements.md) | `/v2/contractagreements` | Provider Admin & Provider EDC | -| [Transfer Process](06_transferprocesses.md) | `/v2/transferprocesses` | Consumer App, Consumer EDC & Provider EDC | -| [EDR](07_edrs.md) | `/edrs` | Consumer App, Consumer EDC & Provider EDC | +| [Policy Definition](02_policies.md) | `/v3/policydefinitions` | Provider Admin & Provider EDC | +| [Contract Definition](03_contractdefinitions.md) | `/v3/contractdefinitions` | Provider Admin & Provider EDC | +| [Catalog](04_catalog.md) | `/v3/catalog` | Consumer App, Consumer EDC & Provider EDC | +| [Contract Negotiation](05_contractnegotiations.md) | `/v3/contractnegotiations` | Consumer App, Consumer EDC & Provider EDC | +| [Contract Agreement](08_contractagreements.md) | `/v3/contractagreements` | Provider Admin & Provider EDC | +| [Transfer Process](06_transferprocesses.md) | `/v3/transferprocesses` | Consumer App, Consumer EDC & Provider EDC | +| [EDR](07_edrs.md) | `/v3/edrs` | Consumer App, Consumer EDC & Provider EDC | | Data Plane | `` | Consumer App & Provider EDC | ## OpenAPI @@ -116,4 +116,4 @@ This work is licensed under the [CC-BY-4.0](https://creativecommons.org/licenses - SPDX-License-Identifier: CC-BY-4.0 - SPDX-FileCopyrightText: 2023 Contributors of the Eclipse Foundation -- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) \ No newline at end of file +- Source URL: [https://github.com/eclipse-tractusx/tractusx-edc](https://github.com/eclipse-tractusx/tractusx-edc) diff --git a/edc-controlplane/edc-controlplane-base/build.gradle.kts b/edc-controlplane/edc-controlplane-base/build.gradle.kts index b5a0074b9..62c9d388f 100644 --- a/edc-controlplane/edc-controlplane-base/build.gradle.kts +++ b/edc-controlplane/edc-controlplane-base/build.gradle.kts @@ -20,6 +20,7 @@ plugins { `java-library` + id(libs.plugins.swagger.get().pluginId) } dependencies { @@ -56,6 +57,8 @@ dependencies { runtimeOnly(libs.edc.core.policy.monitor) runtimeOnly(libs.edc.config.filesystem) runtimeOnly(libs.edc.auth.tokenbased) + runtimeOnly(libs.edc.auth.delegated) + runtimeOnly(libs.edc.auth.configuration) runtimeOnly(libs.edc.validator.data.address.http.data) runtimeOnly(libs.edc.aws.validator.data.address.s3) runtimeOnly(libs.edc.data.plane.selector.control.api) diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/build.gradle.kts b/edc-controlplane/edc-controlplane-postgresql-azure-vault/build.gradle.kts index 0d86a03a9..289c9532f 100644 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/build.gradle.kts +++ b/edc-controlplane/edc-controlplane-postgresql-azure-vault/build.gradle.kts @@ -40,7 +40,6 @@ dependencies { tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md b/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md index ab3ec7a1d..b6594926f 100644 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md +++ b/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md @@ -10,7 +10,7 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile b/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile deleted file mode 100644 index 03234b552..000000000 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -################################################################################# -# Copyright (c) 2023 ZF Friedrichshafen AG -# Copyright (c) 2022,2023 Mercedes-Benz Tech Innovation GmbH -# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR -ARG OTEL_JAR -ARG ADDITIONAL_FILES - -ARG APP_USER=docker -ARG APP_UID=10100 - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-controlplane.jar -COPY ${OTEL_JAR} opentelemetry-javaagent.jar -COPY ${ADDITIONAL_FILES} ./ - -HEALTHCHECK NONE - -CMD ["java", \ - "-javaagent:/app/opentelemetry-javaagent.jar", \ - "-Dedc.fs.config=/app/configuration.properties", \ - "-Djava.util.logging.config.file=/app/logging.properties", \ - "-Dotel.javaagent.configuration-file=/app/opentelemetry.properties", \ - "-Dotel.metrics.exporter=prometheus", \ - "-Dotel.exporter.prometheus.port=9090", \ - "-Djava.security.egd=file:/dev/urandom", \ - "-jar", \ - "edc-controlplane.jar"] diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/build.gradle.kts b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/build.gradle.kts index 778df1b0a..f3a1e20d5 100644 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/build.gradle.kts +++ b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/build.gradle.kts @@ -40,7 +40,6 @@ dependencies { tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md index 7c8c1658c..8082e841d 100644 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md +++ b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md @@ -10,7 +10,7 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile deleted file mode 100644 index 375c671f2..000000000 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile +++ /dev/null @@ -1,60 +0,0 @@ -################################################################################# -# Copyright (c) 2023 ZF Friedrichshafen AG -# Copyright (c) 2022,2023 Mercedes-Benz Tech Innovation GmbH -# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR -ARG OTEL_JAR -ARG ADDITIONAL_FILES - -ARG APP_USER=docker -ARG APP_UID=10100 - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-controlplane.jar -COPY ${OTEL_JAR} opentelemetry-javaagent.jar -COPY ${ADDITIONAL_FILES} ./ - -HEALTHCHECK NONE - -CMD ["java", \ - "-javaagent:/app/opentelemetry-javaagent.jar", \ - "-Dedc.fs.config=/app/configuration.properties", \ - "-Djava.util.logging.config.file=/app/logging.properties", \ - "-Dotel.javaagent.configuration-file=/app/opentelemetry.properties", \ - "-Dotel.metrics.exporter=prometheus", \ - "-Dotel.exporter.prometheus.port=9090", \ - "-Djava.security.egd=file:/dev/urandom", \ - "-jar", \ - "edc-controlplane.jar"] diff --git a/edc-controlplane/edc-runtime-memory/build.gradle.kts b/edc-controlplane/edc-runtime-memory/build.gradle.kts index 34c05b3dd..69342bf8e 100644 --- a/edc-controlplane/edc-runtime-memory/build.gradle.kts +++ b/edc-controlplane/edc-runtime-memory/build.gradle.kts @@ -36,7 +36,6 @@ dependencies { } tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-controlplane/edc-runtime-memory/notice.md b/edc-controlplane/edc-runtime-memory/notice.md index f72b20232..969ecd3e4 100644 --- a/edc-controlplane/edc-runtime-memory/notice.md +++ b/edc-controlplane/edc-runtime-memory/notice.md @@ -10,7 +10,7 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image diff --git a/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile b/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile deleted file mode 100644 index 04a3c182f..000000000 --- a/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -################################################################################# -# Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) -# Copyright (c) 2023 ZF Friedrichshafen AG -# Copyright (c) 2022,2023 Mercedes-Benz Tech Innovation GmbH -# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR - -ARG APP_USER=docker -ARG APP_UID=10100 -ARG ADDITIONAL_FILES - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-controlplane.jar -COPY ${ADDITIONAL_FILES} ./ - -HEALTHCHECK NONE - -# use the "exec" syntax so that SIGINT reaches the JVM -> graceful termination -CMD ["sh", "-c", "exec java -Dedc.fs.config=/app/configuration.properties -Djava.util.logging.config.file=/app/logging.properties -Djava.security.egd=file:/dev/urandom -jar edc-controlplane.jar"] diff --git a/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts b/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts index 69a0aac64..d96f5aedf 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts +++ b/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts @@ -33,7 +33,7 @@ dependencies { } } implementation(libs.edc.azure.identity) - implementation("com.azure:azure-security-keyvault-secrets:4.8.4") + implementation("com.azure:azure-security-keyvault-secrets:4.8.5") runtimeOnly(libs.edc.transaction.local) runtimeOnly(libs.edc.sql.pool) runtimeOnly(libs.edc.sql.accesstokendata) @@ -43,7 +43,6 @@ dependencies { } tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-dataplane/edc-dataplane-azure-vault/notice.md b/edc-dataplane/edc-dataplane-azure-vault/notice.md index 423885b08..4ef1034ea 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/notice.md +++ b/edc-dataplane/edc-dataplane-azure-vault/notice.md @@ -10,7 +10,7 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/build.gradle.kts b/edc-dataplane/edc-dataplane-hashicorp-vault/build.gradle.kts index 16a144279..97d7c742c 100644 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/build.gradle.kts +++ b/edc-dataplane/edc-dataplane-hashicorp-vault/build.gradle.kts @@ -36,7 +36,6 @@ dependencies { } tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md b/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md index 0aaf194ca..f7ca02b02 100644 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md +++ b/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md @@ -10,7 +10,7 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile b/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile deleted file mode 100644 index 2d7baa226..000000000 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile +++ /dev/null @@ -1,61 +0,0 @@ -################################################################################# -# Copyright (c) 2023 ZF Friedrichshafen AG -# Copyright (c) 2022,2023 Mercedes-Benz Tech Innovation GmbH -# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR -ARG OTEL_JAR -ARG ADDITIONAL_FILES - -ARG APP_USER=docker -ARG APP_UID=10100 - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-dataplane.jar -COPY ${OTEL_JAR} opentelemetry-javaagent.jar -COPY ${ADDITIONAL_FILES} ./ - - -HEALTHCHECK NONE - -CMD ["java", \ - "-javaagent:/app/opentelemetry-javaagent.jar", \ - "-Dedc.fs.config=/app/configuration.properties", \ - "-Djava.util.logging.config.file=/app/logging.properties", \ - "-Dotel.javaagent.configuration-file=/app/opentelemetry.properties", \ - "-Dotel.metrics.exporter=prometheus", \ - "-Dotel.exporter.prometheus.port=9090", \ - "-Djava.security.egd=file:/dev/urandom", \ - "-jar", \ - "edc-dataplane.jar"] diff --git a/edc-extensions/bpn-validation/bpn-validation-api/build.gradle.kts b/edc-extensions/bpn-validation/bpn-validation-api/build.gradle.kts index aec29646b..911be1ca2 100644 --- a/edc-extensions/bpn-validation/bpn-validation-api/build.gradle.kts +++ b/edc-extensions/bpn-validation/bpn-validation-api/build.gradle.kts @@ -20,7 +20,7 @@ plugins { `java-library` `maven-publish` - id("io.swagger.core.v3.swagger-gradle-plugin") + id(libs.plugins.swagger.get().pluginId) } dependencies { @@ -33,3 +33,9 @@ dependencies { testImplementation(libs.restAssured) testImplementation(libs.edc.junit) } + +edcBuild { + swagger { + apiGroup.set("control-plane") + } +} diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiController.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiController.java similarity index 79% rename from edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiController.java rename to edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiController.java index 2f2fe9605..1f96b4706 100644 --- a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiController.java +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiController.java @@ -1,5 +1,5 @@ -/******************************************************************************** - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -15,7 +15,7 @@ * under the License. * * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ + */ package org.eclipse.tractusx.edc.api.bpn; @@ -23,15 +23,7 @@ import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonString; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.DELETE; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.PUT; -import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; import org.eclipse.edc.web.spi.exception.InvalidRequestException; import org.eclipse.edc.web.spi.exception.ObjectConflictException; import org.eclipse.edc.web.spi.exception.ObjectNotFoundException; @@ -45,22 +37,15 @@ import static org.eclipse.tractusx.edc.edr.spi.CoreConstants.TX_NAMESPACE; -@Consumes({MediaType.APPLICATION_JSON}) -@Produces({MediaType.APPLICATION_JSON}) -@Path("/business-partner-groups") -public class BusinessPartnerGroupApiController implements BusinessPartnerGroupApi { +public abstract class BaseBusinessPartnerGroupApiController { private final BusinessPartnerStore businessPartnerService; - - public BusinessPartnerGroupApiController(BusinessPartnerStore businessPartnerService) { + public BaseBusinessPartnerGroupApiController(BusinessPartnerStore businessPartnerService) { this.businessPartnerService = businessPartnerService; } - @GET - @Path("/{bpn}") - @Override - public JsonObject resolve(@PathParam("bpn") String bpn) { + public JsonObject resolve(String bpn) { // StoreResult does not support the .map() operator, because it does not override newInstance() var result = businessPartnerService.resolveForBpn(bpn); @@ -71,16 +56,11 @@ public JsonObject resolve(@PathParam("bpn") String bpn) { throw new ObjectNotFoundException(List.class, result.getFailureDetail()); } - @DELETE - @Path("/{bpn}") - @Override public void deleteEntry(@PathParam("bpn") String bpn) { businessPartnerService.delete(bpn) .orElseThrow(f -> new ObjectNotFoundException(List.class, f.getFailureDetail())); } - @PUT - @Override public void updateEntry(@RequestBody JsonObject object) { var bpn = getBpn(object); var groups = getGroups(object); @@ -88,8 +68,6 @@ public void updateEntry(@RequestBody JsonObject object) { .orElseThrow(f -> new ObjectNotFoundException(List.class, f.getFailureDetail())); } - @POST - @Override public void createEntry(@RequestBody JsonObject object) { var bpn = getBpn(object); var groups = getGroups(object); @@ -104,7 +82,6 @@ private JsonObject createObject(String bpn, List list) { .build(); } - private String getBpn(JsonObject object) { try { return object.getString(ID); diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiExtension.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiExtension.java index d0cef588f..a6585243d 100644 --- a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiExtension.java +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiExtension.java @@ -26,6 +26,8 @@ import org.eclipse.edc.spi.system.ServiceExtensionContext; import org.eclipse.edc.web.spi.WebService; import org.eclipse.edc.web.spi.configuration.ApiContext; +import org.eclipse.tractusx.edc.api.bpn.v1.BusinessPartnerGroupApiV1Controller; +import org.eclipse.tractusx.edc.api.bpn.v3.BusinessPartnerGroupApiV3Controller; import org.eclipse.tractusx.edc.validation.businesspartner.spi.BusinessPartnerStore; import static org.eclipse.tractusx.edc.edr.spi.CoreConstants.TX_NAMESPACE; @@ -45,7 +47,8 @@ public class BusinessPartnerGroupApiExtension implements ServiceExtension { public void initialize(ServiceExtensionContext context) { jsonLdService.registerNamespace(TX_PREFIX, TX_NAMESPACE); - webService.registerResource(ApiContext.MANAGEMENT, new BusinessPartnerGroupApiController(businessPartnerStore)); + webService.registerResource(ApiContext.MANAGEMENT, new BusinessPartnerGroupApiV1Controller(businessPartnerStore, context.getMonitor())); + webService.registerResource(ApiContext.MANAGEMENT, new BusinessPartnerGroupApiV3Controller(businessPartnerStore)); } } diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1.java new file mode 100644 index 000000000..2510020ac --- /dev/null +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.bpn.v1; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.json.JsonObject; +import org.eclipse.edc.web.spi.ApiErrorDetail; + +import java.util.Set; + +import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; + +@OpenAPIDefinition(info = @Info(description = "With this API clients can create, read, update and delete BusinessPartnerNumber groups. It allows the assigning of BPNs to groups.", title = "Business Partner Group API")) +@Tag(name = "Business Partner Group") +@Deprecated(since = "0.8.0") +public interface BusinessPartnerGroupApiV1 { + + + @Operation(description = "Resolves all groups for a particular BPN", + deprecated = true, + responses = { + @ApiResponse(responseCode = "200", description = "An object containing an array with the assigned groups"), + @ApiResponse(responseCode = "404", description = "No entry for the given BPN was found"), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) + }) + JsonObject resolveV1(@Parameter(name = "bpn", description = "The business partner number") String bpn); + + @Operation(description = "Deletes the entry for a particular BPN", + deprecated = true, + responses = { + @ApiResponse(responseCode = "204", description = "The object was successfully deleted"), + @ApiResponse(responseCode = "404", description = "No entry for the given BPN was found"), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) + }) + void deleteEntryV1(@Parameter(name = "bpn", description = "The business partner number") String bpn); + + @Operation(description = "Updates the entry for a particular BPN", + requestBody = @RequestBody(content = @Content(schema = @Schema(implementation = ListSchema.class))), + deprecated = true, + responses = { + @ApiResponse(responseCode = "204", description = "The object was successfully updated"), + @ApiResponse(responseCode = "404", description = "No entry for the given BPN was found"), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) + }) + void updateEntryV1(JsonObject object); + + @Operation(description = "Creates an entry for a particular BPN", + requestBody = @RequestBody(content = @Content(schema = @Schema(implementation = ListSchema.class))), + deprecated = true, + responses = { + @ApiResponse(responseCode = "204", description = "The object was successfully created"), + @ApiResponse(responseCode = "409", description = "An entry already exists for that BPN"), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) + }) + void createEntryV1(JsonObject entry); + + + @Schema(name = "List", example = ListSchema.EXAMPLE, deprecated = true) + record ListSchema( + @Schema(name = ID) String id, + Set groups + ) { + public static final String EXAMPLE = """ + { + "@context": { + "tx": "https://w3id.org/tractusx/v0.0.1/ns/" + }, + "@id": "tx:BPN000001234", + "tx:groups": ["group1", "group2", "group3"] + } + """; + } +} diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1Controller.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1Controller.java new file mode 100644 index 000000000..823900ef5 --- /dev/null +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1Controller.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.bpn.v1; + +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import jakarta.json.JsonObject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.tractusx.edc.api.bpn.BaseBusinessPartnerGroupApiController; +import org.eclipse.tractusx.edc.validation.businesspartner.spi.BusinessPartnerStore; + +import static org.eclipse.edc.api.ApiWarnings.deprecationWarning; + + +@Consumes({MediaType.APPLICATION_JSON}) +@Produces({MediaType.APPLICATION_JSON}) +@Path("/business-partner-groups") +@Deprecated(since = "0.8.0") +public class BusinessPartnerGroupApiV1Controller extends BaseBusinessPartnerGroupApiController implements BusinessPartnerGroupApiV1 { + + private final Monitor monitor; + + public BusinessPartnerGroupApiV1Controller(BusinessPartnerStore businessPartnerService, Monitor monitor) { + super(businessPartnerService); + this.monitor = monitor; + } + + @GET + @Path("/{bpn}") + @Override + public JsonObject resolveV1(@PathParam("bpn") String bpn) { + monitor.warning(deprecationWarning("/v1", "/v3")); + return super.resolve(bpn); + } + + @DELETE + @Path("/{bpn}") + @Override + public void deleteEntryV1(@PathParam("bpn") String bpn) { + monitor.warning(deprecationWarning("/v1", "/v3")); + super.deleteEntry(bpn); + } + + @PUT + @Override + public void updateEntryV1(@RequestBody JsonObject object) { + monitor.warning(deprecationWarning("/v1", "/v3")); + super.updateEntry(object); + } + + @POST + @Override + public void createEntryV1(@RequestBody JsonObject object) { + monitor.warning(deprecationWarning("/v1", "/v3")); + super.createEntry(object); + } + +} diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApi.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3.java similarity index 89% rename from edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApi.java rename to edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3.java index 1fd6b08a1..81b768dc4 100644 --- a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApi.java +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3.java @@ -1,5 +1,5 @@ -/******************************************************************************** - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -15,9 +15,9 @@ * under the License. * * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ + */ -package org.eclipse.tractusx.edc.api.bpn; +package org.eclipse.tractusx.edc.api.bpn.v3; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; @@ -38,7 +38,7 @@ @OpenAPIDefinition(info = @Info(description = "With this API clients can create, read, update and delete BusinessPartnerNumber groups. It allows the assigning of BPNs to groups.", title = "Business Partner Group API")) @Tag(name = "Business Partner Group") -public interface BusinessPartnerGroupApi { +public interface BusinessPartnerGroupApiV3 { @Operation(description = "Resolves all groups for a particular BPN", @@ -48,7 +48,7 @@ public interface BusinessPartnerGroupApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) }) - JsonObject resolve(@Parameter(name = "bpn", description = "The business partner number") String bpn); + JsonObject resolveV3(@Parameter(name = "bpn", description = "The business partner number") String bpn); @Operation(description = "Deletes the entry for a particular BPN", responses = { @@ -57,7 +57,7 @@ public interface BusinessPartnerGroupApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) }) - void deleteEntry(@Parameter(name = "bpn", description = "The business partner number") String bpn); + void deleteEntryV3(@Parameter(name = "bpn", description = "The business partner number") String bpn); @Operation(description = "Updates the entry for a particular BPN", requestBody = @RequestBody(content = @Content(schema = @Schema(implementation = ListSchema.class))), @@ -68,7 +68,7 @@ public interface BusinessPartnerGroupApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) }) - void updateEntry(JsonObject object); + void updateEntryV3(JsonObject object); @Operation(description = "Creates an entry for a particular BPN", requestBody = @RequestBody(content = @Content(schema = @Schema(implementation = ListSchema.class))), @@ -79,7 +79,7 @@ public interface BusinessPartnerGroupApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) }) - void createEntry(JsonObject entry); + void createEntryV3(JsonObject entry); @Schema(name = "List", example = ListSchema.EXAMPLE) diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3Controller.java b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3Controller.java new file mode 100644 index 000000000..c3f28a2ed --- /dev/null +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/main/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3Controller.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.bpn.v3; + +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import jakarta.json.JsonObject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.tractusx.edc.api.bpn.BaseBusinessPartnerGroupApiController; +import org.eclipse.tractusx.edc.validation.businesspartner.spi.BusinessPartnerStore; + + +@Consumes({MediaType.APPLICATION_JSON}) +@Produces({MediaType.APPLICATION_JSON}) +@Path("/v3/business-partner-groups") +public class BusinessPartnerGroupApiV3Controller extends BaseBusinessPartnerGroupApiController implements BusinessPartnerGroupApiV3 { + + public BusinessPartnerGroupApiV3Controller(BusinessPartnerStore businessPartnerService) { + super(businessPartnerService); + } + + @GET + @Path("/{bpn}") + @Override + public JsonObject resolveV3(@PathParam("bpn") String bpn) { + return super.resolve(bpn); + } + + @DELETE + @Path("/{bpn}") + @Override + public void deleteEntryV3(@PathParam("bpn") String bpn) { + super.deleteEntry(bpn); + } + + @PUT + @Override + public void updateEntryV3(@RequestBody JsonObject object) { + super.updateEntry(object); + } + + @POST + @Override + public void createEntryV3(@RequestBody JsonObject object) { + super.createEntry(object); + } + +} diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiControllerTest.java b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiControllerTest.java similarity index 87% rename from edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiControllerTest.java rename to edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiControllerTest.java index f2a9033b8..8082c8f69 100644 --- a/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BusinessPartnerGroupApiControllerTest.java +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/BaseBusinessPartnerGroupApiControllerTest.java @@ -1,5 +1,5 @@ -/******************************************************************************** - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -15,7 +15,7 @@ * under the License. * * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ + */ package org.eclipse.tractusx.edc.api.bpn; @@ -24,7 +24,6 @@ import jakarta.json.JsonObject; import org.eclipse.edc.jsonld.TitaniumJsonLd; import org.eclipse.edc.jsonld.spi.JsonLd; -import org.eclipse.edc.junit.annotations.ApiTest; import org.eclipse.edc.spi.result.StoreResult; import org.eclipse.edc.web.jersey.testfixtures.RestControllerTestBase; import org.eclipse.tractusx.edc.validation.businesspartner.spi.BusinessPartnerStore; @@ -33,7 +32,6 @@ import java.util.List; -import static io.restassured.RestAssured.given; import static io.restassured.http.ContentType.JSON; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.CONTEXT; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; @@ -46,11 +44,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -@ApiTest -class BusinessPartnerGroupApiControllerTest extends RestControllerTestBase { +public abstract class BaseBusinessPartnerGroupApiControllerTest extends RestControllerTestBase { private final JsonLd jsonLdService = new TitaniumJsonLd(mock()); - private final BusinessPartnerStore businessPartnerStore = mock(); + protected final BusinessPartnerStore businessPartnerStore = mock(); @BeforeEach void setUp() { @@ -169,17 +166,7 @@ void createEntry_invalidBody_returns400() { .statusCode(400); } - @Override - protected Object controller() { - return new BusinessPartnerGroupApiController(businessPartnerStore); - } - - private RequestSpecification baseRequest() { - return given() - .baseUri("http://localhost:" + port) - .basePath("/business-partner-groups") - .when(); - } + protected abstract RequestSpecification baseRequest(); private JsonObject createJsonObject() { return jsonLdService.expand(Json.createObjectBuilder() diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1ControllerTest.java b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1ControllerTest.java new file mode 100644 index 000000000..9e73096e3 --- /dev/null +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v1/BusinessPartnerGroupApiV1ControllerTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.bpn.v1; + +import io.restassured.specification.RequestSpecification; +import org.eclipse.edc.junit.annotations.ApiTest; +import org.eclipse.tractusx.edc.api.bpn.BaseBusinessPartnerGroupApiControllerTest; + +import static io.restassured.RestAssured.given; +import static org.mockito.Mockito.mock; + +@ApiTest +class BusinessPartnerGroupApiV1ControllerTest extends BaseBusinessPartnerGroupApiControllerTest { + + @Override + protected Object controller() { + return new BusinessPartnerGroupApiV1Controller(businessPartnerStore, mock()); + } + + @Override + protected RequestSpecification baseRequest() { + return given() + .baseUri("http://localhost:" + port) + .basePath("/business-partner-groups") + .when(); + } + +} diff --git a/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3ControllerTest.java b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3ControllerTest.java new file mode 100644 index 000000000..e98c047f5 --- /dev/null +++ b/edc-extensions/bpn-validation/bpn-validation-api/src/test/java/org/eclipse/tractusx/edc/api/bpn/v3/BusinessPartnerGroupApiV3ControllerTest.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.bpn.v3; + +import io.restassured.specification.RequestSpecification; +import org.eclipse.edc.junit.annotations.ApiTest; +import org.eclipse.tractusx.edc.api.bpn.BaseBusinessPartnerGroupApiControllerTest; + +import static io.restassured.RestAssured.given; + +@ApiTest +class BusinessPartnerGroupApiV3ControllerTest extends BaseBusinessPartnerGroupApiControllerTest { + + @Override + protected Object controller() { + return new BusinessPartnerGroupApiV3Controller(businessPartnerStore); + } + + @Override + protected RequestSpecification baseRequest() { + return given() + .baseUri("http://localhost:" + port) + .basePath("/v3/business-partner-groups") + .when(); + } + +} diff --git a/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunction.java b/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunction.java index a7339c16a..3f3d08abe 100644 --- a/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunction.java +++ b/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunction.java @@ -24,24 +24,42 @@ import org.eclipse.edc.policy.model.Operator; import org.eclipse.edc.policy.model.Permission; import org.eclipse.edc.spi.agent.ParticipantAgent; +import org.eclipse.edc.spi.result.Failure; +import org.eclipse.edc.spi.result.Result; +import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; import java.util.Optional; +import java.util.function.Function; -import static java.lang.String.format; +import static org.eclipse.edc.policy.model.Operator.EQ; +import static org.eclipse.edc.policy.model.Operator.HAS_PART; +import static org.eclipse.edc.spi.result.Result.failure; +import static org.eclipse.edc.spi.result.Result.success; /** * AtomicConstraintFunction to validate business partner numbers for edc permissions. */ public class BusinessPartnerNumberPermissionFunction implements AtomicConstraintFunction { - public BusinessPartnerNumberPermissionFunction() { - } + private static final List SUPPORTED_OPERATORS = Arrays.asList( + EQ, + Operator.IN, + Operator.NEQ, + Operator.IS_ANY_OF, + Operator.IS_A, + Operator.IS_NONE_OF, + Operator.IS_ALL_OF, + Operator.HAS_PART + ); @Override public boolean evaluate(Operator operator, Object rightValue, Permission rule, PolicyContext context) { - - if (operator != Operator.EQ) { - var message = format("As operator only 'EQ' is supported. Unsupported operator: '%s'", operator); + + if (!SUPPORTED_OPERATORS.contains(operator)) { + var message = "Operator %s is not supported. Supported operators: %s".formatted(operator, SUPPORTED_OPERATORS); context.reportProblem(message); return false; } @@ -58,19 +76,51 @@ public boolean evaluate(Operator operator, Object rightValue, Permission rule, P return false; } - if ((rightValue instanceof String businessPartnerNumberStr)) { - if (businessPartnerNumberStr.equals(identity)) { - return true; - } else { - context.reportProblem("Identity of the participant not matching the expected one: " + businessPartnerNumberStr); - return false; - } - } else { - var message = format("Invalid right operand value: expected 'String' but got '%s'", - Optional.of(rightValue).map(Object::getClass).map(Class::getName).orElse(null)); - context.reportProblem(message); + return switch (operator) { + case EQ, IS_ALL_OF -> checkEquality(identity, rightValue, operator) + .orElse(reportFailure(context)); + case NEQ -> checkEquality(identity, rightValue, operator) + .map(b -> !b) + .orElse(reportFailure(context)); + case HAS_PART -> checkStringContains(identity, rightValue) + .orElse(reportFailure(context)); + case IN, IS_A, IS_ANY_OF -> + checkListContains(identity, rightValue, operator).orElse(reportFailure(context)); + case IS_NONE_OF -> checkListContains(identity, rightValue, operator) + .map(b -> !b) + .orElse(reportFailure(context)); + default -> false; + }; + } + + private @NotNull Function reportFailure(PolicyContext context) { + return f -> { + context.reportProblem(f.getFailureDetail()); return false; + }; + } + + private Result checkListContains(String identity, Object rightValue, Operator operator) { + if (rightValue instanceof List numbers) { + return success(numbers.contains(identity)); + } + return failure("Invalid right-value: operator '%s' requires a 'List' but got a '%s'".formatted(operator, Optional.of(rightValue).map(Object::getClass).map(Class::getName).orElse(null))); + } + + private Result checkStringContains(String identity, Object rightValue) { + if (rightValue instanceof String bpnString) { + return success(identity.contains(bpnString)); } + return failure("Invalid right-value: operator '%s' requires a 'String' but got a '%s'".formatted(HAS_PART, Optional.of(rightValue).map(Object::getClass).map(Class::getName).orElse(null))); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) + private Result checkEquality(String identity, Object rightValue, Operator operator) { + if (rightValue instanceof String bpnString) { + return success(Objects.equals(identity, bpnString)); + } else if (rightValue instanceof List bpnList) { + return success(bpnList.stream().allMatch(bpn -> Objects.equals(identity, bpn))); + } + return failure("Invalid right-value: operator '%s' requires a 'String' or a 'List' but got a '%s'".formatted(operator, Optional.of(rightValue).map(Object::getClass).map(Class::getName).orElse(null))); } } diff --git a/edc-extensions/bpn-validation/bpn-validation-core/src/test/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunctionTest.java b/edc-extensions/bpn-validation/bpn-validation-core/src/test/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunctionTest.java index 67cff19fa..e178c3838 100644 --- a/edc-extensions/bpn-validation/bpn-validation-core/src/test/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunctionTest.java +++ b/edc-extensions/bpn-validation/bpn-validation-core/src/test/java/org/eclipse/tractusx/edc/validation/businesspartner/functions/BusinessPartnerNumberPermissionFunctionTest.java @@ -25,28 +25,32 @@ import org.eclipse.edc.spi.agent.ParticipantAgent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; +import org.junit.jupiter.params.provider.ArgumentsSource; import java.util.List; +import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.startsWith; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class BusinessPartnerNumberPermissionFunctionTest { + private final Permission permission = mock(); private BusinessPartnerNumberPermissionFunction validation; - private PolicyContext policyContext; private ParticipantAgent participantAgent; - private Permission permission = mock(); - @BeforeEach void beforeEach() { this.policyContext = mock(PolicyContext.class); @@ -58,21 +62,18 @@ void beforeEach() { }; } - @ParameterizedTest - @EnumSource(Operator.class) - void testFailsOnUnsupportedOperations(Operator operator) { - if (operator == Operator.EQ) { // only allowed operator - return; - } - assertFalse(validation.evaluate(operator, "foo", permission, policyContext)); - verify(policyContext).reportProblem(argThat(message -> message.contains("As operator only 'EQ' is supported"))); + @ParameterizedTest(name = "Illegal Operator {0}") + @ArgumentsSource(IllegalOperatorProvider.class) + void testFailsOnUnsupportedOperations(Operator illegalOperator) { + assertFalse(validation.evaluate(illegalOperator, "foo", permission, policyContext)); + verify(policyContext).reportProblem(argThat(message -> message.startsWith("Operator %s is not supported.".formatted(illegalOperator)))); } @Test void testFailsOnUnsupportedRightValue() { when(participantAgent.getIdentity()).thenReturn("foo"); assertFalse(validation.evaluate(Operator.EQ, 1, permission, policyContext)); - verify(policyContext).reportProblem(argThat(message -> message.contains("Invalid right operand value: expected 'String' but got"))); + verify(policyContext).reportProblem(argThat(message -> message.contains("Invalid right-value: operator 'EQ' requires a 'String' or a 'List' but got a 'java.lang.Integer'"))); } @Test @@ -98,14 +99,99 @@ void testValidationWhenSingleParticipantIsValid() { void testValidationFailsInvalidIdentity() { when(participantAgent.getIdentity()).thenReturn("bar"); assertThat(validation.evaluate(Operator.EQ, "foo", permission, policyContext)).isFalse(); - verify(policyContext).reportProblem(argThat(message -> message.contains("Identity of the participant not matching the expected one: foo"))); } @Test void testValidationForMultipleParticipants() { + when(participantAgent.getIdentity()).thenReturn("quazz"); + assertThat(validation.evaluate(Operator.IN, List.of("foo", "bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IN, List.of(1, "foo"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IN, List.of("bar", "bar"), permission, policyContext)).isFalse(); + } + + @Test + void evaluate_neq() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.NEQ, "bar", permission, policyContext)).isTrue(); + + // these two should report a problem + assertThat(validation.evaluate(Operator.NEQ, 1, permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.NEQ, List.of("foo", "bar"), permission, policyContext)).isTrue(); + } - assertFalse(validation.evaluate(Operator.IN, List.of("foo", "bar"), permission, policyContext)); - assertFalse(validation.evaluate(Operator.IN, List.of(1, "foo"), permission, policyContext)); - assertFalse(validation.evaluate(Operator.IN, List.of("bar", "bar"), permission, policyContext)); + @Test + void evaluate_hasPart() { + when(participantAgent.getIdentity()).thenReturn("quizzquazz"); + assertThat(validation.evaluate(Operator.HAS_PART, "quizz", permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.HAS_PART, "quazz", permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.HAS_PART, "zzqua", permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.HAS_PART, "zzqui", permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.HAS_PART, "Quizz", permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.HAS_PART, List.of("quizz"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.HAS_PART, List.of("quizz", "quazz"), permission, policyContext)).isFalse(); + verify(policyContext, times(2)).reportProblem(startsWith("Invalid right-value: operator 'HAS_PART' requires a 'String' but got a")); + } + + @Test + void evaluate_in() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.IN, List.of("foo", "bar"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IN, List.of("foo"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IN, List.of("bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IN, "bar", permission, policyContext)).isFalse(); + verify(policyContext).reportProblem("Invalid right-value: operator 'IN' requires a 'List' but got a 'java.lang.String'"); + } + + @Test + void evaluate_isAnyOf() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.IS_ANY_OF, List.of("foo", "bar"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_ANY_OF, List.of("foo"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_ANY_OF, List.of("bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_ANY_OF, "bar", permission, policyContext)).isFalse(); + verify(policyContext).reportProblem("Invalid right-value: operator 'IS_ANY_OF' requires a 'List' but got a 'java.lang.String'"); + + } + + @Test + void evaluate_isA() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.IS_A, List.of("foo", "bar"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_A, List.of("foo"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_A, List.of("bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_A, "bar", permission, policyContext)).isFalse(); + verify(policyContext).reportProblem("Invalid right-value: operator 'IS_A' requires a 'List' but got a 'java.lang.String'"); + + } + + @Test + void evaluate_isAllOf() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.IS_ALL_OF, List.of("foo", "bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_ALL_OF, List.of("foo"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_ALL_OF, List.of("bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_ALL_OF, "bar", permission, policyContext)).isFalse(); + } + + @Test + void evaluate_isNoneOf() { + when(participantAgent.getIdentity()).thenReturn("foo"); + assertThat(validation.evaluate(Operator.IS_NONE_OF, List.of("foo", "bar"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_NONE_OF, List.of("foo"), permission, policyContext)).isFalse(); + assertThat(validation.evaluate(Operator.IS_NONE_OF, List.of("bar"), permission, policyContext)).isTrue(); + assertThat(validation.evaluate(Operator.IS_NONE_OF, "bar", permission, policyContext)).isFalse(); + verify(policyContext).reportProblem("Invalid right-value: operator 'IS_NONE_OF' requires a 'List' but got a 'java.lang.String'"); + } + + private static class IllegalOperatorProvider implements ArgumentsProvider { + @Override + public Stream provideArguments(ExtensionContext extensionContext) throws Exception { + return Stream.of( + Arguments.of(Operator.GEQ), + Arguments.of(Operator.GT), + Arguments.of(Operator.LEQ), + Arguments.of(Operator.LT) + ); + } } } diff --git a/edc-extensions/dataplane/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts b/edc-extensions/dataplane/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts index 29cf8af8f..1c23c94ed 100644 --- a/edc-extensions/dataplane/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts +++ b/edc-extensions/dataplane/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts @@ -19,7 +19,7 @@ plugins { `java-library` - id("io.swagger.core.v3.swagger-gradle-plugin") + id(libs.plugins.swagger.get().pluginId) } dependencies { @@ -43,3 +43,10 @@ dependencies { testImplementation(libs.restAssured) } +edcBuild { + swagger { + apiGroup.set("data-plane") + } +} + + diff --git a/edc-extensions/dataplane/dataplane-selector-configuration/build.gradle.kts b/edc-extensions/dataplane/dataplane-selector-configuration/build.gradle.kts index 185d46b59..476961466 100644 --- a/edc-extensions/dataplane/dataplane-selector-configuration/build.gradle.kts +++ b/edc-extensions/dataplane/dataplane-selector-configuration/build.gradle.kts @@ -24,8 +24,8 @@ plugins { dependencies { api(libs.edc.spi.core) - api(libs.edc.junit) implementation(libs.edc.spi.dataplane.selector) implementation(libs.edc.spi.dataplane.transfer) implementation(libs.bouncyCastle.bcpkixJdk18on) + testImplementation(libs.edc.junit) } diff --git a/edc-extensions/dataplane/dataplane-token-refresh/token-refresh-api/build.gradle.kts b/edc-extensions/dataplane/dataplane-token-refresh/token-refresh-api/build.gradle.kts index c99448fc0..47791b084 100644 --- a/edc-extensions/dataplane/dataplane-token-refresh/token-refresh-api/build.gradle.kts +++ b/edc-extensions/dataplane/dataplane-token-refresh/token-refresh-api/build.gradle.kts @@ -20,7 +20,7 @@ plugins { `java-library` `maven-publish` - id("io.swagger.core.v3.swagger-gradle-plugin") + id(libs.plugins.swagger.get().pluginId) } dependencies { @@ -36,3 +36,8 @@ dependencies { testImplementation(testFixtures(libs.edc.core.jersey)) } +edcBuild { + swagger { + apiGroup.set("data-plane") + } +} diff --git a/edc-extensions/edr/edr-api-v2/build.gradle.kts b/edc-extensions/edr/edr-api-v2/build.gradle.kts index af362ab50..9262f3fa1 100644 --- a/edc-extensions/edr/edr-api-v2/build.gradle.kts +++ b/edc-extensions/edr/edr-api-v2/build.gradle.kts @@ -20,7 +20,7 @@ plugins { `java-library` `maven-publish` - id("io.swagger.core.v3.swagger-gradle-plugin") + id(libs.plugins.swagger.get().pluginId) } dependencies { @@ -42,3 +42,10 @@ dependencies { testImplementation(libs.edc.lib.transform) testImplementation(libs.edc.spi.contract) } + +edcBuild { + swagger { + apiGroup.set("control-plane") + } +} + diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiController.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiController.java similarity index 81% rename from edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiController.java rename to edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiController.java index d14e521e8..6aceff6a9 100644 --- a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiController.java +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,20 +17,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import jakarta.json.JsonArray; import jakarta.json.JsonObject; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.DELETE; -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.MediaType; import org.eclipse.edc.api.model.IdResponse; import org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest; import org.eclipse.edc.connector.controlplane.services.spi.contractnegotiation.ContractNegotiationService; @@ -60,10 +50,8 @@ import static org.eclipse.tractusx.edc.edr.spi.types.RefreshMode.FORCE_REFRESH; import static org.eclipse.tractusx.edc.edr.spi.types.RefreshMode.NO_REFRESH; -@Consumes({ MediaType.APPLICATION_JSON }) -@Produces({ MediaType.APPLICATION_JSON }) -@Path("/v2/edrs") -public class EdrCacheApiController implements EdrCacheApi { +public class BaseEdrCacheApiController { + public static final String LOCAL_ADAPTER_URI = "local://adapter"; public static final Set LOCAL_EVENTS = Set.of("contract.negotiation", "transfer.process"); public static final CallbackAddress LOCAL_CALLBACK = CallbackAddress.Builder.newInstance() @@ -74,16 +62,16 @@ public class EdrCacheApiController implements EdrCacheApi { private final EndpointDataReferenceStore edrStore; private final TypeTransformerRegistry transformerRegistry; private final JsonObjectValidatorRegistry validator; - private final Monitor monitor; + protected final Monitor monitor; private final EdrService edrService; private final ContractNegotiationService contractNegotiationService; - public EdrCacheApiController(EndpointDataReferenceStore edrStore, - TypeTransformerRegistry transformerRegistry, - JsonObjectValidatorRegistry validator, - Monitor monitor, - EdrService edrService, ContractNegotiationService contractNegotiationService) { + public BaseEdrCacheApiController(EndpointDataReferenceStore edrStore, + TypeTransformerRegistry transformerRegistry, + JsonObjectValidatorRegistry validator, + Monitor monitor, + EdrService edrService, ContractNegotiationService contractNegotiationService) { this.edrStore = edrStore; this.transformerRegistry = transformerRegistry; this.validator = validator; @@ -92,8 +80,6 @@ public EdrCacheApiController(EndpointDataReferenceStore edrStore, this.contractNegotiationService = contractNegotiationService; } - @POST - @Override public JsonObject initiateEdrNegotiation(JsonObject requestObject) { validator.validate(CONTRACT_REQUEST_TYPE, requestObject) @@ -113,9 +99,6 @@ public JsonObject initiateEdrNegotiation(JsonObject requestObject) { .orElseThrow(f -> new EdcException("Error creating response body: " + f.getFailureDetail())); } - @POST - @Path("/request") - @Override public JsonArray requestEdrEntries(JsonObject querySpecJson) { QuerySpec querySpec; if (querySpecJson == null) { @@ -137,33 +120,22 @@ public JsonArray requestEdrEntries(JsonObject querySpecJson) { .collect(toJsonArray()); } - @GET - @Path("{transferProcessId}/dataaddress") - @Override - public JsonObject getEdrEntryDataAddress(@PathParam("transferProcessId") String transferProcessId, @DefaultValue("true") @QueryParam("auto_refresh") boolean autoRefresh) { + public JsonObject getEdrEntryDataAddress(String transferProcessId, boolean autoRefresh) { var mode = autoRefresh ? AUTO_REFRESH : NO_REFRESH; var dataAddress = edrService.resolveByTransferProcess(transferProcessId, mode) .orElseThrow(exceptionMapper(EndpointDataReferenceEntry.class, transferProcessId)); return transformerRegistry.transform(dataAddress, JsonObject.class) .orElseThrow(f -> new EdcException(f.getFailureDetail())); - - } - @DELETE - @Path("{transferProcessId}") - @Override - public void removeEdrEntry(@PathParam("transferProcessId") String transferProcessId) { + public void removeEdrEntry(String transferProcessId) { edrStore.delete(transferProcessId) .flatMap(ServiceResult::from) .orElseThrow(exceptionMapper(EndpointDataReferenceEntry.class, transferProcessId)); } - @POST - @Path("{transferProcessId}/refresh") - @Override - public JsonObject refreshEdr(@PathParam("transferProcessId") String transferProcessId) { + public JsonObject refreshEdr(String transferProcessId) { var updatedEdr = edrService.resolveByTransferProcess(transferProcessId, FORCE_REFRESH) .orElseThrow(exceptionMapper(EndpointDataReferenceEntry.class, transferProcessId)); diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtension.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtension.java similarity index 81% rename from edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtension.java rename to edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtension.java index c3e351d6d..59ab9cf7b 100644 --- a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtension.java +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import jakarta.json.Json; import org.eclipse.edc.connector.controlplane.services.spi.contractnegotiation.ContractNegotiationService; @@ -31,7 +31,9 @@ import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; import org.eclipse.edc.web.spi.WebService; import org.eclipse.edc.web.spi.configuration.ApiContext; -import org.eclipse.tractusx.edc.api.edr.v2.transform.JsonObjectFromEndpointDataReferenceEntryTransformer; +import org.eclipse.tractusx.edc.api.edr.transform.JsonObjectFromEndpointDataReferenceEntryTransformer; +import org.eclipse.tractusx.edc.api.edr.v2.EdrCacheApiV2Controller; +import org.eclipse.tractusx.edc.api.edr.v3.EdrCacheApiV3Controller; import org.eclipse.tractusx.edc.edr.spi.service.EdrService; import java.util.Map; @@ -69,6 +71,7 @@ public void initialize(ServiceExtensionContext context) { jsonLdService.registerNamespace(TX_PREFIX, TX_NAMESPACE); var mgmtApiTransformerRegistry = transformerRegistry.forContext("management-api"); mgmtApiTransformerRegistry.register(new JsonObjectFromEndpointDataReferenceEntryTransformer(Json.createBuilderFactory(Map.of()))); - webService.registerResource(ApiContext.MANAGEMENT, new EdrCacheApiController(edrStore, mgmtApiTransformerRegistry, validatorRegistry, monitor, edrService, contractNegotiationService)); + webService.registerResource(ApiContext.MANAGEMENT, new EdrCacheApiV2Controller(edrStore, mgmtApiTransformerRegistry, validatorRegistry, monitor, edrService, contractNegotiationService)); + webService.registerResource(ApiContext.MANAGEMENT, new EdrCacheApiV3Controller(edrStore, mgmtApiTransformerRegistry, validatorRegistry, monitor, edrService, contractNegotiationService)); } } diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java similarity index 97% rename from edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java rename to edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java index 64ef0a33b..e3bd4ecb4 100644 --- a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2.transform; +package org.eclipse.tractusx.edc.api.edr.transform; import jakarta.json.JsonBuilderFactory; import jakarta.json.JsonObject; diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2.java new file mode 100644 index 000000000..5a34601b1 --- /dev/null +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.edr.v2; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import org.eclipse.edc.api.model.ApiCoreSchema; +import org.eclipse.edc.connector.controlplane.api.management.contractnegotiation.v3.ContractNegotiationApiV3; +import org.eclipse.edc.edr.spi.types.EndpointDataReferenceEntry; +import org.eclipse.edc.web.spi.ApiErrorDetail; + +import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; +import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; + +@OpenAPIDefinition +@Tag(name = "Control Plane EDR Api") +@Deprecated(since = "0.8.0") +public interface EdrCacheApiV2 { + + @Operation(description = "Initiates an EDR negotiation by handling a contract negotiation first and then a transfer process for a given offer and with the given counter part. Please note that successfully invoking this endpoint " + + "only means that the negotiation was initiated.", + deprecated = true, + responses = { + @ApiResponse(responseCode = "200", description = "The negotiation was successfully initiated.", + content = @Content(schema = @Schema(implementation = ApiCoreSchema.IdResponseSchema.class))), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))), + }) + JsonObject initiateEdrNegotiationV2(@Schema(implementation = ContractNegotiationApiV3.ContractRequestSchema.class) JsonObject dto); + + @Operation(description = "Request all Edr entries according to a particular query", + deprecated = true, + requestBody = @RequestBody( + content = @Content(schema = @Schema(implementation = ApiCoreSchema.QuerySpecSchema.class)) + ), + responses = { + @ApiResponse(responseCode = "200", description = "The edr entries matching the query", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = EndpointDataReferenceEntrySchema.class)))), + @ApiResponse(responseCode = "400", description = "Request body was malformed", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) + }) + JsonArray requestEdrEntriesV2(JsonObject querySpecJson); + + @Operation(description = "Gets the EDR data address with the given transfer process ID", + deprecated = true, + parameters = { @Parameter(name = "transferProcessId", description = "The ID of the transferprocess for which the EDR should be fetched", required = true), + @Parameter(name = "auto_refresh", description = "Whether the access token that is stored on the EDR should be checked for expiry, and renewed if necessary. Default is true.") + }, + responses = { + @ApiResponse(responseCode = "200", description = "The data address", + content = @Content(schema = @Schema(implementation = ApiCoreSchema.DataAddressSchema.class))), + @ApiResponse(responseCode = "400", description = "Request was malformed, e.g. id was null", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))), + @ApiResponse(responseCode = "404", description = "An EDR data address with the given transfer process ID does not exist", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) + } + ) + JsonObject getEdrEntryDataAddressV2(String transferProcessId, boolean autoRefresh); + + @Operation(description = "Removes an EDR entry given the transfer process ID", + deprecated = true, + responses = { + @ApiResponse(responseCode = "204", description = "EDR entry was deleted successfully"), + @ApiResponse(responseCode = "400", description = "Request was malformed, e.g. id was null", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))), + @ApiResponse(responseCode = "404", description = "An EDR entry with the given ID does not exist", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) + }) + void removeEdrEntryV2(String transferProcessId); + + @Operation(description = "Refreshes and returns the EDR data address with the given transfer process ID", + deprecated = true, + parameters = { @Parameter(name = "transferProcessId", description = "The ID of the transferprocess for which the EDR should be fetched", required = true), + }, + responses = { + @ApiResponse(responseCode = "200", description = "The data address", + content = @Content(schema = @Schema(implementation = ApiCoreSchema.DataAddressSchema.class))), + @ApiResponse(responseCode = "400", description = "Request was malformed, e.g. id was null", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))), + @ApiResponse(responseCode = "404", description = "An EDR data address with the given transfer process ID does not exist", + content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) + } + ) + JsonObject refreshEdrV2(String transferProcessId); + + @ArraySchema() + @Schema(name = "EndpointDataReferenceEntry", example = EndpointDataReferenceEntrySchema.EDR_ENTRY_OUTPUT_EXAMPLE, deprecated = true) + record EndpointDataReferenceEntrySchema( + @Schema(name = ID) + String id, + @Schema(name = TYPE, example = EndpointDataReferenceEntry.EDR_ENTRY_TYPE) + String type + ) { + public static final String EDR_ENTRY_OUTPUT_EXAMPLE = """ + { + "@context": { "@vocab": "https://w3id.org/edc/v0.0.1/ns/" }, + "@id": "transfer-process-id", + "transferProcessId": "transfer-process-id", + "agreementId": "agreement-id", + "contractNegotiationId": "contract-negotiation-id", + "assetId": "asset-id", + "providerId": "provider-id", + "createdAt": 1688465655 + } + """; + } +} diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2Controller.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2Controller.java new file mode 100644 index 000000000..4f0220d48 --- /dev/null +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2Controller.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.edr.v2; + +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.edc.connector.controlplane.services.spi.contractnegotiation.ContractNegotiationService; +import org.eclipse.edc.edr.spi.store.EndpointDataReferenceStore; +import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.edc.transform.spi.TypeTransformerRegistry; +import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; +import org.eclipse.tractusx.edc.api.edr.BaseEdrCacheApiController; +import org.eclipse.tractusx.edc.edr.spi.service.EdrService; + +import static org.eclipse.edc.api.ApiWarnings.deprecationWarning; + +@Consumes({ MediaType.APPLICATION_JSON }) +@Produces({ MediaType.APPLICATION_JSON }) +@Path("/v2/edrs") +@Deprecated(since = "0.8.0") +public class EdrCacheApiV2Controller extends BaseEdrCacheApiController implements EdrCacheApiV2 { + + public EdrCacheApiV2Controller(EndpointDataReferenceStore edrStore, + TypeTransformerRegistry transformerRegistry, + JsonObjectValidatorRegistry validator, + Monitor monitor, + EdrService edrService, ContractNegotiationService contractNegotiationService) { + super(edrStore, transformerRegistry, validator, monitor, edrService, contractNegotiationService); + } + + @POST + @Override + public JsonObject initiateEdrNegotiationV2(JsonObject requestObject) { + monitor.warning(deprecationWarning("/v2", "/v3")); + return super.initiateEdrNegotiation(requestObject); + } + + @POST + @Path("/request") + @Override + public JsonArray requestEdrEntriesV2(JsonObject querySpecJson) { + monitor.warning(deprecationWarning("/v2", "/v3")); + return requestEdrEntries(querySpecJson); + } + + @GET + @Path("{transferProcessId}/dataaddress") + @Override + public JsonObject getEdrEntryDataAddressV2(@PathParam("transferProcessId") String transferProcessId, @DefaultValue("true") @QueryParam("auto_refresh") boolean autoRefresh) { + monitor.warning(deprecationWarning("/v2", "/v3")); + return super.getEdrEntryDataAddress(transferProcessId, autoRefresh); + } + + @DELETE + @Path("{transferProcessId}") + @Override + public void removeEdrEntryV2(@PathParam("transferProcessId") String transferProcessId) { + monitor.warning(deprecationWarning("/v2", "/v3")); + super.removeEdrEntry(transferProcessId); + } + + @POST + @Path("{transferProcessId}/refresh") + @Override + public JsonObject refreshEdrV2(@PathParam("transferProcessId") String transferProcessId) { + monitor.warning(deprecationWarning("/v2", "/v3")); + return super.refreshEdr(transferProcessId); + } + +} diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApi.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3.java similarity index 93% rename from edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApi.java rename to edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3.java index d52441f82..2f5c7439a 100644 --- a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApi.java +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr.v3; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; @@ -40,7 +40,7 @@ @OpenAPIDefinition @Tag(name = "Control Plane EDR Api") -public interface EdrCacheApi { +public interface EdrCacheApiV3 { @Operation(description = "Initiates an EDR negotiation by handling a contract negotiation first and then a transfer process for a given offer and with the given counter part. Please note that successfully invoking this endpoint " + "only means that the negotiation was initiated.", @@ -50,7 +50,7 @@ public interface EdrCacheApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))), }) - JsonObject initiateEdrNegotiation(@Schema(implementation = ContractNegotiationApiV3.ContractRequestSchema.class) JsonObject dto); + JsonObject initiateEdrNegotiationV3(@Schema(implementation = ContractNegotiationApiV3.ContractRequestSchema.class) JsonObject dto); @Operation(description = "Request all Edr entries according to a particular query", requestBody = @RequestBody( @@ -62,7 +62,7 @@ public interface EdrCacheApi { @ApiResponse(responseCode = "400", description = "Request body was malformed", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) }) - JsonArray requestEdrEntries(JsonObject querySpecJson); + JsonArray requestEdrEntriesV3(JsonObject querySpecJson); @Operation(description = "Gets the EDR data address with the given transfer process ID", parameters = { @Parameter(name = "transferProcessId", description = "The ID of the transferprocess for which the EDR should be fetched", required = true), @@ -77,7 +77,7 @@ public interface EdrCacheApi { content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) } ) - JsonObject getEdrEntryDataAddress(String transferProcessId, boolean autoRefresh); + JsonObject getEdrEntryDataAddressV3(String transferProcessId, boolean autoRefresh); @Operation(description = "Removes an EDR entry given the transfer process ID", responses = { @@ -87,7 +87,7 @@ public interface EdrCacheApi { @ApiResponse(responseCode = "404", description = "An EDR entry with the given ID does not exist", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) }) - void removeEdrEntry(String transferProcessId); + void removeEdrEntryV3(String transferProcessId); @Operation(description = "Refreshes and returns the EDR data address with the given transfer process ID", parameters = { @Parameter(name = "transferProcessId", description = "The ID of the transferprocess for which the EDR should be fetched", required = true), @@ -101,7 +101,7 @@ public interface EdrCacheApi { content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiCoreSchema.ApiErrorDetailSchema.class)))) } ) - JsonObject refreshEdr(String transferProcessId); + JsonObject refreshEdrV3(String transferProcessId); @ArraySchema() diff --git a/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3Controller.java b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3Controller.java new file mode 100644 index 000000000..7b07f324f --- /dev/null +++ b/edc-extensions/edr/edr-api-v2/src/main/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3Controller.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.edr.v3; + +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.edc.connector.controlplane.services.spi.contractnegotiation.ContractNegotiationService; +import org.eclipse.edc.edr.spi.store.EndpointDataReferenceStore; +import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.edc.transform.spi.TypeTransformerRegistry; +import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; +import org.eclipse.tractusx.edc.api.edr.BaseEdrCacheApiController; +import org.eclipse.tractusx.edc.edr.spi.service.EdrService; + +@Consumes({ MediaType.APPLICATION_JSON }) +@Produces({ MediaType.APPLICATION_JSON }) +@Path("/v3/edrs") +public class EdrCacheApiV3Controller extends BaseEdrCacheApiController implements EdrCacheApiV3 { + + public EdrCacheApiV3Controller(EndpointDataReferenceStore edrStore, + TypeTransformerRegistry transformerRegistry, + JsonObjectValidatorRegistry validator, + Monitor monitor, + EdrService edrService, ContractNegotiationService contractNegotiationService) { + super(edrStore, transformerRegistry, validator, monitor, edrService, contractNegotiationService); + } + + @POST + @Override + public JsonObject initiateEdrNegotiationV3(JsonObject requestObject) { + return super.initiateEdrNegotiation(requestObject); + } + + @POST + @Path("/request") + @Override + public JsonArray requestEdrEntriesV3(JsonObject querySpecJson) { + return requestEdrEntries(querySpecJson); + } + + @GET + @Path("{transferProcessId}/dataaddress") + @Override + public JsonObject getEdrEntryDataAddressV3(@PathParam("transferProcessId") String transferProcessId, @DefaultValue("true") @QueryParam("auto_refresh") boolean autoRefresh) { + return super.getEdrEntryDataAddress(transferProcessId, autoRefresh); + } + + @DELETE + @Path("{transferProcessId}") + @Override + public void removeEdrEntryV3(@PathParam("transferProcessId") String transferProcessId) { + super.removeEdrEntry(transferProcessId); + } + + @POST + @Path("{transferProcessId}/refresh") + @Override + public JsonObject refreshEdrV3(@PathParam("transferProcessId") String transferProcessId) { + return super.refreshEdr(transferProcessId); + } + +} diff --git a/edc-extensions/edr/edr-api-v2/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/edc-extensions/edr/edr-api-v2/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension index d415057f4..f8cdc8154 100644 --- a/edc-extensions/edr/edr-api-v2/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension +++ b/edc-extensions/edr/edr-api-v2/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -17,4 +17,4 @@ # SPDX-License-Identifier: Apache-2.0 ################################################################################# -org.eclipse.tractusx.edc.api.edr.v2.EdrCacheApiExtension +org.eclipse.tractusx.edc.api.edr.EdrCacheApiExtension diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiControllerTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiControllerTest.java similarity index 89% rename from edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiControllerTest.java rename to edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiControllerTest.java index 1b63ff148..7d83f609a 100644 --- a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiControllerTest.java +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/BaseEdrCacheApiControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import io.restassured.specification.RequestSpecification; import jakarta.json.Json; @@ -45,7 +45,6 @@ import java.util.List; -import static io.restassured.RestAssured.given; import static io.restassured.http.ContentType.JSON; import static jakarta.json.Json.createObjectBuilder; import static java.util.UUID.randomUUID; @@ -62,8 +61,8 @@ import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.VOCAB; import static org.eclipse.edc.spi.constants.CoreConstants.EDC_NAMESPACE; import static org.eclipse.edc.spi.constants.CoreConstants.EDC_PREFIX; -import static org.eclipse.tractusx.edc.api.edr.v2.TestFunctions.createContractNegotiation; -import static org.eclipse.tractusx.edc.api.edr.v2.TestFunctions.negotiationRequest; +import static org.eclipse.tractusx.edc.api.edr.TestFunctions.createContractNegotiation; +import static org.eclipse.tractusx.edc.api.edr.TestFunctions.negotiationRequest; import static org.eclipse.tractusx.edc.edr.spi.types.RefreshMode.AUTO_REFRESH; import static org.eclipse.tractusx.edc.edr.spi.types.RefreshMode.NO_REFRESH; import static org.hamcrest.Matchers.equalTo; @@ -78,7 +77,7 @@ import static org.mockito.Mockito.when; @ApiTest -public class EdrCacheApiControllerTest extends RestControllerTestBase { +public abstract class BaseEdrCacheApiControllerTest extends RestControllerTestBase { private static final String TEST_TRANSFER_PROCESS_ID = "test-transfer-process-id"; private static final String TEST_TRANSFER_NEGOTIATION_ID = "test-cn-id"; @@ -86,11 +85,11 @@ public class EdrCacheApiControllerTest extends RestControllerTestBase { private static final String TEST_PROVIDER_ID = "test-provider-id"; private static final String TEST_ASSET_ID = "test-asset-id"; - private final TypeTransformerRegistry transformerRegistry = mock(); - private final JsonObjectValidatorRegistry validator = mock(); - private final EndpointDataReferenceStore edrStore = mock(); - private final EdrService edrService = mock(); - private final ContractNegotiationService contractNegotiationService = mock(); + protected final TypeTransformerRegistry transformerRegistry = mock(); + protected final JsonObjectValidatorRegistry validator = mock(); + protected final EndpointDataReferenceStore edrStore = mock(); + protected final EdrService edrService = mock(); + protected final ContractNegotiationService contractNegotiationService = mock(); @Test @@ -109,7 +108,7 @@ void initEdrNegotiation_shouldWork_whenValidRequest() { baseRequest() .contentType(JSON) .body(request) - .post("/v2/edrs") + .post("/edrs") .then() .statusCode(200) .body(ID, is(contractNegotiation.getId())); @@ -125,7 +124,7 @@ void initEdrNegotiation_shouldReturnBadRequest_whenValidInvalidRequest() { baseRequest() .contentType(JSON) .body(Json.createObjectBuilder().build()) - .post("/v2/edrs") + .post("/edrs") .then() .statusCode(400); @@ -144,7 +143,7 @@ void requestEdrEntries() { baseRequest() .contentType(JSON) .body("{}") - .post("/v2/edrs/request") + .post("/edrs/request") .then() .log().ifError() .statusCode(200) @@ -169,7 +168,7 @@ void getEdrEntryDataAddress() { baseRequest() .contentType(JSON) - .get("/v2/edrs/transferProcessId/dataaddress") + .get("/edrs/transferProcessId/dataaddress") .then() .log().ifError() .statusCode(200) @@ -194,7 +193,7 @@ void getEdrEntryDataAddress_withExplicitAutoRefreshTrue() { baseRequest() .contentType(JSON) - .get("/v2/edrs/transferProcessId/dataaddress?auto_refresh=true") + .get("/edrs/transferProcessId/dataaddress?auto_refresh=true") .then() .log().ifError() .statusCode(200) @@ -219,7 +218,7 @@ void getEdrEntryDataAddress_withExplicitAutoRefreshFalse() { baseRequest() .contentType(JSON) - .get("/v2/edrs/transferProcessId/dataaddress?auto_refresh=false") + .get("/edrs/transferProcessId/dataaddress?auto_refresh=false") .then() .log().ifError() .statusCode(200) @@ -241,7 +240,7 @@ void getEdrEntryDataAddress_whenNotFound() { baseRequest() .contentType(JSON) - .get("/v2/edrs/transferProcessId/dataaddress") + .get("/edrs/transferProcessId/dataaddress") .then() .log().ifError() .statusCode(404) @@ -258,7 +257,7 @@ void removeEdrEntry() { baseRequest() .contentType(JSON) - .delete("/v2/edrs/transferProcessId") + .delete("/edrs/transferProcessId") .then() .statusCode(204); verify(edrStore).delete("transferProcessId"); @@ -271,17 +270,14 @@ void removeEdrEntry_whenNotFound() { baseRequest() .contentType(JSON) - .delete("/v2/edrs/transferProcessId") + .delete("/edrs/transferProcessId") .then() .statusCode(404); verify(edrStore).delete("transferProcessId"); } - @Override - protected Object controller() { - return new EdrCacheApiController(edrStore, transformerRegistry, validator, mock(), edrService, contractNegotiationService); - } + protected abstract RequestSpecification baseRequest(); private JsonObjectBuilder createEdrEntryJson() { return createObjectBuilder() @@ -330,10 +326,4 @@ private ContractRequest createContractRequest() { .build()) .build(); } - - private RequestSpecification baseRequest() { - return given() - .baseUri("http://localhost:" + port) - .when(); - } } diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtensionTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtensionTest.java similarity index 86% rename from edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtensionTest.java rename to edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtensionTest.java index 1fd484120..6214ea21f 100644 --- a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiExtensionTest.java +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiExtensionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,14 +17,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import org.eclipse.edc.junit.extensions.DependencyInjectionExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import org.eclipse.edc.transform.spi.TypeTransformerRegistry; import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; import org.eclipse.edc.web.spi.WebService; -import org.eclipse.tractusx.edc.api.edr.v2.transform.JsonObjectFromEndpointDataReferenceEntryTransformer; +import org.eclipse.tractusx.edc.api.edr.transform.JsonObjectFromEndpointDataReferenceEntryTransformer; +import org.eclipse.tractusx.edc.api.edr.v2.EdrCacheApiV2Controller; +import org.eclipse.tractusx.edc.api.edr.v3.EdrCacheApiV3Controller; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -56,7 +58,8 @@ void setUp(ServiceExtensionContext context) { void initialize_shouldRegisterControllers(EdrCacheApiExtension extension, ServiceExtensionContext context) { extension.initialize(context); - verify(webService).registerResource(any(), isA(EdrCacheApiController.class)); + verify(webService).registerResource(any(), isA(EdrCacheApiV2Controller.class)); + verify(webService).registerResource(any(), isA(EdrCacheApiV3Controller.class)); } @Test diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiTest.java similarity index 94% rename from edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiTest.java rename to edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiTest.java index 62b1b3c1e..212204426 100644 --- a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiTest.java +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrCacheApiTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -36,7 +36,7 @@ import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.VALUE; import static org.eclipse.edc.junit.assertions.AbstractResultAssert.assertThat; -import static org.eclipse.tractusx.edc.api.edr.v2.EdrCacheApi.EndpointDataReferenceEntrySchema.EDR_ENTRY_OUTPUT_EXAMPLE; +import static org.eclipse.tractusx.edc.api.edr.v2.EdrCacheApiV2.EndpointDataReferenceEntrySchema.EDR_ENTRY_OUTPUT_EXAMPLE; import static org.mockito.Mockito.mock; public class EdrCacheApiTest { diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/TestFunctions.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/TestFunctions.java similarity index 97% rename from edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/TestFunctions.java rename to edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/TestFunctions.java index 45ac84014..d5c7c3005 100644 --- a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/TestFunctions.java +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/TestFunctions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2; +package org.eclipse.tractusx.edc.api.edr; import jakarta.json.Json; import jakarta.json.JsonObject; diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java similarity index 97% rename from edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java rename to edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java index 80aceda85..56ab8170d 100644 --- a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/transform/JsonObjectFromEndpointDataReferenceEntryTransformerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package org.eclipse.tractusx.edc.api.edr.v2.transform; +package org.eclipse.tractusx.edc.api.edr.transform; import jakarta.json.Json; import org.eclipse.edc.edr.spi.types.EndpointDataReferenceEntry; diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2ControllerTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2ControllerTest.java new file mode 100644 index 000000000..24d449541 --- /dev/null +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v2/EdrCacheApiV2ControllerTest.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.edr.v2; + +import io.restassured.specification.RequestSpecification; +import org.eclipse.edc.junit.annotations.ApiTest; +import org.eclipse.tractusx.edc.api.edr.BaseEdrCacheApiControllerTest; + +import static io.restassured.RestAssured.given; +import static org.mockito.Mockito.mock; + +@ApiTest +public class EdrCacheApiV2ControllerTest extends BaseEdrCacheApiControllerTest { + + @Override + protected Object controller() { + return new EdrCacheApiV2Controller(edrStore, transformerRegistry, validator, mock(), edrService, contractNegotiationService); + } + + protected RequestSpecification baseRequest() { + return given() + .baseUri("http://localhost:" + port + "/v2") + .when(); + } + +} diff --git a/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3ControllerTest.java b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3ControllerTest.java new file mode 100644 index 000000000..ce7d19684 --- /dev/null +++ b/edc-extensions/edr/edr-api-v2/src/test/java/org/eclipse/tractusx/edc/api/edr/v3/EdrCacheApiV3ControllerTest.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.eclipse.tractusx.edc.api.edr.v3; + +import io.restassured.specification.RequestSpecification; +import org.eclipse.edc.junit.annotations.ApiTest; +import org.eclipse.tractusx.edc.api.edr.BaseEdrCacheApiControllerTest; + +import static io.restassured.RestAssured.given; +import static org.mockito.Mockito.mock; + +@ApiTest +public class EdrCacheApiV3ControllerTest extends BaseEdrCacheApiControllerTest { + + @Override + protected Object controller() { + return new EdrCacheApiV3Controller(edrStore, transformerRegistry, validator, mock(), edrService, contractNegotiationService); + } + + protected RequestSpecification baseRequest() { + return given() + .baseUri("http://localhost:" + port + "/v3") + .when(); + } + +} diff --git a/edc-extensions/migrations/control-plane-migration/build.gradle.kts b/edc-extensions/migrations/control-plane-migration/build.gradle.kts index 2ff1aa7fa..fbb1187b2 100644 --- a/edc-extensions/migrations/control-plane-migration/build.gradle.kts +++ b/edc-extensions/migrations/control-plane-migration/build.gradle.kts @@ -25,7 +25,6 @@ plugins { dependencies { implementation(project(":edc-extensions:migrations:postgresql-migration-lib")) implementation(libs.edc.spi.core) - implementation(libs.edc.junit) implementation(libs.edc.spi.transaction.datasource) implementation(libs.edc.sql.assetindex) implementation(libs.edc.sql.core) @@ -37,5 +36,6 @@ dependencies { // https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine runtimeOnly(libs.flyway.database.postgres) + testImplementation(libs.edc.junit) testImplementation(testFixtures(libs.edc.sql.core)) } diff --git a/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/DataPlaneInstancePostgresqlMigrationExtension.java b/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/DataPlaneInstancePostgresqlMigrationExtension.java new file mode 100644 index 000000000..a0be305a7 --- /dev/null +++ b/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/DataPlaneInstancePostgresqlMigrationExtension.java @@ -0,0 +1,28 @@ +/******************************************************************************** + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +package org.eclipse.tractusx.edc.postgresql.migration; + +public class DataPlaneInstancePostgresqlMigrationExtension extends AbstractPostgresqlMigrationExtension { + private static final String NAME_SUBSYSTEM = "dataplaneinstance"; + + protected String getSubsystemName() { + return NAME_SUBSYSTEM; + } +} diff --git a/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/FederatedCatalogCacheMigrationExtension.java b/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/FederatedCatalogCacheMigrationExtension.java new file mode 100644 index 000000000..327c8b731 --- /dev/null +++ b/edc-extensions/migrations/control-plane-migration/src/main/java/org/eclipse/tractusx/edc/postgresql/migration/FederatedCatalogCacheMigrationExtension.java @@ -0,0 +1,29 @@ +/******************************************************************************** + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +package org.eclipse.tractusx.edc.postgresql.migration; + +public class FederatedCatalogCacheMigrationExtension extends AbstractPostgresqlMigrationExtension { + private static final String NAME_SUBSYSTEM = "federatedcatalog"; + + @Override + protected String getSubsystemName() { + return NAME_SUBSYSTEM; + } +} diff --git a/edc-extensions/migrations/control-plane-migration/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/edc-extensions/migrations/control-plane-migration/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension index 20a17d939..2df47b79e 100644 --- a/edc-extensions/migrations/control-plane-migration/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension +++ b/edc-extensions/migrations/control-plane-migration/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -20,10 +20,12 @@ org.eclipse.tractusx.edc.postgresql.migration.AssetPostgresqlMigrationExtension +org.eclipse.tractusx.edc.postgresql.migration.BusinessGroupPostgresMigrationExtension org.eclipse.tractusx.edc.postgresql.migration.ContractDefinitionPostgresqlMigrationExtension org.eclipse.tractusx.edc.postgresql.migration.ContractNegotiationPostgresqlMigrationExtension -org.eclipse.tractusx.edc.postgresql.migration.PolicyPostgresqlMigrationExtension +org.eclipse.tractusx.edc.postgresql.migration.DataPlaneInstancePostgresqlMigrationExtension +org.eclipse.tractusx.edc.postgresql.migration.EdrIndexPostgresqlMigrationExtension +org.eclipse.tractusx.edc.postgresql.migration.FederatedCatalogCacheMigrationExtension org.eclipse.tractusx.edc.postgresql.migration.PolicyMonitorPostgresqlMigrationExtension +org.eclipse.tractusx.edc.postgresql.migration.PolicyPostgresqlMigrationExtension org.eclipse.tractusx.edc.postgresql.migration.TransferProcessPostgresqlMigrationExtension -org.eclipse.tractusx.edc.postgresql.migration.BusinessGroupPostgresMigrationExtension -org.eclipse.tractusx.edc.postgresql.migration.EdrIndexPostgresqlMigrationExtension \ No newline at end of file diff --git a/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/dataplaneinstance/V0_0_1__Init_Dataplaneinstance.sql b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/dataplaneinstance/V0_0_1__Init_Dataplaneinstance.sql new file mode 100644 index 000000000..e7e50229e --- /dev/null +++ b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/dataplaneinstance/V0_0_1__Init_Dataplaneinstance.sql @@ -0,0 +1,34 @@ +-- +-- Copyright (c) 2024 Contributors to the Eclipse Foundation +-- +-- This program and the accompanying materials are made available under the +-- terms of the Apache License, Version 2.0 which is available at +-- https://www.apache.org/licenses/LICENSE-2.0 +-- +-- SPDX-License-Identifier: Apache-2.0 +-- +-- Contributors: +-- Contributors to the Eclipse Foundation - initial API and implementation +-- + + +CREATE TABLE IF NOT EXISTS edc_lease +( + leased_by VARCHAR NOT NULL, + leased_at BIGINT, + lease_duration INTEGER NOT NULL, + lease_id VARCHAR NOT NULL + CONSTRAINT lease_pk + PRIMARY KEY +); + + +CREATE TABLE IF NOT EXISTS edc_data_plane_instance +( + id VARCHAR NOT NULL PRIMARY KEY, + data JSON, + lease_id VARCHAR + CONSTRAINT data_plane_instance_lease_id_fk + REFERENCES edc_lease + ON DELETE SET NULL +); diff --git a/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/federatedcatalog/V0_0_1__Init_FederatedCatalogCache_Database_Schema.sql b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/federatedcatalog/V0_0_1__Init_FederatedCatalogCache_Database_Schema.sql new file mode 100644 index 000000000..e02829880 --- /dev/null +++ b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/federatedcatalog/V0_0_1__Init_FederatedCatalogCache_Database_Schema.sql @@ -0,0 +1,25 @@ +-- +-- Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +-- +-- This program and the accompanying materials are made available under the +-- terms of the Apache License, Version 2.0 which is available at +-- https://www.apache.org/licenses/LICENSE-2.0 +-- +-- SPDX-License-Identifier: Apache-2.0 +-- +-- Contributors: +-- Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation +-- + +-- +-- table: edc_federated_catalog +-- + +CREATE TABLE IF NOT EXISTS edc_federated_catalog +( + id VARCHAR PRIMARY KEY NOT NULL, + catalog JSON, + marked BOOLEAN DEFAULT FALSE +); + + diff --git a/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/policy/V0_0_5__Add_Profiles.sql b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/policy/V0_0_5__Add_Profiles.sql new file mode 100644 index 000000000..0932d4f16 --- /dev/null +++ b/edc-extensions/migrations/control-plane-migration/src/main/resources/org/eclipse/tractusx/edc/postgresql/migration/policy/V0_0_5__Add_Profiles.sql @@ -0,0 +1,15 @@ +-- +-- Copyright (c) 2024 Contributors to the Eclipse Foundation +-- +-- This program and the accompanying materials are made available under the +-- terms of the Apache License, Version 2.0 which is available at +-- https://www.apache.org/licenses/LICENSE-2.0 +-- +-- SPDX-License-Identifier: Apache-2.0 +-- +-- Contributors: +-- Contributors to the Eclipse Foundation - initial API and implementation +-- + +-- add columns +ALTER TABLE edc_policydefinitions ADD COLUMN profiles JSON; diff --git a/edc-extensions/migrations/data-plane-migration/build.gradle.kts b/edc-extensions/migrations/data-plane-migration/build.gradle.kts index 2ff1aa7fa..fbb1187b2 100644 --- a/edc-extensions/migrations/data-plane-migration/build.gradle.kts +++ b/edc-extensions/migrations/data-plane-migration/build.gradle.kts @@ -25,7 +25,6 @@ plugins { dependencies { implementation(project(":edc-extensions:migrations:postgresql-migration-lib")) implementation(libs.edc.spi.core) - implementation(libs.edc.junit) implementation(libs.edc.spi.transaction.datasource) implementation(libs.edc.sql.assetindex) implementation(libs.edc.sql.core) @@ -37,5 +36,6 @@ dependencies { // https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine runtimeOnly(libs.flyway.database.postgres) + testImplementation(libs.edc.junit) testImplementation(testFixtures(libs.edc.sql.core)) } diff --git a/edc-extensions/migrations/postgresql-migration-lib/build.gradle.kts b/edc-extensions/migrations/postgresql-migration-lib/build.gradle.kts index e993eec8b..22894fe42 100644 --- a/edc-extensions/migrations/postgresql-migration-lib/build.gradle.kts +++ b/edc-extensions/migrations/postgresql-migration-lib/build.gradle.kts @@ -25,7 +25,6 @@ plugins { dependencies { implementation(project(":core:core-utils")) implementation(libs.edc.spi.core) - implementation(libs.edc.junit) implementation(libs.edc.spi.transaction.datasource) implementation(libs.edc.sql.assetindex) implementation(libs.edc.sql.core) @@ -36,4 +35,6 @@ dependencies { // so we need to add PG support explicitly // https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine runtimeOnly(libs.flyway.database.postgres) + + testImplementation(libs.edc.junit) } diff --git a/edc-tests/edc-controlplane/catalog-tests/build.gradle.kts b/edc-tests/edc-controlplane/catalog-tests/build.gradle.kts index 34613d0c2..7b20e8d38 100644 --- a/edc-tests/edc-controlplane/catalog-tests/build.gradle.kts +++ b/edc-tests/edc-controlplane/catalog-tests/build.gradle.kts @@ -29,6 +29,7 @@ dependencies { testImplementation(libs.edc.junit) testImplementation(libs.restAssured) testImplementation(libs.awaitility) + testImplementation(libs.edc.fc.spi.crawler) testRuntimeOnly(libs.edc.transaction.local) testCompileOnly(project(":edc-tests:runtime:runtime-memory")) diff --git a/edc-tests/edc-controlplane/catalog-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/FederatedCatalogTest.java b/edc-tests/edc-controlplane/catalog-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/FederatedCatalogTest.java new file mode 100644 index 000000000..eaedc2e81 --- /dev/null +++ b/edc-tests/edc-controlplane/catalog-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/FederatedCatalogTest.java @@ -0,0 +1,141 @@ +/******************************************************************************** + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +package org.eclipse.tractusx.edc.tests.catalog; + +import org.eclipse.edc.crawler.spi.TargetNode; +import org.eclipse.edc.crawler.spi.TargetNodeDirectory; +import org.eclipse.edc.junit.annotations.EndToEndTest; +import org.eclipse.edc.junit.annotations.PostgresqlIntegrationTest; +import org.eclipse.edc.junit.extensions.RuntimeExtension; +import org.eclipse.tractusx.edc.tests.participant.TransferParticipant; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import java.util.List; +import java.util.stream.Collectors; + +import static io.restassured.http.ContentType.JSON; +import static org.awaitility.Awaitility.await; +import static org.eclipse.edc.connector.controlplane.test.system.utils.PolicyFixtures.noConstraintPolicy; +import static org.eclipse.tractusx.edc.tests.TestRuntimeConfiguration.CONSUMER_BPN; +import static org.eclipse.tractusx.edc.tests.TestRuntimeConfiguration.CONSUMER_NAME; +import static org.eclipse.tractusx.edc.tests.TestRuntimeConfiguration.PROVIDER_BPN; +import static org.eclipse.tractusx.edc.tests.TestRuntimeConfiguration.PROVIDER_NAME; +import static org.eclipse.tractusx.edc.tests.participant.TractusxParticipantBase.ASYNC_POLL_INTERVAL; +import static org.eclipse.tractusx.edc.tests.participant.TractusxParticipantBase.ASYNC_TIMEOUT; +import static org.eclipse.tractusx.edc.tests.runtimes.Runtimes.memoryRuntime; +import static org.eclipse.tractusx.edc.tests.runtimes.Runtimes.pgRuntime; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; + +public class FederatedCatalogTest { + + protected static final TransferParticipant CONSUMER = TransferParticipant.Builder.newInstance() + .name(CONSUMER_NAME) + .id(CONSUMER_BPN) + .build(); + + + protected static final TransferParticipant PROVIDER = TransferParticipant.Builder.newInstance() + .name(PROVIDER_NAME) + .id(PROVIDER_BPN) + .build(); + + abstract static class Tests { + + @Test + @DisplayName("Consumer gets cached catalog with provider entry") + void requestCatalog_fulfillsPolicy_shouldReturnOffer() { + + // arrange + PROVIDER.createAsset("test-asset"); + var ap = PROVIDER.createPolicyDefinition(noConstraintPolicy()); + var cp = PROVIDER.createPolicyDefinition(noConstraintPolicy()); + PROVIDER.createContractDefinition("test-asset", "test-def", ap, cp); + + + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + CONSUMER.getFederatedCatalog() + .log().ifValidationFails() + .statusCode(200) + .contentType(JSON) + .body("size()", is(1)) + .body("[0].'dcat:dataset'.'@id'", equalTo("test-asset")); + }); + } + } + + static class TestTargetNodeDirectory implements TargetNodeDirectory { + + private final List participants; + + TestTargetNodeDirectory(List participants) { + this.participants = participants; + } + + @Override + public List getAll() { + return participants.stream() + .map(p -> new TargetNode(p.getDid(), p.getBpn(), p.getProtocolEndpoint().getUrl().toString(), List.of("dataspace-protocol-http"))) + .collect(Collectors.toList()); + } + + @Override + public void insert(TargetNode node) { + + } + } + + @Nested + @EndToEndTest + class InMemory extends Tests { + + @RegisterExtension + protected static final RuntimeExtension CONSUMER_RUNTIME = memoryRuntime(CONSUMER.getName(), CONSUMER.getBpn(), CONSUMER.getConfiguration()); + + @RegisterExtension + protected static final RuntimeExtension PROVIDER_RUNTIME = memoryRuntime(PROVIDER.getName(), PROVIDER.getBpn(), PROVIDER.getConfiguration()); + + + static { + CONSUMER_RUNTIME.registerServiceMock(TargetNodeDirectory.class, new TestTargetNodeDirectory(List.of(PROVIDER))); + } + } + + @Nested + @PostgresqlIntegrationTest + class Postgres extends Tests { + + @RegisterExtension + protected static final RuntimeExtension CONSUMER_RUNTIME = pgRuntime(CONSUMER.getName(), CONSUMER.getBpn(), CONSUMER.getConfiguration()); + + @RegisterExtension + protected static final RuntimeExtension PROVIDER_RUNTIME = pgRuntime(PROVIDER.getName(), PROVIDER.getBpn(), PROVIDER.getConfiguration()); + + static { + CONSUMER_RUNTIME.registerServiceMock(TargetNodeDirectory.class, new TestTargetNodeDirectory(List.of(PROVIDER))); + } + } + +} diff --git a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/ParticipantEdrApi.java b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/ParticipantEdrApi.java index 028b77bcb..5f7e11781 100644 --- a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/ParticipantEdrApi.java +++ b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/ParticipantEdrApi.java @@ -88,7 +88,7 @@ public ValidatableResponse getEdrRequest(String transferProcessId) { public ValidatableResponse getEdrWithRefresh(String transferProcessId, boolean autoRefresh) { return baseEdrRequest() .when() - .get("/v2/edrs/{id}/dataaddress?auto_refresh={auto_refresh}", transferProcessId, autoRefresh) + .get("/v3/edrs/{id}/dataaddress?auto_refresh={auto_refresh}", transferProcessId, autoRefresh) .then() .log().ifError(); @@ -100,7 +100,7 @@ public ValidatableResponse getEdrWithRefresh(String transferProcessId, boolean a public ValidatableResponse refreshEdr(String transferProcessId) { return baseEdrRequest() .when() - .post("/v2/edrs/{id}/refresh", transferProcessId) + .post("/v3/edrs/{id}/refresh", transferProcessId) .then() .log().ifError(); } @@ -128,7 +128,7 @@ public String negotiateEdr(TransferParticipant other, String assetId, JsonArray var response = baseEdrRequest() .when() .body(requestBody) - .post("/v2/edrs") + .post("/v3/edrs") .then(); var body = response.extract().body().asString(); @@ -148,7 +148,7 @@ public JsonArray getEdrEntriesByContractNegotiationId(String contractNegotiation return baseEdrRequest() .when() .body(query) - .post("/v2/edrs/request") + .post("/v3/edrs/request") .then() .statusCode(200) .extract() @@ -167,7 +167,7 @@ public JsonArray getEdrEntriesByAgreementId(String agreementId) { return baseEdrRequest() .when() .body(query) - .post("/v2/edrs/request") + .post("/v3/edrs/request") .then() .statusCode(200) .extract() @@ -186,7 +186,7 @@ public JsonArray getEdrEntriesByAssetId(String assetId) { return baseEdrRequest() .when() .body(query) - .post("/v2/edrs/request") + .post("/v3/edrs/request") .then() .statusCode(200) .extract() diff --git a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/participant/TractusxParticipantBase.java b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/participant/TractusxParticipantBase.java index 60bba45f5..9abaaf095 100644 --- a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/participant/TractusxParticipantBase.java +++ b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/participant/TractusxParticipantBase.java @@ -63,12 +63,11 @@ public abstract class TractusxParticipantBase extends IdentityParticipant { private final URI controlPlaneControl = URI.create("http://localhost:" + getFreePort() + "/control"); private final URI backendProviderProxy = URI.create("http://localhost:" + getFreePort() + "/events"); private final URI dataPlanePublic = URI.create("http://localhost:" + getFreePort() + "/public"); - protected ParticipantEdrApi edrs; protected ParticipantDataApi data; protected ParticipantConsumerDataPlaneApi dataPlane; - protected String did; + protected Endpoint federatedCatalog; public void createAsset(String id) { createAsset(id, new HashMap<>(), Map.of("type", "test-type")); @@ -94,8 +93,10 @@ public Map getConfiguration() { put("web.http.management.path", managementEndpoint.getUrl().getPath()); put("web.http.control.port", String.valueOf(controlPlaneControl.getPort())); put("web.http.control.path", controlPlaneControl.getPath()); - put("web.http.catalog.port", String.valueOf(getFreePort())); - put("web.http.catalog.path", "/api/catalog"); + put("web.http.catalog.port", String.valueOf(federatedCatalog.getUrl().getPort())); + put("web.http.catalog.path", federatedCatalog.getUrl().getPath()); + put("web.http.catalog.auth.type", "tokenbased"); + put("web.http.catalog.auth.key", MANAGEMENT_API_KEY); put("edc.dsp.callback.address", protocolEndpoint.getUrl().toString()); put("edc.api.auth.key", MANAGEMENT_API_KEY); put("web.http.public.path", "/api/public"); @@ -118,6 +119,8 @@ public Map getConfiguration() { put("tx.edc.iam.sts.dim.url", "http://sts.example.com"); put("tx.edc.iam.iatp.bdrs.server.url", "http://sts.example.com"); put("edc.dataplane.api.public.baseurl", "http://localhost:%d/api/public/v2/data".formatted(dataPlanePublic.getPort())); + put("edc.catalog.cache.execution.delay.seconds", "2"); + put("edc.catalog.cache.execution.period.seconds", "2"); } }; } @@ -156,7 +159,7 @@ public void storeBusinessPartner(String bpn, String... groups) { .contentType(JSON) .body(body) .when() - .post("/business-partner-groups") + .post("/v3/business-partner-groups") .then() .statusCode(204); } @@ -192,11 +195,11 @@ public ValidatableResponse getCatalog(TractusxParticipantBase provider) { .add(CONTEXT, createObjectBuilder().add(VOCAB, EDC_NAMESPACE)) .add(TYPE, "CatalogRequest") .add("counterPartyId", provider.id) - .add("counterPartyAddress", provider.protocolEndpoint.getUrl().toString()) + .add("counterPartyAddress", provider.federatedCatalog.getUrl().toString()) .add("protocol", protocol); - return managementEndpoint.baseRequest() + return provider.federatedCatalog.baseRequest() .contentType(JSON) .when() .body(requestBodyBuilder.build()) @@ -205,6 +208,21 @@ public ValidatableResponse getCatalog(TractusxParticipantBase provider) { } + public ValidatableResponse getFederatedCatalog() { + var requestBodyBuilder = createObjectBuilder() + .add(CONTEXT, createObjectBuilder().add(VOCAB, EDC_NAMESPACE)) + .add(TYPE, "QuerySpec"); + + + return federatedCatalog.baseRequest() + .contentType(JSON) + .when() + .body(requestBodyBuilder.build()) + .post("/v1alpha/catalog/query") + .then(); + + } + public static class Builder

> extends Participant.Builder { protected Builder(P participant) { @@ -222,6 +240,7 @@ public TractusxParticipantBase build() { participant.did = "did:web:" + participant.name.toLowerCase(); } + participant.federatedCatalog = new Endpoint(URI.create("http://localhost:" + getFreePort() + "/api/catalog"), Map.of("x-api-key", MANAGEMENT_API_KEY)); super.managementEndpoint(new Endpoint(URI.create("http://localhost:" + getFreePort() + "/api/management"), Map.of("x-api-key", MANAGEMENT_API_KEY))); super.protocolEndpoint(new Endpoint(URI.create("http://localhost:" + getFreePort() + "/protocol"))); super.timeout(ASYNC_TIMEOUT); diff --git a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/runtimes/PgRuntimeExtension.java b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/runtimes/PgRuntimeExtension.java index 3d2e8a86a..122080a21 100644 --- a/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/runtimes/PgRuntimeExtension.java +++ b/edc-tests/edc-controlplane/fixtures/src/testFixtures/java/org/eclipse/tractusx/edc/tests/runtimes/PgRuntimeExtension.java @@ -41,7 +41,7 @@ public class PgRuntimeExtension extends ParticipantRuntimeExtension { private static final String PASSWORD = "password"; private static final List DATASOURCES = List.of("asset", "contractdefinition", "contractnegotiation", "policy", "transferprocess", "bpn", - "policy-monitor", "edr", "dataplane", "accesstokendata"); + "policy-monitor", "edr", "dataplane", "accesstokendata", "federatedcatalog", "dataplaneinstance"); private final PostgreSQLContainer postgreSqlContainer; private final String dbName; @@ -95,15 +95,15 @@ public String jdbcUrl(String name) { return baseJdbcUrl() + name + "?currentSchema=" + DB_SCHEMA_NAME; } + public String baseJdbcUrl() { + return format("jdbc:postgresql://%s:%s/", postgreSqlContainer.getHost(), postgreSqlContainer.getFirstMappedPort()); + } + private void createDatabase() { try (var connection = DriverManager.getConnection(baseJdbcUrl() + "postgres", postgreSqlContainer.getUsername(), postgreSqlContainer.getPassword())) { connection.createStatement().execute(String.format("create database %s;", postgreSqlContainer.getDatabaseName())); } catch (SQLException ignored) { - + // ignored } } - - public String baseJdbcUrl() { - return format("jdbc:postgresql://%s:%s/", postgreSqlContainer.getHost(), postgreSqlContainer.getFirstMappedPort()); - } } diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts b/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts index 8a5a15e06..f56056ae2 100644 --- a/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts @@ -32,7 +32,7 @@ dependencies { testImplementation(libs.edc.config.filesystem) testImplementation(libs.edc.dpf.http) testImplementation(libs.edc.auth.tokenbased) - testImplementation(libs.edc.dpf.selector.spi) + testImplementation(libs.edc.spi.dataplane.selector) testImplementation(libs.testcontainers.junit) testImplementation(libs.edc.aws.s3.core) testImplementation(libs.aws.s3) diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java index bf6b5542b..5c14a7882 100644 --- a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java @@ -50,6 +50,8 @@ public static Map baseConfig(String controlPath, int controlPort put("edc.iam.sts.oauth.client.secret.alias", "test-clientid-alias"); put("tx.edc.iam.sts.dim.url", "http://sts.example.com"); put("tx.edc.iam.iatp.bdrs.server.url", "http://sts.example.com"); + put("edc.transfer.proxy.token.verifier.publickey.alias", "not-used-but-mandatory"); + put("edc.transfer.proxy.token.signer.privatekey.alias", "not-used-but-mandatory"); } }; } diff --git a/edc-tests/runtime/mock-connector/build.gradle.kts b/edc-tests/runtime/mock-connector/build.gradle.kts index 267e440d2..a15964124 100644 --- a/edc-tests/runtime/mock-connector/build.gradle.kts +++ b/edc-tests/runtime/mock-connector/build.gradle.kts @@ -23,7 +23,7 @@ plugins { `java-library` id("application") id("com.github.johnrengelman.shadow") version "8.1.1" - id("io.swagger.core.v3.swagger-gradle-plugin") + id(libs.plugins.swagger.get().pluginId) } @@ -58,7 +58,6 @@ edcBuild { } tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/edc-tests/runtime/mock-connector/notice.md b/edc-tests/runtime/mock-connector/notice.md index 69d617e33..a57605c57 100644 --- a/edc-tests/runtime/mock-connector/notice.md +++ b/edc-tests/runtime/mock-connector/notice.md @@ -10,12 +10,12 @@ Eclipse Tractus-X product(s) installed within the image: - GitHub: - Project home: -- Dockerfile: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:22_36-jre-alpine](https://github.com/adoptium/containers) +- [eclipse-temurin:22.0.1_8-jre-alpine](https://github.com/adoptium/containers) - Official Eclipse Temurin DockerHub page: - Eclipse Temurin Project: - Additional information about the Eclipse Temurin diff --git a/edc-tests/runtime/mock-connector/src/main/docker/Dockerfile b/edc-tests/runtime/mock-connector/src/main/docker/Dockerfile deleted file mode 100644 index a7cc2e36c..000000000 --- a/edc-tests/runtime/mock-connector/src/main/docker/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -################################################################################# -# Copyright (c) 2024 Bayerische Motoren Werk Aktiengesellschaft (BMW AG) -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR -ARG OTEL_JAR -ARG ADDITIONAL_FILES - -ARG APP_USER=docker -ARG APP_UID=10100 - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-mock.jar -COPY ${ADDITIONAL_FILES} ./ - -HEALTHCHECK NONE - -CMD ["java", \ - "-Djava.security.egd=file:/dev/urandom", \ - "-jar", \ - "edc-mock.jar"] diff --git a/edc-tests/runtime/mock-connector/src/main/java/org/eclipse/tractusx/edc/mock/MockServiceExtension.java b/edc-tests/runtime/mock-connector/src/main/java/org/eclipse/tractusx/edc/mock/MockServiceExtension.java index 7176f87dd..46cdc7f7e 100644 --- a/edc-tests/runtime/mock-connector/src/main/java/org/eclipse/tractusx/edc/mock/MockServiceExtension.java +++ b/edc-tests/runtime/mock-connector/src/main/java/org/eclipse/tractusx/edc/mock/MockServiceExtension.java @@ -80,13 +80,14 @@ public AssetService mockAssetService(ServiceExtensionContext context) { @Provider public CatalogService mockCatalogService() { return new CatalogService() { + @Override - public CompletableFuture> requestCatalog(String counterPartyId, String counterPartyAddress, String protocol, QuerySpec querySpec) { + public CompletableFuture> requestCatalog(String s, String s1, String s2, QuerySpec querySpec, String... strings) { return null; } @Override - public CompletableFuture> requestDataset(String id, String counterPartyId, String counterPartyAddress, String protocol) { + public CompletableFuture> requestDataset(String s, String s1, String s2, String s3) { return null; } }; @@ -117,4 +118,4 @@ public TransferProcessService mockTransferProcessService() { return new TransferProcessServiceStub(new ResponseQueue(recordedRequests, monitor)); } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index b460f00a6..1fca5d6b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group=org.eclipse.tractusx.edc -version=0.8.0-rc1 +version=0.8.0-rc2 # configure the build: txScmConnection=scm:git:git@github.com:eclipse-tractusx/tractusx-edc.git txWebsiteUrl=https://github.com/eclipse-tractusx/tractusx-edc.git diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19382b8ac..a5f23f299 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,27 +2,29 @@ format.version = "1.1" [versions] -edc = "0.8.0" -assertj = "3.26.0" +edc = "0.8.2-20240805-SNAPSHOT" + +assertj = "3.26.3" awaitility = "4.2.1" -aws = "2.26.17" -azure-identity = "1.13.0" -azure-storage-blob = "12.26.1" +aws = "2.26.29" +azure-identity = "1.13.2" +azure-storage-blob = "12.27.0" bouncyCastle-jdk18on = "1.78.1" -flyway = "10.15.2" -jackson = "2.17.1" +flyway = "10.17.0" +jackson = "2.17.2" jakarta-json = "2.0.1" jupiter = "5.10.3" nimbus = "9.40" netty-mockserver = "5.15.0" okhttp = "4.12.0" +opentelemetry = "2.6.0" postgres = "42.7.3" restAssured = "5.5.0" rsApi = "4.0.0" slf4j = "2.0.13" -testcontainers = "1.19.8" -tink = "1.13.0" -titanium = "1.4.0" +testcontainers = "1.20.1" +tink = "1.14.0" +titanium = "1.4.1" [libraries] edc-spi-catalog = { module = "org.eclipse.edc:catalog-spi", version.ref = "edc" } @@ -80,7 +82,9 @@ edc-api-controlplane = { module = "org.eclipse.edc:control-plane-api", version.r edc-dsp = { module = "org.eclipse.edc:dsp", version.ref = "edc" } edc-iam-mock = { module = "org.eclipse.edc:iam-mock", version.ref = "edc" } edc-auth-tokenbased = { module = "org.eclipse.edc:auth-tokenbased", version.ref = "edc" } +edc-auth-delegated = { module = "org.eclipse.edc:auth-delegated", version.ref = "edc" } edc-auth-oauth2-client = { module = "org.eclipse.edc:oauth2-client", version.ref = "edc" } +edc-auth-configuration = { module = "org.eclipse.edc:auth-configuration", version.ref = "edc" } edc-transaction-local = { module = "org.eclipse.edc:transaction-local", version.ref = "edc" } edc-ext-http = { module = "org.eclipse.edc:http", version.ref = "edc" } edc-ext-azure-cosmos-core = { module = "org.eclipse.edc:azure-cosmos-core", version.ref = "edc" } @@ -158,6 +162,7 @@ edc-identity-trust-sts-client-configuration = { module = "org.eclipse.edc:identi edc-fc-spi-crawler = { module = "org.eclipse.edc:crawler-spi", version.ref = "edc" } edc-fc-core = { module = "org.eclipse.edc:federated-catalog-core", version.ref = "edc" } edc-fc-api = { module = "org.eclipse.edc:federated-catalog-api", version.ref = "edc" } +edc-fc-sql-cache = { module = "org.eclipse.edc:federated-catalog-cache-sql", version.ref = "edc" } ## IH for testing @@ -171,14 +176,18 @@ edc-ih-participants = { module = "org.eclipse.edc:identity-hub-participants", ve edc-ih-did = { module = "org.eclipse.edc:identity-hub-did", version.ref = "edc" } edc-ih-core = { module = "org.eclipse.edc:identity-hub-core", version.ref = "edc" } +# Data plane selector +edc-spi-dataplane-selector = { module = "org.eclipse.edc:data-plane-selector-spi", version.ref = "edc" } +edc-dpf-selector-core = { module = "org.eclipse.edc:data-plane-selector-core", version.ref = "edc" } +edc-data-plane-selector-client = { module = "org.eclipse.edc:data-plane-selector-client", version.ref = "edc" } +edc-data-plane-selector-control-api = { module = "org.eclipse.edc:data-plane-selector-control-api", version.ref = "edc" } +edc-data-plane-instance-store-sql = { module = "org.eclipse.edc:data-plane-instance-store-sql", version.ref = "edc" } + # DPF modules edc-spi-dataplane-dataplane = { module = "org.eclipse.edc:data-plane-spi", version.ref = "edc" } edc-spi-dataplane-transfer = { module = "org.eclipse.edc:transfer-data-plane-spi", version.ref = "edc" } -edc-spi-dataplane-selector = { module = "org.eclipse.edc:data-plane-selector-spi", version.ref = "edc" } edc-spi-dataplane-http = { module = "org.eclipse.edc:data-plane-http-spi", version.ref = "edc" } edc-dpf-transferclient = { module = "org.eclipse.edc:data-plane-transfer-client", version.ref = "edc" } -edc-dpf-selector-spi = { module = "org.eclipse.edc:data-plane-selector-spi", version.ref = "edc" } -edc-dpf-selector-core = { module = "org.eclipse.edc:data-plane-selector-core", version.ref = "edc" } edc-dpf-transfer-signaling = { module = "org.eclipse.edc:transfer-data-plane-signaling", version.ref = "edc" } edc-dpf-core = { module = "org.eclipse.edc:data-plane-core", version.ref = "edc" } edc-dpf-util = { module = "org.eclipse.edc:data-plane-util", version.ref = "edc" } @@ -189,8 +198,6 @@ edc-dpf-api-control = { module = "org.eclipse.edc:data-plane-control-api", versi edc-dpf-api-public-v2 = { module = "org.eclipse.edc:data-plane-public-api-v2", version.ref = "edc" } edc-dpf-api-signaling = { module = "org.eclipse.edc:data-plane-signaling-api", version.ref = "edc" } -edc-data-plane-selector-control-api = { module = "org.eclipse.edc:data-plane-selector-control-api", version.ref = "edc" } -edc-data-plane-selector-client = { module = "org.eclipse.edc:data-plane-selector-client", version.ref = "edc" } edc-data-plane-self-registration = { module = "org.eclipse.edc:data-plane-self-registration", version.ref = "edc" } # micrometer and other infra stuff @@ -218,6 +225,7 @@ jakartaJson = { module = "org.glassfish:jakarta.json", version.ref = "jakarta-js junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "jupiter" } nimbus-jwt = { module = "com.nimbusds:nimbus-jose-jwt", version.ref = "nimbus" } okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } +opentelemetry-javaagent = { module = "io.opentelemetry.javaagent:opentelemetry-javaagent", version.ref = "opentelemetry" } netty-mockserver = { module = "org.mock-server:mockserver-netty", version.ref = "netty-mockserver" } postgres = { module = "org.postgresql:postgresql", version.ref = "postgres" } restAssured = { module = "io.rest-assured:rest-assured", version.ref = "restAssured" } @@ -231,6 +239,13 @@ titaniumJsonLd = { module = "com.apicatalog:titanium-json-ld", version.ref = "ti [bundles] edc-connector = ["edc.boot", "edc.core-connector", "edc.core-controlplane", "edc.api-observability"] edc-dpf = ["edc.dpf-transfer-signaling", "edc.dpf-selector-core", "edc.spi-dataplane-selector"] -edc-sqlstores = ["edc.sql-assetindex", "edc.sql-contract-definition", "edc.sql-contract-negotiation", "edc.sql-transferprocess", "edc.sql-policydef", "edc.sql-policy-monitor", "edc.sql-edrindex", "edc-transaction-local"] +edc-sqlstores = [ + "edc-sql-assetindex", "edc-sql-contract-definition", "edc-sql-contract-negotiation", "edc-sql-transferprocess", + "edc-sql-policydef", "edc-sql-policy-monitor", "edc-sql-edrindex", "edc-transaction-local", "edc-fc-sql-cache", + "edc-data-plane-instance-store-sql" +] edc-monitoring = ["edc.micrometer-core", "edc.micrometer-jersey", "edc.micrometer-jetty"] edc-sts = ["edc-identity-trust-sts-core", "edc-identity-trust-sts-api", "edc-identity-trust-sts-client-configuration"] + +[plugins] +swagger = { id = "io.swagger.core.v3.swagger-gradle-plugin", version = "2.2.22" } diff --git a/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile b/resources/Dockerfile similarity index 91% rename from edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile rename to resources/Dockerfile index 98ba8c4b2..710d4ba70 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile +++ b/resources/Dockerfile @@ -1,7 +1,7 @@ ################################################################################# # Copyright (c) 2023 ZF Friedrichshafen AG # Copyright (c) 2022,2023 Mercedes-Benz Tech Innovation GmbH -# Copyright (c) 2021,2023 Contributors to the Eclipse Foundation +# Copyright (c) 2021,2024 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -19,7 +19,7 @@ # SPDX-License-Identifier: Apache-2.0 ################################################################################# -FROM eclipse-temurin:22.0.1_8-jre-alpine +FROM eclipse-temurin:22.0.2_9-jre-alpine ARG JAR ARG OTEL_JAR ARG ADDITIONAL_FILES @@ -41,7 +41,7 @@ RUN adduser \ USER "$APP_USER" WORKDIR /app -COPY ${JAR} edc-dataplane.jar +COPY ${JAR} edc-runtime.jar COPY ${OTEL_JAR} opentelemetry-javaagent.jar COPY ${ADDITIONAL_FILES} ./ @@ -56,4 +56,4 @@ CMD ["java", \ "-Dotel.exporter.prometheus.port=9090", \ "-Djava.security.egd=file:/dev/urandom", \ "-jar", \ - "edc-dataplane.jar"] + "edc-runtime.jar"] diff --git a/samples/edc-dast/edc-dast-runtime/build.gradle.kts b/samples/edc-dast/edc-dast-runtime/build.gradle.kts index e35263d02..0da28d0b6 100644 --- a/samples/edc-dast/edc-dast-runtime/build.gradle.kts +++ b/samples/edc-dast/edc-dast-runtime/build.gradle.kts @@ -49,7 +49,6 @@ application { } tasks.withType { - exclude("**/pom.properties", "**/pom.xm") mergeServiceFiles() archiveFileName.set("${project.name}.jar") } diff --git a/samples/edc-dast/edc-dast-runtime/configuration.properties b/samples/edc-dast/edc-dast-runtime/configuration.properties index 2208e61ff..e08fcccd1 100644 --- a/samples/edc-dast/edc-dast-runtime/configuration.properties +++ b/samples/edc-dast/edc-dast-runtime/configuration.properties @@ -21,6 +21,8 @@ web.http.management.port=8182 web.http.management.path=/management web.http.control.port=8183 web.http.control.path=/control +web.http.catalog.port=8184 +web.http.catalog.path=/catalog web.http.sts.port=8990 web.http.sts.path=/v1/sts edc.api.auth.key=password diff --git a/samples/edc-dast/edc-dast-runtime/src/main/docker/Dockerfile b/samples/edc-dast/edc-dast-runtime/src/main/docker/Dockerfile deleted file mode 100644 index 0a233f5e7..000000000 --- a/samples/edc-dast/edc-dast-runtime/src/main/docker/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -################################################################################# -# Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License, Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0. -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# -# SPDX-License-Identifier: Apache-2.0 -################################################################################# - -FROM eclipse-temurin:22.0.1_8-jre-alpine -ARG JAR -ARG OTEL_JAR -ARG ADDITIONAL_FILES - -ARG APP_USER=docker -ARG APP_UID=10100 - -RUN addgroup --system "$APP_USER" - -RUN adduser \ - --shell /sbin/nologin \ - --disabled-password \ - --gecos "" \ - --ingroup "$APP_USER" \ - --no-create-home \ - --uid "$APP_UID" \ - "$APP_USER" - -USER "$APP_USER" -WORKDIR /app - -COPY ${JAR} edc-controlplane.jar -COPY ${OTEL_JAR} opentelemetry-javaagent.jar -COPY ${ADDITIONAL_FILES} ./ - -HEALTHCHECK NONE - -CMD ["java", \ - "-javaagent:/app/opentelemetry-javaagent.jar", \ - "-Dedc.fs.config=/app/configuration.properties", \ - "-Djava.util.logging.config.file=/app/logging.properties", \ - "-Dotel.javaagent.configuration-file=/app/opentelemetry.properties", \ - "-Dotel.metrics.exporter=prometheus", \ - "-Dotel.exporter.prometheus.port=9090", \ - "-Djava.security.egd=file:/dev/urandom", \ - "-jar", \ - "edc-controlplane.jar"] diff --git a/samples/multi-tenancy/README.md b/samples/multi-tenancy/README.md index 3cc7e0dd2..7b27572bc 100644 --- a/samples/multi-tenancy/README.md +++ b/samples/multi-tenancy/README.md @@ -57,7 +57,7 @@ java -jar -Dedc.tenants.path=samples/multi-tenancy/tenants.properties samples/mu Create a PolicyDefinition on `first` tenant: ```shell -curl -X POST http://localhost:18183/management/v2/policydefinitions \ +curl -X POST http://localhost:18183/management/v3/policydefinitions \ --header 'Content-Type: application/json' \ --data '{ "@context": { "@vocab": "https://w3id.org/edc/v0.0.1/ns/" }, @@ -75,7 +75,7 @@ curl -X POST http://localhost:18183/management/v2/policydefinitions \ Get `first` tenant policy definitions: ```shell -curl -X POST http://localhost:18183/management/v2/policydefinitions/request +curl -X POST http://localhost:18183/management/v3/policydefinitions/request ``` Will get a list containing the PolicyDefinition we created: @@ -108,13 +108,13 @@ Will get a list containing the PolicyDefinition we created: `second` and `third` tenants will have no policy definitions: ```shell -curl -X POST http://localhost:28183/management/v2/policydefinitions/request +curl -X POST http://localhost:28183/management/v3/policydefinitions/request ``` and ```shell -curl -X POST http://localhost:38183/management/v2/policydefinitions/request +curl -X POST http://localhost:38183/management/v3/policydefinitions/request ``` will return diff --git a/samples/multi-tenancy/build.gradle.kts b/samples/multi-tenancy/build.gradle.kts index 908a275c2..b56772f52 100644 --- a/samples/multi-tenancy/build.gradle.kts +++ b/samples/multi-tenancy/build.gradle.kts @@ -47,7 +47,7 @@ application { tasks.withType { mergeServiceFiles() - archiveFileName.set("multitenant.jar") + archiveFileName.set("multi-tenancy.jar") } // do not publish