diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml deleted file mode 100644 index 55e055ee..00000000 --- a/.github/workflows/demo.yml +++ /dev/null @@ -1,114 +0,0 @@ -name: Demo - Build & Deploy to Scaleway - -on: - push: - branches: [legacy_dev] - -env: - PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a - NAMESPACE_ID_LECOFFRE: c992c042-bdb6-4974-becf-aa5039b9ec58 - CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffredemovts5gdxg - - IMAGE_NAME: back - CONTAINER_NAME: back - -jobs: - build-and-push-images-lecoffre: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Setup SSH - run: | - mkdir -p ~/.ssh - echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - env: - SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Copy SSH - run: cp ~/.ssh/id_rsa id_rsa - - name: Login to Scaleway Container Registry - uses: docker/login-action@v3 - with: - username: nologin - password: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} - registry: ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }} - - name: Build the Back Image - run: docker build . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }} - - name: Push the Back Image to Scaleway Container Registry - run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }} - - name: Build the Cron Image - run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron - - name: Push the Cron Image to Scaleway Container Registry - run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron - deploy-back-lecoffre: - needs: build-and-push-images-lecoffre - runs-on: ubuntu-latest - environment: demo - steps: - - name: Install CLI - uses: scaleway/action-scw@v0 - - name: Get container ID - run: | - echo "CONTAINER_ID=$(scw container container list namespace-id=${{ env.NAMESPACE_ID_LECOFFRE }} -o json | jq -r '.[] | select(.name == "${{ env.CONTAINER_NAME }}") | .id')" >> $GITHUB_ENV - env: - SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} - SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} - SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} - SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} - - name: Deploy the container based on the new image - run: | - env_string="" - while IFS= read -r line; do - if [[ "$line" == *"="* ]]; then - key=$(echo "$line" | cut -d '=' -f 1) - value=$(echo "$line" | cut -d '=' -f 2-) - if [[ -n "$key" ]]; then - env_string+="environment-variables.$key=$value " - fi - fi - done <<< "$ENV_VARS" - env_string=$(echo $env_string | sed 's/ $//') - scw container container update ${{ env.CONTAINER_ID }} $env_string - env: - ENV_VARS: ${{ secrets.ENV }} - SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} - SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} - SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} - SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} - deploy-cron-lecoffre: - needs: build-and-push-images-lecoffre - runs-on: ubuntu-latest - environment: demo - steps: - - name: Install CLI - uses: scaleway/action-scw@v0 - - name: Get container ID - run: | - echo "CONTAINER_ID=$(scw container container list namespace-id=${{env.NAMESPACE_ID_LECOFFRE}} -o json | jq -r '.[] | select(.name == "cron") | .id')" >> $GITHUB_ENV - env: - SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} - SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} - SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} - SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} - - name: Deploy the container based on the new image - run: | - env_string="" - while IFS= read -r line; do - if [[ "$line" == *"="* ]]; then - key=$(echo "$line" | cut -d '=' -f 1) - value=$(echo "$line" | cut -d '=' -f 2-) - if [[ -n "$key" ]]; then - env_string+="environment-variables.$key=$value " - fi - fi - done <<< "$ENV_VARS" - env_string=$(echo $env_string | sed 's/ $//') - scw container container update ${{ env.CONTAINER_ID }} $env_string - env: - ENV_VARS: ${{ secrets.ENV }} - SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} - SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} - SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} - SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} - diff --git a/.github/workflows/ppd.yml b/.github/workflows/ppd.yml index 97e04f25..8cb3d90a 100644 --- a/.github/workflows/ppd.yml +++ b/.github/workflows/ppd.yml @@ -18,16 +18,16 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Setup SSH - run: | - mkdir -p ~/.ssh - echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - env: - SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Copy SSH - run: cp ~/.ssh/id_rsa id_rsa + #- name: Setup SSH + # run: | + # mkdir -p ~/.ssh + # echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + # chmod 600 ~/.ssh/id_rsa + # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + # env: + # SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + #- name: Copy SSH + # run: cp ~/.ssh/id_rsa id_rsa - name: Login to Scaleway Container Registry uses: docker/login-action@v3 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 12e16fc9..c83a8b4c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,15 +1,14 @@ -name: Prod - Build & Deploy to Scaleway +name: Test - Build & Deploy to Scaleway on: push: - branches: [test] + branches: [legacy_dev] env: - PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a NAMESPACE_ID_LECOFFRE: 3829c5cd-9fb0-4871-97a1-eb33e4bc1114 CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffretestouylprmj - + IMAGE_NAME: back CONTAINER_NAME: back @@ -18,16 +17,16 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - #- name: Setup SSH - # run: | - # mkdir -p ~/.ssh - # echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa - # chmod 600 ~/.ssh/id_rsa - # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - # env: - # SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} - #- name: Copy SSH - # run: cp ~/.ssh/id_rsa id_rsa + - name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + env: + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Copy SSH + run: cp ~/.ssh/id_rsa id_rsa - name: Login to Scaleway Container Registry uses: docker/login-action@v3 with: @@ -46,7 +45,7 @@ jobs: deploy-back-lecoffre: needs: build-and-push-images-lecoffre runs-on: ubuntu-latest - environment: prod + environment: test steps: - name: Install CLI uses: scaleway/action-scw@v0 @@ -82,7 +81,7 @@ jobs: deploy-cron-lecoffre: needs: build-and-push-images-lecoffre runs-on: ubuntu-latest - environment: prod + environment: test steps: - name: Install CLI uses: scaleway/action-scw@v0 @@ -110,9 +109,7 @@ jobs: scw container container update ${{ env.CONTAINER_ID }} $env_string env: ENV_VARS: ${{ secrets.ENV }} - SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} - SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} - \ No newline at end of file + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} \ No newline at end of file diff --git a/src/app/api/notary/OfficeFolderAnchorsController.ts b/src/app/api/notary/OfficeFolderAnchorsController.ts index 8cedd895..1ae9f9b1 100644 --- a/src/app/api/notary/OfficeFolderAnchorsController.ts +++ b/src/app/api/notary/OfficeFolderAnchorsController.ts @@ -3,7 +3,7 @@ import { Controller, Get, Post } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; import { Document, OfficeFolder, File } from "le-coffre-resources/dist/Notary"; -import { getFolderHashes, getFolderFilesUid } from "@Common/optics/notary"; +import { getFolderFilesUid } from "@Common/optics/notary"; import OfficeFoldersService from "@Services/notary/OfficeFoldersService/OfficeFoldersService"; import OfficeFolderAnchorsRepository from "@Repositories/OfficeFolderAnchorsRepository"; import FilesService from "@Services/common/FilesService/FilesService"; @@ -49,6 +49,27 @@ export default class OfficeFoldersController extends ApiController { super(); } + private getValidatedDocumentHashes(officeFolder: OfficeFolder): string[] { + const documents = officeFolder.documents ?? []; + + if (documents.length === 0) { + return []; + } + + const folderHashes: string[] = []; + documents.forEach((document: any) => { + const documentHydrated = Document.hydrate(document, { strategy: "excludeAll" }); + if (documentHydrated.document_status === "VALIDATED") { + documentHydrated.files?.forEach((file: any) => { + const fileHydrated = File.hydrate(file, { strategy: "excludeAll" }); + folderHashes.push(fileHydrated.hash); + }); + } + }); + + return folderHashes.sort(); + } + /** * @description Download a folder anchoring proof document along with all accessible files */ @@ -79,15 +100,14 @@ export default class OfficeFoldersController extends ApiController { } const officeFolder = OfficeFolder.hydrate(officeFolderFound, { strategy: "excludeAll" }); - const folderHashes = getFolderHashes(officeFolder); + const sortedHashes = this.getValidatedDocumentHashes(officeFolder); const folderFilesUid = getFolderFilesUid(officeFolder); - if (folderHashes.length === 0) { + if (sortedHashes.length === 0) { this.httpNotFoundRequest(response, "No file hash to anchor"); return; } - const sortedHashes = [...folderHashes].sort(); const anchoringProof = await this.secureService.download(sortedHashes, officeFolder.office!.name); @@ -180,18 +200,13 @@ export default class OfficeFoldersController extends ApiController { return; } - const folderHashes: string[] = []; - documents.forEach((document: any) => { - const documentHydrated = Document.hydrate(document, { strategy: "excludeAll" }); - if (documentHydrated.document_status === "VALIDATED") { - documentHydrated.files?.forEach((file: any) => { - const fileHydrated = File.hydrate(file, { strategy: "excludeAll" }); - folderHashes.push(fileHydrated.hash); - }); - } - }); + const sortedHashes = this.getValidatedDocumentHashes(officeFolder); + + if (sortedHashes.length === 0) { + this.httpBadRequest(response, "No file hash to anchor"); + return; + } - const sortedHashes = [...folderHashes].sort(); const data = await this.secureService.anchor(sortedHashes); const officeFolderAnchor = hydrateOfficeFolderAnchor(data); @@ -248,23 +263,13 @@ export default class OfficeFoldersController extends ApiController { return; } - const folderHashes: string[] = []; - documents.forEach((document: any) => { - const documentHydrated = Document.hydrate(document, { strategy: "excludeAll" }); - if (documentHydrated.document_status === "VALIDATED") { - documentHydrated.files?.forEach((file: any) => { - const fileHydrated = File.hydrate(file, { strategy: "excludeAll" }); - folderHashes.push(fileHydrated.hash); - }); - } - }); + const sortedHashes = this.getValidatedDocumentHashes(officeFolder); - if (folderHashes.length === 0) { + if (sortedHashes.length === 0) { this.httpNotFoundRequest(response, "No file hash to anchor"); return; } - const sortedHashes = [...folderHashes].sort(); const officeFolderAnchorFound = OfficeFolderAnchor.hydrate(officeFolderFound.folder_anchor, { strategy: "excludeAll", }); diff --git a/src/common/notifications/NotificationBuilder.ts b/src/common/notifications/NotificationBuilder.ts index e51abb68..01ddae5d 100644 --- a/src/common/notifications/NotificationBuilder.ts +++ b/src/common/notifications/NotificationBuilder.ts @@ -95,7 +95,7 @@ export default class NotificationBuilder { redirection_url: "", created_at: new Date(), updated_at: new Date(), - user: [user] || [], + user: user ? [user] : [], }); } @@ -105,7 +105,7 @@ export default class NotificationBuilder { redirection_url: "", created_at: new Date(), updated_at: new Date(), - user: [user] || [], + user: user ? [user] : [], }); }