diff --git a/CHANGELOG.md b/CHANGELOG.md index b3e95a61b..d4f38d8f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,68 @@ The changelog format is based on [Keep a Changelog](https://keepachangelog.com/e ## [Unreleased] +## [released] +## [v4.0.0-rc1] - 03-07-2024 +### Added + +- Added digital product pass verification schemas +- Added Certified Data Credential SAMM Semantic Model +- Added schemas and examples of the credentials +- Added the simple wallet component built in python +- Added functionality to issue certified data credentials or any verifiable credential with datamodel v2 +- Added functionality to verify credentials with JsonWebSignature2020 +- Added DID method to visualize the public key +- Added api translator from SAMM json schema to JSON-LD Context +- Added bpn authorization mechanism with api keys +- Added storage of credentials +- Added private and public key managers +- Added the Verification Module with all the necessary changes to verify a digital product pass Certified Data Credential +- Added wallet service and configuration so that the backend can communicate with the Simple Wallet +- Added test data to the serial part items in dpp-tutorial +- Added translations for verification addon +- Added verification to dpp-frontend to visualize verification details of the aspect data +- Added eclipse-dash-license action and workflow +- Added enable/disable feature to the dpp-frontend helm chart + + +### Updated + +- Moved all the "core" backend components to the "core" folder so that the application would be modular. +- Updated configurations and implemented verification configuration +- Updated licenses from charts +- Updated license headers in workflow files +- Refactor and optimize workflows +- Updated user(10001)/group(10001) ids to Dockerfiles and helm values +- Moved hardcoded values from helm templates and make them configurable from helm values +- Updated PULL_REQUEST_TEMPLATE.md +- Updated Arc42.md +- Updated AdminGuide.md +- Updated copyright license headers in the entire source code and documentation + + +### Deleted + +- Removed GHCR references from workflows +- Removed standalone backend helm chart from the dpp-backend directory + +### Issues Fixed + +- Fixed issues from the latest models (DPP, BatteryPass and TransmissionPass) + +## Security Issues + +- Updated wallet Dockerfile to fix `no-cache` high vulnerability + + +### Dependencies Fixed by Dependabot +* chore(deps): bump vite from 4.5.2 to 4.5.3 in /dpp-frontend by @dependabot in https://github.com/eclipse-tractusx/digital-product-pass/pull/348 +* chore(deps): bump github/codeql-action from 2 to 3 by @dependabot in https://github.com/eclipse-tractusx/digital-product-pass/pull/297 +* chore(deps): bump docker/build-push-action from 5 to 6 by @dependabot in https://github.com/eclipse-tractusx/digital-product-pass/pull/334 +* chore(deps): bump requests from 2.31.0 to 2.32.2 in /dpp-backend/scripts by @dependabot in https://github.com/eclipse-tractusx/digital-product-pass/pull/345 +* chore(deps): bump braces from 3.0.2 to 3.0.3 in /dpp-frontend by @dependabot in https://github.com/eclipse-tractusx/digital-product-pass/pull/340 + + + ## [released] ## [v3.1.0] - 19-06-2024 ### Added diff --git a/README.md b/README.md index 738da0366..9390ce58b 100644 --- a/README.md +++ b/README.md @@ -43,9 +43,9 @@ In particular, the appliction is used to access the battery passport data provid ### Software Version #### Helm Chart Version -
3.1.0
+
4.0.0-rc1
#### Application Version -
v3.1.0
+
v4.0.0-rc1
@@ -96,31 +96,45 @@ For installing the Digital Product Pass Application please consult our [Intallat - [Apache-2.0](https://raw.githubusercontent.com/eclipse-tractusx/digital-product-pass/main/LICENSE) for code - [CC-BY-4.0](https://spdx.org/licenses/CC-BY-4.0.html) for non-code -## Notice for Docker image +## Notice for Docker Images DockerHub: - -- https://hub.docker.com/r/tractusx/digital-product-pass-frontend -- https://hub.docker.com/r/tractusx/digital-product-pass-backend - -**Base images:** - -- DockerHub: - - - Node: https://hub.docker.com/_/node - - Nginxinc/nginx-unprivileged: https://hub.docker.com/r/nginxinc/nginx-unprivileged - - Eclipse Temurin: https://hub.docker.com/_/eclipse-temurin - -- Dockerfiles: - - - [node:lts-alpine](https://github.com/nodejs/docker-node) - - [nginxinc/nginx-unprivileged:stable-alpine](https://github.com/nginxinc/docker-nginx-unprivileged/blob/main/Dockerfile-alpine.template) - - [eclipse-temurin:19-alpine](https://github.com/adoptium/containers) - -- GitHub project: - - Node: https://github.com/docker-library/repo-info/tree/master/repos/node - - nginxinc/docker-nginx-unprivileged: https://github.com/nginxinc/docker-nginx-unprivileged - - Eclipse Temurin: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin +- https://hub.docker.com/r/tractusx/digital-product-pass-frontend +- https://hub.docker.com/r/tractusx/digital-product-pass-backend +- https://hub.docker.com/r/tractusx/digital-product-pass-verification-wallet + +Eclipse Tractus-X product(s) installed within the image: + +- GitHub: https://github.com/eclipse-tractusx/digital-product-pass +- Project home: https://projects.eclipse.org/projects/automotive.tractusx +- Dockerfiles: + - Frontend: https://github.com/eclipse-tractusx/digital-product-pass/blob/main/Dockerfile + - Backend: https://github.com/eclipse-tractusx/digital-product-pass/blob/main/dpp-backend/digitalproductpass/Dockerfile + - DPP Verification Simple Wallet: https://github.com/eclipse-tractusx/digital-product-pass/blob/main/dpp-verification/simple-wallet/Dockerfile +- Project License: [Apache License, Version 2.0](https://raw.githubusercontent.com/eclipse-tractusx/digital-product-pass/main/LICENSE) + + +**Used base image** +- [alpine:3.19](https://github.com/alpinelinux/docker-alpine) +- [node:lts-alpine](https://github.com/nodejs/docker-node) +- [nginxinc/nginx-unprivileged:stable-alpine](https://github.com/nginxinc/docker-nginx-unprivileged/blob/main/Dockerfile-alpine.template) +- [eclipse-temurin:19-alpine](https://github.com/adoptium/containers) +- Official DockerHub pages: + - Alpine: https://hub.docker.com/_/alpine + - Node: https://hub.docker.com/_/node + - Nginxinc/nginx-unprivileged: https://hub.docker.com/r/nginxinc/nginx-unprivileged + - Eclipse Temurin: https://hub.docker.com/_/eclipse-temurin +- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- Additional information about images: + - alpinelinux/docker-alpine:3.19: https://github.com/alpinelinux/docker-alpine/blob/v3.19/x86_64/Dockerfile + - Node: https://github.com/docker-library/repo-info/tree/master/repos/node + - Nginxinc/nginx-unprivileged: https://github.com/nginxinc/docker-nginx-unprivileged + - Eclipse Temurin: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + +As with all Docker images, these likely also contain other software which may be under other licenses +(such as Bash, etc. from the base distribution, along with any direct or indirect dependencies of the primary software being contained). + +As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. diff --git a/charts/digital-product-pass/Chart.yaml b/charts/digital-product-pass/Chart.yaml index fe7003e2b..c035b6404 100644 --- a/charts/digital-product-pass/Chart.yaml +++ b/charts/digital-product-pass/Chart.yaml @@ -1,5 +1,5 @@ ################################################################################# -# Tractus-X - Digital Product Pass Application +# Tractus-X - Digital Product Pass Application # # Copyright (c) 2022, 2024 BMW AG # Copyright (c) 2022, 2024 Henkel AG & Co. KGaA @@ -43,10 +43,10 @@ type: application # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 3.1.2 +version: 4.0.0-rc1 # 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: "3.1.0" +appVersion: "4.0.0-rc1" diff --git a/charts/digital-product-pass/README.md b/charts/digital-product-pass/README.md index ae7b30b81..2c78d62e7 100644 --- a/charts/digital-product-pass/README.md +++ b/charts/digital-product-pass/README.md @@ -1,12 +1,11 @@ # digital-product-pass -![Version: 3.1.0](https://img.shields.io/badge/Version-3.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.1.0](https://img.shields.io/badge/AppVersion-3.1.0-informational?style=flat-square) +![Version: 4.0.0-rc1](https://img.shields.io/badge/Version-4.0.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 4.0.0-rc1](https://img.shields.io/badge/AppVersion-4.0.0--rc1-informational?style=flat-square) A Helm chart for Tractus-X Digital Product Pass Kubernetes **Homepage:** - This Helm charts install the Digital Product Passport Backend and Frontend components. ## Prerequisites @@ -24,14 +23,14 @@ helm install digital-product-pass tractusx/digital-product-pass ## Source Code -* +* ","xApiKey":""},"hostname":"","image":{"pullPolicy":"IfNotPresent","repository":"docker.io/tractusx/digital-product-pass-backend"},"imagePullSecrets":[],"ingress":{"annotations":{"ingressClassName":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/force-ssl-redirect":"true","nginx.ingress.kubernetes.io/ssl-passthrough":"false"},"enabled":false,"hosts":[{"host":"","paths":[{"path":"/","pathType":"Prefix"}]}]},"irs":{"enabled":false,"hostname":""},"logging":{"level":{"root":"INFO","utils":"INFO"}},"maxRetries":5,"name":"dpp-backend","passport":{"aspects":["urn:bamm:io.catenax.generic.digital_product_passport:1.0.0#DigitalProductPassport","urn:bamm:io.catenax.battery.battery_pass:3.0.1#BatteryPass","urn:samm:io.catenax.battery.battery_pass:6.0.0#BatteryPass","urn:bamm:io.catenax.transmission.transmission_pass:1.0.0#TransmissionPass","urn:samm:io.catenax.transmission.transmission_pass:3.0.0#TransmissionPass","urn:samm:io.catenax.generic.digital_product_passport:2.0.0#DigitalProductPassport","urn:samm:io.catenax.generic.digital_product_passport:5.0.0#DigitalProductPassport"],"policyCheck":{"enabled":true,"policies":[{"obligation":[],"permission":[{"action":"USE","constraints":[{"leftOperand":"cx-policy:Membership","operator":"odrl:eq","rightOperand":"active"},{"leftOperand":"cx-policy:FrameworkAgreement","operator":"odrl:eq","rightOperand":"CircularEconomy:1.0"},{"leftOperand":"cx-policy:UsagePurpose","operator":"odrl:eq","rightOperand":"cx.circular.dpp:1"}],"logicalConstraint":"odrl:and"}],"prohibition":[]}],"strictMode":false}},"podSecurityContext":{"fsGroup":10001,"runAsGroup":10001,"runAsUser":10000,"seccompProfile":{"type":"RuntimeDefault"}},"process":{"encryptionKey":""},"securityCheck":{"bpn":false,"edc":false},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"add":[],"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":10001,"runAsNonRoot":true,"runAsUser":10000},"serverPort":8888,"service":{"port":8888,"type":"ClusterIP"},"singleApi":{"delay":1000,"maxRetries":30},"volumeMounts":[{"mountPath":"/app/config","name":"backend-config"},{"mountPath":"/app/data/process","name":"pvc-backend","subPath":"data/process"},{"mountPath":"/app/log","name":"tmpfs","subPath":"log"},{"mountPath":"/tmp","name":"tmpfs"},{"mountPath":"/app/data/VaultConfig","name":"tmpfs","subPath":"VaultConfig/vault.token.yml"},{"mountPath":"/app/tmp","name":"tmpfs"}],"volumes":[{"configMap":{"name":"{{ .Release.Name }}-backend-config"},"name":"backend-config"},{"name":"pvc-backend","persistentVolumeClaim":{"claimName":"{{ .Release.Name }}-pvc-data"}},{"emptyDir":{},"name":"tmpfs"}]}` | Backend configuration | +| backend | object | `{"digitalTwinRegistry":{"endpoints":{"digitalTwin":"/shell-descriptors","search":"/lookup/shells","subModel":"/submodel-descriptors"},"policyCheck":{"enabled":true,"policies":[{"obligation":[],"permission":[{"action":"USE","constraints":[{"leftOperand":"cx-policy:Membership","operator":"odrl:eq","rightOperand":"active"},{"leftOperand":"cx-policy:UsagePurpose","operator":"odrl:eq","rightOperand":"cx.core.digitalTwinRegistry:1"}],"logicalConstraint":"odrl:and"}],"prohibition":[]}],"strictMode":false},"temporaryStorage":{"enabled":true,"lifetime":12},"timeouts":{"digitalTwin":40,"negotiation":60,"search":50,"transfer":20}},"discovery":{"bpnDiscovery":{"key":"manufacturerPartId","path":"/api/v1.0/administration/connectors/bpnDiscovery/search"},"edcDiscovery":{"key":"bpn"},"hostname":""},"edc":{"apis":{"catalog":"/catalog/request","management":"/management/v2","negotiation":"/contractnegotiations","readiness":"/api/check/readiness","transfer":"/transferprocesses"},"authorizationKey":"X-Api-Key","delay":100,"hostname":"","participantId":"","xApiKey":""},"hostname":"","image":{"pullPolicy":"IfNotPresent","repository":"docker.io/tractusx/digital-product-pass-backend"},"imagePullSecrets":[],"ingress":{"annotations":{"ingressClassName":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/force-ssl-redirect":"true","nginx.ingress.kubernetes.io/ssl-passthrough":"false"},"enabled":false,"hosts":[{"host":"","paths":[{"path":"/","pathType":"Prefix"}]}]},"irs":{"apiKey":"","enabled":false,"hostname":""},"logging":{"level":{"root":"INFO","utils":"INFO"}},"maxRetries":5,"name":"dpp-backend","passport":{"aspects":["urn:samm:io.catenax.battery.battery_pass:6.0.0#BatteryPass","urn:samm:io.catenax.transmission.transmission_pass:3.0.0#TransmissionPass","urn:samm:io.catenax.generic.digital_product_passport:5.0.0#DigitalProductPassport"],"policyCheck":{"enabled":true,"policies":[{"obligation":[],"permission":[{"action":"USE","constraints":[{"leftOperand":"cx-policy:Membership","operator":"odrl:eq","rightOperand":"active"},{"leftOperand":"cx-policy:FrameworkAgreement","operator":"odrl:eq","rightOperand":"CircularEconomy:1.0"},{"leftOperand":"cx-policy:UsagePurpose","operator":"odrl:eq","rightOperand":"cx.circular.dpp:1"}],"logicalConstraint":"odrl:and"}],"prohibition":[]}],"strictMode":false}},"podSecurityContext":{"fsGroup":10001,"runAsGroup":10001,"runAsUser":10000,"seccompProfile":{"type":"RuntimeDefault"}},"process":{"encryptionKey":""},"securityCheck":{"bpn":false,"edc":false},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"add":[],"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":10001,"runAsNonRoot":true,"runAsUser":10000},"serverPort":8888,"service":{"port":8888,"type":"ClusterIP"},"singleApi":{"delay":1000,"maxRetries":30},"verification":{"autoVerify":true,"enabled":true,"wallet":{"apiKey":"","endpoints":{"health":"/health","verify":"/verify"},"url":"https://"}},"volumeMounts":[{"mountPath":"/app/config","name":"backend-config"},{"mountPath":"/app/data/process","name":"pvc-backend","subPath":"data/process"},{"mountPath":"/app/log","name":"tmpfs","subPath":"log"},{"mountPath":"/tmp","name":"tmpfs"},{"mountPath":"/app/data/VaultConfig","name":"tmpfs","subPath":"VaultConfig/vault.token.yml"},{"mountPath":"/app/tmp","name":"tmpfs"}],"volumes":[{"configMap":{"name":"{{ .Release.Name }}-backend-config"},"name":"backend-config"},{"name":"pvc-backend","persistentVolumeClaim":{"claimName":"{{ .Release.Name }}-pvc-data"}},{"emptyDir":{},"name":"tmpfs"}]}` | Backend configuration | | backend.digitalTwinRegistry.policyCheck | object | `{"enabled":true,"policies":[{"obligation":[],"permission":[{"action":"USE","constraints":[{"leftOperand":"cx-policy:Membership","operator":"odrl:eq","rightOperand":"active"},{"leftOperand":"cx-policy:UsagePurpose","operator":"odrl:eq","rightOperand":"cx.core.digitalTwinRegistry:1"}],"logicalConstraint":"odrl:and"}],"prohibition":[]}],"strictMode":false}` | policy configuration for the digital twin assets in the edc catalog | | backend.digitalTwinRegistry.policyCheck.enabled | bool | `true` | condition to enable and disable the policy check | | backend.digitalTwinRegistry.policyCheck.policies | list | `[{"obligation":[],"permission":[{"action":"USE","constraints":[{"leftOperand":"cx-policy:Membership","operator":"odrl:eq","rightOperand":"active"},{"leftOperand":"cx-policy:UsagePurpose","operator":"odrl:eq","rightOperand":"cx.core.digitalTwinRegistry:1"}],"logicalConstraint":"odrl:and"}],"prohibition":[]}]` | list of allowed policies that can be selected from the edc catalog in negotiations | @@ -43,7 +42,7 @@ helm install digital-product-pass tractusx/digital-product-pass | backend.discovery.bpnDiscovery | object | `{"key":"manufacturerPartId","path":"/api/v1.0/administration/connectors/bpnDiscovery/search"}` | bpn discovery configuration | | backend.discovery.edcDiscovery | object | `{"key":"bpn"}` | edc discovery configuration | | backend.discovery.hostname | string | `""` | discovery finder configuration | -| backend.edc | object | `{"apis":{"catalog":"/catalog/request","management":"/management/v2","negotiation":"/contractnegotiations","readiness":"/api/check/readiness","transfer":"/transferprocesses"},"delay":100,"hostname":"","participantId":"","xApiKey":""}` | in this section we configure the values that are inserted as secrets in the backend | +| backend.edc | object | `{"apis":{"catalog":"/catalog/request","management":"/management/v2","negotiation":"/contractnegotiations","readiness":"/api/check/readiness","transfer":"/transferprocesses"},"authorizationKey":"X-Api-Key","delay":100,"hostname":"","participantId":"","xApiKey":""}` | in this section we configure the values that are inserted as secrets in the backend | | backend.edc.delay | int | `100` | Negotiation status Delay in milliseconds in between async requests [<= 500] | | backend.edc.hostname | string | `""` | edc consumer connection configuration | | backend.edc.participantId | string | `""` | BPN Number | @@ -52,7 +51,7 @@ helm install digital-product-pass tractusx/digital-product-pass | backend.imagePullSecrets | list | `[]` | Existing image pull secret to use to [obtain the container image from private registries](https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry) | | backend.ingress | object | `{"annotations":{"ingressClassName":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"HTTP","nginx.ingress.kubernetes.io/force-ssl-redirect":"true","nginx.ingress.kubernetes.io/ssl-passthrough":"false"},"enabled":false,"hosts":[{"host":"","paths":[{"path":"/","pathType":"Prefix"}]}]}` | ingress declaration to expose the dpp-backend service | | backend.ingress.annotations.ingressClassName | string | `"nginx"` | ingress class name | -| backend.irs | object | `{"enabled":false,"hostname":""}` | irs configuration | +| backend.irs | object | `{"apiKey":"","enabled":false,"hostname":""}` | irs configuration | | backend.logging.level.root | string | `"INFO"` | general logging level | | backend.logging.level.utils | string | `"INFO"` | logging for the util components | | backend.maxRetries | int | `5` | max retries for the backend services | @@ -94,6 +93,7 @@ helm install digital-product-pass tractusx/digital-product-pass | frontend.api.max_retries | int | `30` | max retries for getting status | | frontend.api.timeout | object | `{"decline":20000,"negotiate":60000,"search":60000}` | default timeout - 90 seconds in milliseconds | | frontend.backend | object | `{"hostname":""}` | url of the digital product pass backend service | +| frontend.enabled | bool | `true` | | | frontend.image.pullPolicy | string | `"IfNotPresent"` | | | frontend.image.repository | string | `"docker.io/tractusx/digital-product-pass-frontend"` | | | frontend.imagePullSecrets | list | `[]` | Existing image pull secret to use to [obtain the container image from private registries](https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry) | @@ -105,7 +105,7 @@ helm install digital-product-pass tractusx/digital-product-pass | frontend.name | string | `"dpp-frontend"` | | | frontend.negotiation.autoSign | bool | `true` | | | frontend.podSecurityContext | object | `{"fsGroup":10001,"runAsGroup":10001,"runAsUser":10000,"seccompProfile":{"type":"RuntimeDefault"}}` | The [pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) defines privilege and access control settings for a Pod within the deployment | -| frontend.podSecurityContext.fsGroup | int | `10001` | The owner for volumes and any files created within volumes will belong to this guid | +| frontend.podSecurityContext.fsGroup | int | `10001` | The owner for volumes and any files created within volumes will belong to this guide | | frontend.podSecurityContext.runAsGroup | int | `10001` | Processes within a pod will belong to this guid | | frontend.podSecurityContext.runAsUser | int | `10000` | Runs all processes within a pod with a special uid | | frontend.podSecurityContext.seccompProfile.type | string | `"RuntimeDefault"` | Restrict a Container's Syscalls with seccomp | @@ -121,6 +121,11 @@ helm install digital-product-pass tractusx/digital-product-pass | frontend.service.type | string | `"ClusterIP"` | [Service type](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) to expose the running application on a set of Pods as a network service | | frontend.supportContact.adminEmail | string | `"admin@example.com"` | | | fullnameOverride | string | `""` | | +| livenessProbe.enabled | bool | `false` | | +| livenessProbe.initialDelaySeconds | int | `60` | | +| livenessProbe.path | string | `"/health"` | | +| livenessProbe.periodSeconds | int | `300` | | +| livenessProbe.port | int | `8888` | | | name | string | `"digital-product-pass"` | | | nameOverride | string | `""` | | | namespace | string | `""` | | @@ -132,6 +137,11 @@ helm install digital-product-pass tractusx/digital-product-pass | oauth.hostname | string | `""` | url of the identity provider service | | oauth.roleCheck | object | `{"enabled":false}` | the role check checks if the user has access roles for the appId | | oauth.techUser | object | `{"clientId":"","clientSecret":""}` | note: this credentials need to have access to the Discovery Finder, BPN Discovery and EDC Discovery | +| readinessProbe.enabled | bool | `false` | | +| readinessProbe.initialDelaySeconds | int | `60` | | +| readinessProbe.path | string | `"/health"` | | +| readinessProbe.periodSeconds | int | `300` | | +| readinessProbe.port | int | `8888` | | | replicaCount | int | `1` | | | resources.limits.cpu | string | `"500m"` | | | resources.limits.memory | string | `"512Mi"` | | diff --git a/docs/RELEASE_USER.md b/docs/RELEASE_USER.md index 036e3d012..255c5d206 100644 --- a/docs/RELEASE_USER.md +++ b/docs/RELEASE_USER.md @@ -22,9 +22,54 @@ SPDX-License-Identifier: CC-BY-4.0 --> # Release Notes Digital Product Pass Application + User friendly relase notes without specific technical details. +**July 3 2024 (Version 4.0.0)** +*03.07.2024* + +### Added + +#### Digital Product Pass Verification Add-on Baekend Implementation + +Digital Product Pass Verification Add-on Implementation is finally available at the digital product pass backend. +The backend was refactored to be constructure in a modular way. All the core components of the backend were moved into the 'core' module. +The 'verification' module includes all the functionality required to verify credentials using the simple wallet component. + +#### Digital Product Pass Simple Wallet from DPP Verification Add-on Available + +A functional wallet developed in Python is now available. It is a minimal viable wallet component that can be used to: + +- Generate Valid JSON-LD `@context` schemas from existing SAMM Models standarized in Catena-X. + - So that the data from the aspect models can be placed inside of the verifiable credentials. +- Issue a verifiable credential with data model v2 with a DID Web resolvable proof and JsonWebSignature2020 +- Verify a verifiable credential with a DID Web resolvable proof from typy JsonWebKey2020 +- Provide a standard did.json endpoint for a specific Bussiness Partner Number +- Manage the authorization by bpn and api keys +- Store an log of your signed verifiable credentials + +#### Digital Product Pass Verification Add-on Schemas and Semantics Available + +Now the semantic models for the Certified Data Credential and some examples are available under dpp-verification semantics. +Also its available the json-ld schemas for the digital product pass aspect model and the certified data credential under schemas. + +#### Digital Product Pass Verification Add-on Frontend Implementation + +Visualize if the credential you are retriving is verifiable or not. Be able to refresh the verification of the credential signature on the fly and be able to visualize the issuer, owner and wallet that handled the verification. + +### Updated + +#### Repository Refactored + +The repository was refactored and prepared for the release R24.08 of Catena-X. Cleaning all the Consortia releated information in the documentation. + +#### Issues Fixed in the Frontend + +Several minor bugs that were afecting the stability of the application were fixed and the frontend code was refactored + +#### Digital Product Pass Verification Documentation Updated +The Digital Product Pass Verification Documentation was updated in order to match the latest updates done and specified during the implementation. **June 19 2024 (Version 3.1.0)** *19.06.2024* diff --git a/dpp-frontend/package-lock.json b/dpp-frontend/package-lock.json index fc77ccc55..ff0cbdcb2 100644 --- a/dpp-frontend/package-lock.json +++ b/dpp-frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "digital-product-pass-frontend", - "version": "3.1.0", + "version": "4.0.0-rc1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "digital-product-pass-frontend", - "version": "3.1.0", + "version": "4.0.0-rc1", "dependencies": { "@mdi/font": "5.9.55", "@popperjs/core": "^2.11.2", diff --git a/dpp-frontend/package.json b/dpp-frontend/package.json index 74bb82491..56a979af3 100644 --- a/dpp-frontend/package.json +++ b/dpp-frontend/package.json @@ -1,6 +1,6 @@ { "name": "digital-product-pass-frontend", - "version": "3.1.0", + "version": "4.0.0-rc1", "private": true, "scripts": { "serve": "vite --host localhost",