mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			dependabot
			...
			fix/MNT-24
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 1b05a660c4 | ||
|  | 93e6e9b437 | ||
|  | ac0fbb31c2 | ||
|  | 9ef3f84ec7 | ||
|  | 458ddf6451 | ||
|  | af2fc0103b | ||
|  | 73f9e2b7f1 | ||
|  | dcbfc40025 | ||
|  | 6273d19f5b | 
							
								
								
									
										755
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										755
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -29,6 +29,9 @@ env: | ||||
|   AUTH0_CLIENT_ID: ${{ secrets.AUTH0_OIDC_ADMIN_CLIENT_ID }} | ||||
|   AUTH0_CLIENT_SECRET: ${{ secrets.AUTH0_OIDC_CLIENT_SECRET }} | ||||
|   AUTH0_ADMIN_PASSWORD: ${{ secrets.AUTH0_OIDC_ADMIN_PASSWORD }} | ||||
|   # Report Portal settings | ||||
|   RP_LAUNCH_PREFIX: "${{ github.workflow }} - ${{ github.job }}" | ||||
|   RP_PROJECT: alfresco-backend | ||||
|  | ||||
| jobs: | ||||
|   prepare: | ||||
| @@ -41,10 +44,10 @@ jobs: | ||||
|       - uses: actions/checkout@v4 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/pre-commit@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/pre-commit@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Prepare maven cache and check compilation" | ||||
| @@ -62,12 +65,12 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/veracode@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/veracode@v8.16.0 | ||||
|         continue-on-error: true | ||||
|         with: | ||||
|           srcclr-api-token: ${{ secrets.SRCCLR_API_TOKEN }} | ||||
| @@ -85,10 +88,10 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/github-download-file@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/github-download-file@v8.16.0 | ||||
|         with: | ||||
|           token: ${{ secrets.BOT_GITHUB_TOKEN }} | ||||
|           repository: "Alfresco/veracode-baseline-archive" | ||||
| @@ -141,9 +144,9 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[skip tests]') && | ||||
|       !contains(github.event.head_commit.message, '[force]') | ||||
|     steps: | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - uses: Alfresco/ya-pmd-scan@v4.3.0 | ||||
|         with: | ||||
|           classpath-build-command: "mvn test-compile -ntp -Pags -pl \"-:alfresco-community-repo-docker\"" | ||||
| @@ -174,14 +177,57 @@ jobs: | ||||
|             testAttributes: "-Dtest=AllMmtUnitTestSuite" | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} - ${{ matrix.testModule }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl ${{ matrix.testModule }} -am ${{ matrix.testAttributes }} -DfailIfNoTests=false "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -211,9 +257,9 @@ jobs: | ||||
|       REQUIRES_INSTALLED_ARTIFACTS: true | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
| @@ -224,8 +270,52 @@ jobs: | ||||
|       - name: "Set up the environment" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile ${{ matrix.compose-profile }} up -d | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} - ${{ matrix.testSuite }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl remote-api -Dtest=${{ matrix.testSuite }} -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco  # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl remote-api -Dtest=${{ matrix.testSuite }} -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|             echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -246,17 +336,61 @@ jobs: | ||||
|         version: ['10.5', '10.6'] | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: Run MariaDB ${{ matrix.version }} database | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mariadb up -d | ||||
|         env: | ||||
|           MARIADB_VERSION: ${{ matrix.version }} | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} - ${{ matrix.version }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -273,17 +407,61 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run MariaDB 10.11 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mariadb up -d | ||||
|         env: | ||||
|           MARIADB_VERSION: 10.11 | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -300,17 +478,61 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run MySQL 8 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile mysql up -d | ||||
|         env: | ||||
|           MYSQL_VERSION: 8 | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.cj.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -326,17 +548,61 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run PostgreSQL 14.15 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile postgres up -d | ||||
|         env: | ||||
|           POSTGRES_VERSION: 14.15 | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -352,17 +618,61 @@ jobs: | ||||
|             !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run PostgreSQL 15.10 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile postgres up -d | ||||
|         env: | ||||
|           POSTGRES_VERSION: 15.10 | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -378,17 +688,61 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run PostgreSQL 16.6 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose-db.yaml --profile postgres up -d | ||||
|         env: | ||||
|           POSTGRES_VERSION: 16.6 | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -402,15 +756,59 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run ActiveMQ" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile activemq up -d | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=MessagingUnitTestSuite -DfailIfNoTests=false "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -458,9 +856,9 @@ jobs: | ||||
|             mvn-options: '-Dencryption.ssl.keystore.location=${CI_WORKSPACE}/keystores/alfresco/alfresco.keystore -Dencryption.ssl.truststore.location=${CI_WORKSPACE}/keystores/alfresco/alfresco.truststore' | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Set transformers tag" | ||||
| @@ -481,8 +879,52 @@ jobs: | ||||
|       - name: "Set up the environment" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile ${{ matrix.compose-profile }} up -d | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} - ${{ matrix.testSuite }} ${{ matrix.idp }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl repository -am -Dtest=${{ matrix.testSuite }} -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco ${{ matrix.mvn-options }} # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl repository -am -Dtest=${{ matrix.testSuite }} -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco ${{ matrix.mvn-options }} "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -528,9 +970,9 @@ jobs: | ||||
|       REQUIRES_LOCAL_IMAGES: true | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
| @@ -544,16 +986,59 @@ jobs: | ||||
|       - name: "Build TAS integration tests" | ||||
|         if: ${{ matrix.test-name }} == 'Integration TAS tests' | ||||
|         run: mvn install -pl :alfresco-community-repo-integration-test -am -DskipTests -Pall-tas-tests | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} - ${{ matrix.test-name }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         id: tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: mvn -B verify -f packaging/tests/${{ matrix.pom-dir }}/pom.xml -Pall-tas-tests,${{ matrix.test-profile }} -Denvironment=default -DrunBugs=false | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B verify -f packaging/tests/${{ matrix.pom-dir }}/pom.xml -Pall-tas-tests,${{ matrix.test-profile }} -Denvironment=default -DrunBugs=false "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Print output after success" | ||||
|         if: ${{ always() && steps.tests.outcome == 'success' }} | ||||
|         run: ${TAS_SCRIPTS}/output_tests_run.sh "packaging/tests/${{ matrix.pom-dir }}" | ||||
|       - name: "Print output after failure" | ||||
|         if: ${{ always() && steps.tests.outcome == 'failure' }} | ||||
|         run: ${TAS_SCRIPTS}/output_logs_for_failures.sh "packaging/tests/${{ matrix.pom-dir }}" | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -567,15 +1052,59 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - name: "Run Postgres 16.6 database" | ||||
|         run: docker compose -f ./scripts/ci/docker-compose/docker-compose.yaml --profile postgres up -d | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Run tests" | ||||
|         run: mvn -B test -pl :alfresco-share-services -am -Dtest=ShareServicesTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco # pragma: allowlist secret | ||||
|         id: run-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl :alfresco-share-services -am -Dtest=ShareServicesTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -597,17 +1126,31 @@ jobs: | ||||
|       REQUIRES_INSTALLED_ARTIFACTS: true | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
|           bash ./scripts/ci/init.sh | ||||
|           bash ./scripts/ci/build.sh | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} 0${{ matrix.part }} - (PostgreSQL) ${{ matrix.test-name }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Verify" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }} | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }} "${args[@]}" | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -629,17 +1172,31 @@ jobs: | ||||
|       REQUIRES_INSTALLED_ARTIFACTS: true | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
|           bash ./scripts/ci/init.sh | ||||
|           bash ./scripts/ci/build.sh | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} 0${{ matrix.part }} - (MySQL) ${{ matrix.test-name }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Verify" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }} | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn --file amps/ags/pom.xml -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql -PagsAllTestSuitePt${{ matrix.part }} ${{ env.LOG_WARN }} "${args[@]}" | ||||
|       - name: "Clean Maven cache" | ||||
|         run: bash ./scripts/ci/cleanup_cache.sh | ||||
|  | ||||
| @@ -657,9 +1214,9 @@ jobs: | ||||
|       REQUIRES_LOCAL_IMAGES: true | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
| @@ -671,9 +1228,53 @@ jobs: | ||||
|           ${{ env.TAS_SCRIPTS }}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml | ||||
|           ${{ env.TAS_SCRIPTS }}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco" | ||||
|           mvn -B install -pl :alfresco-governance-services-automation-community-rest-api -am -Pags -Pall-tas-tests -DskipTests | ||||
|       - name: "Prepare Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-prepare@v8.16.0 | ||||
|         id: rp-prepare | ||||
|         with: | ||||
|           rp-launch-prefix: ${{ env.RP_LAUNCH_PREFIX }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-use-static-launch-name: true | ||||
|         continue-on-error: true | ||||
|       - name: "Add GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         env: | ||||
|           RP_ENABLED: ${{ steps.rp-prepare.outputs.enabled }} | ||||
|           RP_KEY: ${{ steps.rp-prepare.outputs.key }} | ||||
|           RP_URL: ${{ steps.rp-prepare.outputs.url }} | ||||
|         run: bash scripts/ci/add_step_summary.sh | ||||
|         continue-on-error: true | ||||
|       - name: "Test" | ||||
|         id: run-tests | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags -Pall-tas-tests | ||||
|         env: | ||||
|           RP_OPTS: ${{ github.ref_name == 'master' && steps.rp-prepare.outputs.mvn-opts || '' }} | ||||
|         run: | | ||||
|           eval "args=($RP_OPTS)" | ||||
|           mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags -Pall-tas-tests "${args[@]}" | ||||
|         continue-on-error: true | ||||
|       - name: "Update GitHub Step Summary" | ||||
|         if: github.ref_name == 'master' | ||||
|         run: | | ||||
|           echo "#### ⏱ After Tests: $(date -u +'%Y-%m-%d %H:%M:%S%:z')" >> $GITHUB_STEP_SUMMARY | ||||
|         continue-on-error: true | ||||
|       - name: "Summarize Report Portal" | ||||
|         if: github.ref_name == 'master' | ||||
|         uses: Alfresco/alfresco-build-tools/.github/actions/reportportal-summarize@v8.16.0 | ||||
|         id: rp-summarize | ||||
|         with: | ||||
|           tests-outcome: ${{ steps.run-tests.outcome }} | ||||
|           rp-launch-key: ${{ steps.rp-prepare.outputs.key }} | ||||
|           rp-project: ${{ env.RP_PROJECT }} | ||||
|           rp-token: ${{ secrets.REPORT_PORTAL_TOKEN }} | ||||
|         continue-on-error: true | ||||
|       - name: "Exit on failure" | ||||
|         if: steps.run-tests.outcome != 'success' | ||||
|         run: | | ||||
|           echo "::error title=run-tests::Tests failed: re-throwing on error." | ||||
|           exit 1 | ||||
|       - name: "Configure AWS credentials" | ||||
|         if: ${{ always() }} | ||||
|         uses: aws-actions/configure-aws-credentials@v4 | ||||
| @@ -703,9 +1304,9 @@ jobs: | ||||
|       !contains(github.event.head_commit.message, '[force]') | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Build" | ||||
|         timeout-minutes: ${{ fromJSON(env.GITHUB_ACTIONS_DEPLOY_TIMEOUT) }} | ||||
|         run: | | ||||
|   | ||||
							
								
								
									
										16
									
								
								.github/workflows/master_release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/master_release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -34,12 +34,12 @@ jobs: | ||||
|       - uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.16.0 | ||||
|         with: | ||||
|           username: ${{ env.GIT_USERNAME }} | ||||
|           email: ${{ env.GIT_EMAIL }} | ||||
| @@ -63,12 +63,12 @@ jobs: | ||||
|       - uses: actions/checkout@v4 | ||||
|         with: | ||||
|           persist-credentials: false | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/get-build-info@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/free-hosted-runner-disk-space@v8.16.0 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/setup-java-build@v8.16.0 | ||||
|       - name: "Init" | ||||
|         run: bash ./scripts/ci/init.sh | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/configure-git-author@v8.16.0 | ||||
|         with: | ||||
|           username: ${{ env.GIT_USERNAME }} | ||||
|           email: ${{ env.GIT_EMAIL }} | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/precommit_formatter.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/precommit_formatter.yml
									
									
									
									
										vendored
									
									
								
							| @@ -13,7 +13,7 @@ jobs: | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Set up Python ${{ inputs.python-version }} | ||||
|         uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 | ||||
|         uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 | ||||
|         with: | ||||
|           python-version: "3.9" | ||||
|       - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 | ||||
| @@ -22,7 +22,7 @@ jobs: | ||||
|           extra_args: --all-files | ||||
|       - name: Update secrets baseline | ||||
|         run: pip install detect-secrets && detect-secrets scan --baseline .secrets.baseline | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/git-commit-changes@v8.24.1 | ||||
|       - uses: Alfresco/alfresco-build-tools/.github/actions/git-commit-changes@v8.16.0 | ||||
|         with: | ||||
|           username: ${{ secrets.BOT_GITHUB_USERNAME }} | ||||
|           add-options: -u | ||||
|   | ||||
| @@ -127,6 +127,29 @@ | ||||
|     } | ||||
|   ], | ||||
|   "results": { | ||||
|     ".github/workflows/ci.yml": [ | ||||
|       { | ||||
|         "type": "Secret Keyword", | ||||
|         "filename": ".github/workflows/ci.yml", | ||||
|         "hashed_secret": "b86dc2f033a63f2b7b9e7d270ab806d2910d7572", | ||||
|         "is_verified": false, | ||||
|         "line_number": 295 | ||||
|       }, | ||||
|       { | ||||
|         "type": "Secret Keyword", | ||||
|         "filename": ".github/workflows/ci.yml", | ||||
|         "hashed_secret": "1bfb0e20f886150ba59b853bcd49dea893e00966", | ||||
|         "is_verified": false, | ||||
|         "line_number": 370 | ||||
|       }, | ||||
|       { | ||||
|         "type": "Secret Keyword", | ||||
|         "filename": ".github/workflows/ci.yml", | ||||
|         "hashed_secret": "128f14373ccfaff49e3664045d3a11b50cbb7b39", | ||||
|         "is_verified": false, | ||||
|         "line_number": 904 | ||||
|       } | ||||
|     ], | ||||
|     ".github/workflows/master_release.yml": [ | ||||
|       { | ||||
|         "type": "Secret Keyword", | ||||
| @@ -1250,7 +1273,7 @@ | ||||
|         "filename": "repository/src/main/resources/alfresco/repository.properties", | ||||
|         "hashed_secret": "84551ae5442affc9f1a2d3b4c86ae8b24860149d", | ||||
|         "is_verified": false, | ||||
|         "line_number": 771, | ||||
|         "line_number": 770, | ||||
|         "is_secret": false | ||||
|       } | ||||
|     ], | ||||
| @@ -1845,5 +1868,5 @@ | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   "generated_at": "2025-06-09T16:43:14Z" | ||||
|   "generated_at": "2025-03-27T23:45:41Z" | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-community-repo-amps</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <modules> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-community-parent</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <modules> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-automation-community-repo</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <build> | ||||
| @@ -74,6 +74,16 @@ | ||||
|          <artifactId>alfresco-testng</artifactId> | ||||
|          <version>1.1</version> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>com.epam.reportportal</groupId> | ||||
|          <artifactId>agent-java-testng</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>com.squareup.okhttp3</groupId> | ||||
|          <artifactId>okhttp</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>org.awaitility</groupId> | ||||
|          <artifactId>awaitility</artifactId> | ||||
| @@ -83,12 +93,12 @@ | ||||
|       <dependency> | ||||
|          <groupId>org.apache.commons</groupId> | ||||
|          <artifactId>commons-collections4</artifactId> | ||||
|          <version>4.5.0</version> | ||||
|          <version>4.4</version> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>com.github.docker-java</groupId> | ||||
|          <artifactId>docker-java</artifactId> | ||||
|          <version>3.6.0</version> | ||||
|          <version>3.4.0</version> | ||||
|          <exclusions> | ||||
|             <exclusion> | ||||
|                <groupId>org.bouncycastle</groupId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -23,7 +23,7 @@ Recorded content can be explicitly destroyed whilst maintaining the original nod | ||||
| * License: Alfresco Community | ||||
| * Issue Tracker Link: [JIRA RM](https://issues.alfresco.com/jira/projects/RM/summary) | ||||
| * Contribution Model: Alfresco Closed Source | ||||
| * Documentation: [docs.alfresco.com (Records Management)](https://support.hyland.com/access?dita:id=job1721300866386&vrm_version=25.1&component=Alfresco%20Governance%20Services%20Community%20Edition) | ||||
| * Documentation: [docs.alfresco.com (Records Management)](https://support.hyland.com/r/Alfresco/Alfresco-Governance-Services-Community-Edition/23.4/Alfresco-Governance-Services-Community-Edition/Introduction) | ||||
|  | ||||
| ***  | ||||
|  | ||||
|   | ||||
| @@ -21,18 +21,18 @@ RM is split into two main parts - a repository integration and a Share integrati | ||||
| * [Community License](../LICENSE.txt) | ||||
| * [Enterprise License](../../rm-enterprise/LICENSE.txt) (this file will only be present in clones of the Enterprise repository) | ||||
| * [Issue Tracker Link](https://issues.alfresco.com/jira/projects/RM) | ||||
| * [Community Documentation Link](https://support.hyland.com/access?dita:id=job1721300866386&vrm_version=25.1&component=Alfresco%20Governance%20Services%20Community%20Edition) | ||||
| * [Enterprise Documentation Link](https://support.hyland.com/access?dita:id=job1721300866386&vrm_version=25.1) | ||||
| * [Community Documentation Link](https://support.hyland.com/r/Alfresco/Alfresco-Governance-Services-Community-Edition/23.4/Alfresco-Governance-Services-Community-Edition/Introduction) | ||||
| * [Enterprise Documentation Link](https://support.hyland.com/r/Alfresco/Alfresco-Governance-Services/23.4/Alfresco-Governance-Services/Introduction) | ||||
| * [Contribution Model](../../CONTRIBUTING.md) | ||||
|  | ||||
| ***  | ||||
|  | ||||
| ### Prerequisite Knowledge | ||||
| An understanding of Alfresco Content Services is assumed. The following pages from the [developer documentation](https://support.hyland.com/access?dita:id=lsl1724405261585&vrm_version=25.2&component=Alfresco%20Content%20Services%20Community%20Edition) give useful background information: | ||||
| An understanding of Alfresco Content Services is assumed. The following pages from the [developer documentation](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services-Community-Edition/23.4/Alfresco-Content-Services-Community-Edition/Develop) give useful background information: | ||||
|  | ||||
| * [ACS Architecture](https://support.hyland.com/access?dita:id=lfo1719554691023&vrm_version=25.2) | ||||
| * [Platform Extensions](https://support.hyland.com/access?dita:id=ifr1720080387005&vrm_version=25.2) | ||||
| * [Share Extensions](https://support.hyland.com/access?dita:id=wqu1720687386891&vrm_version=25.2) | ||||
| * [ACS Architecture](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/Software-Architecture) | ||||
| * [Platform Extensions](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/Extension-Points-Overview) | ||||
| * [Share Extensions](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/Share-UI-Extension-Points) | ||||
|  | ||||
| ***  | ||||
|  | ||||
| @@ -44,12 +44,12 @@ The RM Share module communicates with the repository module via REST APIs. Inter | ||||
| * A DAO layer responsible for CRUD operations against the database. | ||||
|  | ||||
| #### REST API | ||||
| The REST API endpoints fall into two main types - v0 (Webscripts) and v1. The [v0 API](https://support.hyland.com/access?dita:id=fga1720080409048&vrm_version=25.2) is older and not recommended for integrations. The [v1 API](https://support.hyland.com/access?dita:id=cmm1721136574006&vrm_version=25.2) is newer but isn't yet feature complete. If you are running RM locally then the GS API Explorer will be available at [this link](http://localhost:8080/gs-api-explorer/). | ||||
| The REST API endpoints fall into two main types - v0 (Webscripts) and v1. The [v0 API](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/In-Process-Platform-Extension-Points/Web-Scripts) is older and not recommended for integrations. The [v1 API](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/REST-API-Guide) is newer but isn't yet feature complete. If you are running RM locally then the GS API Explorer will be available at [this link](http://localhost:8080/gs-api-explorer/). | ||||
|  | ||||
| Internally the GS v1 REST API is built on the [Alfresco v1 REST API framework](https://community.alfresco.com/community/ecm/blog/2016/10/11/v1-rest-api-part-1-introduction). It aims to be consistent with this in terms of behaviour and naming. | ||||
|  | ||||
| #### Java Public API | ||||
| The Java service layer is fronted by a [Java Public API](https://support.hyland.com/access?dita:id=lol1721390191517&vrm_version=25.2), which we will ensure backward compatible with previous releases. Before we remove any methods there will first be a release containing that method deprecated to allow third party integrations to migrate to a new method.  The Java Public API also includes a set of POJO objects which are needed to communicate with the services. It is easy to identify classes that are part of the Java Public API as they are annotated `@AlfrescoPublicApi`. | ||||
| The Java service layer is fronted by a [Java Public API](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/Reference/Java-Foundation-API), which we will ensure backward compatible with previous releases. Before we remove any methods there will first be a release containing that method deprecated to allow third party integrations to migrate to a new method.  The Java Public API also includes a set of POJO objects which are needed to communicate with the services. It is easy to identify classes that are part of the Java Public API as they are annotated `@AlfrescoPublicApi`. | ||||
|  | ||||
| Each Java service will have at least four beans defined for it: | ||||
|  | ||||
| @@ -61,7 +61,7 @@ Each Java service will have at least four beans defined for it: | ||||
| #### DAOs | ||||
| The DAOs are not part of the Java Public API, but handle CRUD operations against RM stored data. We have some custom queries to improve performance for particularly heavy operations. | ||||
|  | ||||
| We use standard Alfresco [data modelling](https://support.hyland.com/access?dita:id=ekx1720080373621&vrm_version=25.2) to store RM metadata. We extend the [Alfresco patching mechanism](https://support.hyland.com/access?dita:id=ato1720080396825&vrm_version=25.2) to provide community and enterprise schema upgrades. | ||||
| We use standard Alfresco [data modelling](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/In-Process-Platform-Extension-Points/Content-Model-Extension-Point) to store RM metadata. We extend the [Alfresco patching mechanism](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/In-Process-Platform-Extension-Points/Patches) to provide community and enterprise schema upgrades. | ||||
|  | ||||
| *** | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-community-parent</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <modules> | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| SOLR6_TAG=2.0.16 | ||||
| SOLR6_TAG=2.0.15 | ||||
| POSTGRES_TAG=16.6 | ||||
| ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8 | ||||
|   | ||||
| @@ -119,11 +119,6 @@ rm.patch.v35.holdNewChildAssocPatch.batchSize=1000 | ||||
| rm.haspermissionmap.read=Read | ||||
| rm.haspermissionmap.write=WriteProperties,AddChildren,ReadContent | ||||
|  | ||||
| # Extended Permissions | ||||
| # Enable matching the given username with the correct casing username when retrieving an IPR group. | ||||
| # Only needs to be used if there are owners that don't have the username in the correct casing. | ||||
| rm.extendedSecurity.enableUsernameNormalization=false | ||||
|  | ||||
| # | ||||
| # Extended auto-version behaviour.  If true and other auto-version properties are satisfied, then | ||||
| # a document will be auto-versioned when its type is changed. | ||||
|   | ||||
| @@ -611,7 +611,6 @@ | ||||
|         <property name="authorityService" ref="authorityService"/> | ||||
|         <property name="permissionService" ref="permissionService"/> | ||||
|         <property name="transactionService" ref="transactionService"/> | ||||
|         <property name="enableUsernameNormalization" value="${rm.extendedSecurity.enableUsernameNormalization}" /> | ||||
|     </bean> | ||||
|  | ||||
|     <bean id="ExtendedSecurityService" class="org.springframework.aop.framework.ProxyFactoryBean"> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-community-repo-parent</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <properties> | ||||
| @@ -84,6 +84,11 @@ | ||||
|          <artifactId>junit</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>com.epam.reportportal</groupId> | ||||
|          <artifactId>agent-java-testng</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>org.postgresql</groupId> | ||||
|          <artifactId>postgresql</artifactId> | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import org.springframework.context.ApplicationListener; | ||||
| import org.springframework.context.event.ContextRefreshedEvent; | ||||
| import org.springframework.extensions.webscripts.ui.common.StringUtils; | ||||
|  | ||||
| import org.alfresco.model.ContentModel; | ||||
| import org.alfresco.model.RenditionModel; | ||||
| import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; | ||||
| import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; | ||||
| @@ -97,8 +96,6 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl | ||||
|     /** transaction service */ | ||||
|     private TransactionService transactionService; | ||||
|  | ||||
|     private boolean enableUsernameNormalization; | ||||
|  | ||||
|     /** | ||||
|      * @param filePlanService | ||||
|      *            file plan service | ||||
| @@ -144,15 +141,6 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl | ||||
|         this.transactionService = transactionService; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param enableUsernameNormalization | ||||
|      *            enable username normalization to ensure correct casing | ||||
|      */ | ||||
|     public void setEnableUsernameNormalization(boolean enableUsernameNormalization) | ||||
|     { | ||||
|         this.enableUsernameNormalization = enableUsernameNormalization; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Application context refresh event handler | ||||
|      */ | ||||
| @@ -371,18 +359,12 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl | ||||
|     { | ||||
|         String group = null; | ||||
|  | ||||
|         // If enabled, the authorities are forced to match the correct casing of the usernames in case they were set | ||||
|         // with the incorrect casing. | ||||
|         // If not, it will just use the authorities as they are. | ||||
|         // In normal circumstances, the authorities are in the correct casing, so this is disabled by default. | ||||
|         Set<String> authoritySet = normalizeAuthorities(authorities); | ||||
|  | ||||
|         // find group or determine what the next index is if no group exists or there is a clash | ||||
|         Pair<String, Integer> groupResult = findIPRGroup(groupPrefix, authoritySet); | ||||
|         Pair<String, Integer> groupResult = findIPRGroup(groupPrefix, authorities); | ||||
|  | ||||
|         if (groupResult.getFirst() == null) | ||||
|         { | ||||
|             group = createIPRGroup(groupPrefix, authoritySet, groupResult.getSecond()); | ||||
|             group = createIPRGroup(groupPrefix, authorities, groupResult.getSecond()); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
| @@ -417,8 +399,7 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl | ||||
|         while (hasMoreItems == true) | ||||
|         { | ||||
|             // get matching authorities | ||||
|             PagingResults<String> results = authorityService.getAuthorities( | ||||
|                     AuthorityType.GROUP, | ||||
|             PagingResults<String> results = authorityService.getAuthorities(AuthorityType.GROUP, | ||||
|                     RMAuthority.ZONE_APP_RM, | ||||
|                     groupShortNamePrefix, | ||||
|                     false, | ||||
| @@ -446,63 +427,6 @@ public class ExtendedSecurityServiceImpl extends ServiceBaseImpl | ||||
|         return new Pair<>(iprGroup, nextGroupIndex); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Given a set of authorities, normalizes the authority names to ensure correct casing. | ||||
|      *  | ||||
|      * @param authNames | ||||
|      * @return | ||||
|      */ | ||||
|     private Set<String> normalizeAuthorities(Set<String> authNames) | ||||
|     { | ||||
|         // If disabled or no authorities, return as is | ||||
|         if (!enableUsernameNormalization || authNames == null || authNames.isEmpty()) | ||||
|         { | ||||
|             return authNames; | ||||
|         } | ||||
|  | ||||
|         Set<String> normalizedAuthorities = new HashSet<>(); | ||||
|         for (String authorityName : authNames) | ||||
|         { | ||||
|             normalizedAuthorities.add(normalizeAuthorityName(authorityName)); | ||||
|         } | ||||
|         return normalizedAuthorities; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Usernames are case insensitive but affect the IPR group matching when set with different casing. For a given authority of type user, this method normalizes the authority name. If group, it returns the name as-is. | ||||
|      * | ||||
|      * @param authorityName | ||||
|      *            the authority name to normalize | ||||
|      * @return the normalized authority name | ||||
|      */ | ||||
|     private String normalizeAuthorityName(String authorityName) | ||||
|     { | ||||
|         if (authorityName == null || authorityName.startsWith(GROUP_PREFIX)) | ||||
|         { | ||||
|             return authorityName; | ||||
|         } | ||||
|  | ||||
|         // For users, attempt to get the correct casing from the username property of the user node | ||||
|         if (authorityService.authorityExists(authorityName)) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 NodeRef authorityNodeRef = authorityService.getAuthorityNodeRef(authorityName); | ||||
|                 if (authorityNodeRef != null) | ||||
|                 { | ||||
|                     String username = (String) nodeService.getProperty(authorityNodeRef, ContentModel.PROP_USERNAME); | ||||
|                     return username != null ? username : authorityName; | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 // If anything goes wrong, fallback to the original name | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return authorityName; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Determines whether a group exactly matches a list of authorities. | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -4,7 +4,7 @@ | ||||
|  | ||||
| # Version label | ||||
| version.major=25 | ||||
| version.minor=3 | ||||
| version.minor=2 | ||||
| version.revision=0 | ||||
| version.label= | ||||
|  | ||||
|   | ||||
| @@ -52,7 +52,6 @@ import java.util.Set; | ||||
| import java.util.stream.Collectors; | ||||
| import java.util.stream.Stream; | ||||
|  | ||||
| import org.alfresco.model.ContentModel; | ||||
| import org.alfresco.model.RenditionModel; | ||||
| import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; | ||||
| import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; | ||||
| @@ -68,7 +67,6 @@ import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransacti | ||||
| import org.alfresco.service.cmr.repository.ChildAssociationRef; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.service.cmr.repository.StoreRef; | ||||
| import org.alfresco.service.cmr.security.AccessPermission; | ||||
| import org.alfresco.service.cmr.security.AccessStatus; | ||||
| import org.alfresco.service.cmr.security.AuthorityService; | ||||
| @@ -524,104 +522,6 @@ public class ExtendedSecurityServiceImplUnitTest | ||||
|         verify(mockedPermissionService).setPermission(nodeRef, writeGroup, RMPermissionModel.FILING, true); | ||||
|          | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Given a node with no previous IPR groups assigned | ||||
|      * And having pre-existing IPR groups matching the ones we need | ||||
|      * When I add some read and write authorities but with a different casing | ||||
|      * Then the existing IPR groups are used | ||||
|      */ | ||||
|     @SuppressWarnings("unchecked") | ||||
|     @Test public void addExtendedSecurityWithMixedCasingUsernames() | ||||
|     { | ||||
|         // Have the usernames in the node as the correct usernames but with incorrect casing | ||||
|         String user1 = "UseR"; | ||||
|         String user2 = "UseR_w"; | ||||
|  | ||||
|         // Incorrect IPR Group names | ||||
|         Set<String> diffCasingReaders = Stream.of(user1, GROUP).collect(Collectors.toSet()); | ||||
|         Set<String> diffCasingWriters = Stream.of(user2, GROUP_W).collect(Collectors.toSet()); | ||||
|         String wrongReadGroupPrefix = extendedSecurityService.getIPRGroupPrefixShortName(READER_GROUP_PREFIX, diffCasingReaders); | ||||
|         String wrongWriteGroupPrefix = extendedSecurityService.getIPRGroupPrefixShortName(WRITER_GROUP_PREFIX, diffCasingWriters); | ||||
|         String wrongReadGroup = wrongReadGroupPrefix + "0"; | ||||
|         String wrongWriteGroup = wrongWriteGroupPrefix + "0"; | ||||
|  | ||||
|         // Correct Group names | ||||
|         String correctReadGroup = readGroupPrefix + "0"; | ||||
|         String correctWriteGroup = writeGroupPrefix + "0"; | ||||
|  | ||||
|         // If queried for the correct groups, return the results | ||||
|         PagingResults<String> mockedCorrectReadPResults = mock(PagingResults.class); | ||||
|         PagingResults<String> mockedCorrectWritePResults = mock(PagingResults.class); | ||||
|         when(mockedCorrectReadPResults.getPage()) | ||||
|             .thenReturn(Stream.of(GROUP_PREFIX + correctReadGroup).collect(Collectors.toList())); | ||||
|         when(mockedAuthorityService.getAuthorities( | ||||
|                 eq(AuthorityType.GROUP),  | ||||
|                 eq(RMAuthority.ZONE_APP_RM),  | ||||
|                 eq(readGroupPrefix), | ||||
|                 eq(false),  | ||||
|                 eq(false),  | ||||
|                 any(PagingRequest.class))) | ||||
|             .thenReturn(mockedCorrectReadPResults); | ||||
|          | ||||
|         when(mockedCorrectWritePResults.getPage()) | ||||
|             .thenReturn(Stream.of(GROUP_PREFIX + correctWriteGroup).collect(Collectors.toList())); | ||||
|         when(mockedAuthorityService.getAuthorities( | ||||
|                 eq(AuthorityType.GROUP),  | ||||
|                 eq(RMAuthority.ZONE_APP_RM),  | ||||
|                 eq(writeGroupPrefix), | ||||
|                 eq(false),  | ||||
|                 eq(false),  | ||||
|                 any(PagingRequest.class))) | ||||
|             .thenReturn(mockedCorrectWritePResults); | ||||
|  | ||||
|         // Don't return results for the incorrect groups (lenient as these may not be called with normalization enabled) | ||||
|         PagingResults<String> mockedWrongReadPResults = mock(PagingResults.class); | ||||
|         PagingResults<String> mockedWrongWritePResults = mock(PagingResults.class); | ||||
|         lenient().when(mockedWrongReadPResults.getPage()) | ||||
|             .thenReturn(Collections.emptyList()); | ||||
|         lenient().when(mockedAuthorityService.getAuthorities( | ||||
|                 eq(AuthorityType.GROUP),  | ||||
|                 eq(RMAuthority.ZONE_APP_RM),  | ||||
|                 eq(wrongReadGroupPrefix), | ||||
|                 eq(false),  | ||||
|                 eq(false),  | ||||
|                 any(PagingRequest.class))) | ||||
|             .thenReturn(mockedWrongReadPResults); | ||||
|          | ||||
|         lenient().when(mockedWrongWritePResults.getPage()) | ||||
|             .thenReturn(Collections.emptyList()); | ||||
|         lenient().when(mockedAuthorityService.getAuthorities( | ||||
|                 eq(AuthorityType.GROUP),  | ||||
|                 eq(RMAuthority.ZONE_APP_RM),  | ||||
|                 eq(wrongWriteGroupPrefix), | ||||
|                 eq(false),  | ||||
|                 eq(false),  | ||||
|                 any(PagingRequest.class))) | ||||
|             .thenReturn(mockedWrongWritePResults); | ||||
|  | ||||
|         // The users do exist, despite being in a different casing and are able to be retrieved | ||||
|         NodeRef noderefUser1 = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, USER); | ||||
|         when(mockedAuthorityService.authorityExists(user1)).thenReturn(true); | ||||
|         when(mockedAuthorityService.getAuthorityNodeRef(user1)).thenReturn(noderefUser1); | ||||
|         when(mockedNodeService.getProperty(noderefUser1, ContentModel.PROP_USERNAME)).thenReturn(USER); | ||||
|  | ||||
|         NodeRef noderefUser2 = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, USER_W); | ||||
|         when(mockedAuthorityService.authorityExists(user2)).thenReturn(true); | ||||
|         when(mockedAuthorityService.getAuthorityNodeRef(user2)).thenReturn(noderefUser2); | ||||
|         when(mockedNodeService.getProperty(noderefUser2, ContentModel.PROP_USERNAME)).thenReturn(USER_W); | ||||
|  | ||||
|         // Set the extended security service to normalize usernames | ||||
|         extendedSecurityService.setEnableUsernameNormalization(true); | ||||
|         extendedSecurityService.set(nodeRef, diffCasingReaders, diffCasingWriters); | ||||
|  | ||||
|         // Verify that the incorrect read group is not created | ||||
|         verify(mockedAuthorityService, never()).createAuthority(AuthorityType.GROUP, wrongReadGroup, wrongReadGroup, Collections.singleton(RMAuthority.ZONE_APP_RM)); | ||||
|  | ||||
|         // Verify that the incorrect write group is not created | ||||
|         verify(mockedAuthorityService, never()).createAuthority(AuthorityType.GROUP, wrongWriteGroup, wrongWriteGroup, Collections.singleton(RMAuthority.ZONE_APP_RM)); | ||||
|  | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Given a node with no previous IPR groups assigned | ||||
| @@ -671,7 +571,7 @@ public class ExtendedSecurityServiceImplUnitTest | ||||
|             .thenReturn(Stream | ||||
|                 .of(USER_W, AlfMock.generateText()) | ||||
|                 .collect(Collectors.toSet())); | ||||
|  | ||||
|          | ||||
|         // add extended security | ||||
|         extendedSecurityService.set(nodeRef, READERS, WRITERS); | ||||
|          | ||||
| @@ -995,7 +895,7 @@ public class ExtendedSecurityServiceImplUnitTest | ||||
|         // group names | ||||
|         String readGroup = extendedSecurityService.getIPRGroupShortName(READER_GROUP_FULL_PREFIX, READERS, 0); | ||||
|         String writeGroup = extendedSecurityService.getIPRGroupShortName(WRITER_GROUP_FULL_PREFIX, WRITERS, 0); | ||||
|  | ||||
|          | ||||
|         // setup renditions | ||||
|         NodeRef renditionNodeRef = AlfMock.generateNodeRef(mockedNodeService); | ||||
|         when(mockedNodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_RECORD)) | ||||
| @@ -1004,7 +904,7 @@ public class ExtendedSecurityServiceImplUnitTest | ||||
|             .thenReturn(renditionNodeRef); | ||||
|         when(mockedNodeService.getChildAssocs(nodeRef, RenditionModel.ASSOC_RENDITION, RegexQNamePattern.MATCH_ALL)) | ||||
|             .thenReturn(Collections.singletonList(mockedChildAssociationRef));         | ||||
|  | ||||
|          | ||||
|         // setup permissions | ||||
|         Set<AccessPermission> permissions = Stream | ||||
|             .of(new AccessPermissionImpl(AlfMock.generateText(), AccessStatus.ALLOWED, readGroup, 0), | ||||
| @@ -1013,17 +913,17 @@ public class ExtendedSecurityServiceImplUnitTest | ||||
|             .collect(Collectors.toSet());         | ||||
|         when(mockedPermissionService.getAllSetPermissions(nodeRef)) | ||||
|             .thenReturn(permissions);       | ||||
|  | ||||
|          | ||||
|         // remove extended security | ||||
|         extendedSecurityService.remove(nodeRef); | ||||
|  | ||||
|          | ||||
|         // verify that the groups permissions have been removed | ||||
|         verify(mockedPermissionService).clearPermission(nodeRef, readGroup); | ||||
|         verify(mockedPermissionService).clearPermission(nodeRef, writeGroup); | ||||
|  | ||||
|          | ||||
|         // verify that the groups permissions have been removed from the rendition | ||||
|         verify(mockedPermissionService).clearPermission(renditionNodeRef, readGroup); | ||||
|         verify(mockedPermissionService).clearPermission(renditionNodeRef, writeGroup); | ||||
|  | ||||
|          | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-governance-services-community-repo-parent</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <build> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <modules> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-amps</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
| @@ -70,6 +70,11 @@ | ||||
|             <artifactId>junit</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.postgresql</groupId> | ||||
|             <artifactId>postgresql</artifactId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-community-repo</artifactId> | ||||
|       <version>25.3.0.25-SNAPSHOT</version> | ||||
|       <version>25.2.0.37-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <dependencies> | ||||
| @@ -126,6 +126,11 @@ | ||||
|          <artifactId>junit</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>com.epam.reportportal</groupId> | ||||
|          <artifactId>agent-java-testng</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>org.mockito</groupId> | ||||
|          <artifactId>mockito-core</artifactId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
| @@ -144,7 +144,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.fasterxml.woodstox</groupId> | ||||
|             <artifactId>woodstox-core</artifactId> | ||||
|             <version>7.1.1</version> | ||||
|             <version>7.0.0</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- the cxf libs were updated, see dependencyManagement section --> | ||||
| @@ -247,6 +247,11 @@ | ||||
|             <artifactId>junit</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.antlr</groupId> | ||||
|             <artifactId>gunit</artifactId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <dependencies> | ||||
| @@ -46,6 +46,11 @@ | ||||
|             <artifactId>junit</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.mockito</groupId> | ||||
|             <artifactId>mockito-core</artifactId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -9,6 +9,6 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
| </project> | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| # More infos about this image: https://github.com/Alfresco/alfresco-docker-base-tomcat | ||||
| FROM alfresco/alfresco-base-tomcat:tomcat10-jre17-rockylinux9@sha256:00d89fb84bda7bb37c17b0117adb2cfe4f7cbddcd6c1e42b0a67ea8dbb41a734 | ||||
| FROM alfresco/alfresco-base-tomcat:tomcat10-jre17-rockylinux9@sha256:9622418e142fb4fe1c5320666ad61ea292bc5c98f3dd0b550b6add33d18f659f | ||||
|  | ||||
| # Set default docker_context. | ||||
| ARG resource_path=target | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <modules> | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| SOLR6_TAG=2.0.16 | ||||
| SOLR6_TAG=2.0.15 | ||||
| POSTGRES_TAG=16.6 | ||||
| ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8 | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <modules> | ||||
|   | ||||
| @@ -27,7 +27,7 @@ | ||||
|  | ||||
| ## Synopsis | ||||
|  | ||||
| **TAS**( **T**est **A**utomation **S**ystem)- **CMIS** is the project that handles the automated tests related only to CMIS API integrated with Alfresco One [Alfresco CMIS API](https://support.hyland.com/access?dita:id=kvf1721390177551&vrm_version=25.2).  | ||||
| **TAS**( **T**est **A**utomation **S**ystem)- **CMIS** is the project that handles the automated tests related only to CMIS API integrated with Alfresco One [Alfresco CMIS API](https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Develop/Reference/CMIS-API).  | ||||
|  | ||||
| It is based on Apache Maven, compatible with major IDEs and is using also Spring capabilities for dependency injection. | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <organization> | ||||
| @@ -68,6 +68,16 @@ | ||||
|                 </exclusion> | ||||
|             </exclusions> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.squareup.okhttp3</groupId> | ||||
|             <artifactId>okhttp</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|     <build> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -9,7 +9,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <developers> | ||||
| @@ -36,6 +36,11 @@ | ||||
|             <artifactId>jakarta.mail-api</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|     <build> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -9,7 +9,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <developers> | ||||
| @@ -44,6 +44,18 @@ | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.squareup.okhttp3</groupId> | ||||
|             <artifactId>okhttp</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.sun.mail</groupId> | ||||
|             <artifactId>jakarta.mail</artifactId> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -8,7 +8,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
| @@ -17,7 +17,7 @@ | ||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
|         <rest.api.explorer.branch>master</rest.api.explorer.branch> | ||||
|         <httpclient-osgi-version>4.5.6</httpclient-osgi-version> | ||||
|         <commons-lang3.version>3.18.0</commons-lang3.version> | ||||
|         <commons-lang3.version>3.17.0</commons-lang3.version> | ||||
|         <scribejava-apis.version>8.3.3</scribejava-apis.version> | ||||
|         <java.version>17</java.version> | ||||
|     </properties> | ||||
| @@ -79,6 +79,18 @@ | ||||
|             <version>${commons-lang3.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.squareup.okhttp3</groupId> | ||||
|             <artifactId>okhttp</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.awaitility</groupId> | ||||
|             <artifactId>awaitility</artifactId> | ||||
| @@ -159,14 +171,14 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.codehaus.groovy</groupId> | ||||
|             <artifactId>groovy</artifactId> | ||||
|             <version>3.0.25</version> | ||||
|             <version>3.0.23</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-json--> | ||||
|         <dependency> | ||||
|             <groupId>org.codehaus.groovy</groupId> | ||||
|             <artifactId>groovy-json</artifactId> | ||||
|             <version>3.0.25</version> | ||||
|             <version>3.0.22</version> | ||||
|         </dependency> | ||||
|  | ||||
|        <dependency> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -747,7 +747,7 @@ public class CreateRulesTests extends RulesRestTest | ||||
|                 .createSingleRule(ruleModel); | ||||
|  | ||||
|         restClient.assertStatusCodeIs(NOT_FOUND); | ||||
|         restClient.assertLastError().containsSummary("Destination folder having Id: non-existent-node no longer exists. Please update your rule definition."); | ||||
|         restClient.assertLastError().containsSummary("The entity with id: non-existent-node was not found"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -1,95 +0,0 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2025 - 2025 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
|  * the paid license agreement will prevail.  Otherwise, the software is | ||||
|  * provided under the following open source license terms: | ||||
|  * | ||||
|  * Alfresco is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU Lesser General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * Alfresco is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU Lesser General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public License | ||||
|  * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. | ||||
|  * #L% | ||||
|  */ | ||||
|  | ||||
| package org.alfresco.rest.search; | ||||
|  | ||||
| import static org.testng.Assert.*; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.apache.commons.collections.CollectionUtils; | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.testng.annotations.Test; | ||||
|  | ||||
| import org.alfresco.rest.RestTest; | ||||
| import org.alfresco.rest.model.RestNodeModel; | ||||
| import org.alfresco.utility.RetryOperation; | ||||
| import org.alfresco.utility.Utility; | ||||
| import org.alfresco.utility.model.ContentModel; | ||||
| import org.alfresco.utility.model.FileModel; | ||||
| import org.alfresco.utility.model.TestGroup; | ||||
| import org.alfresco.utility.model.UserModel; | ||||
| import org.alfresco.utility.testrail.ExecutionType; | ||||
| import org.alfresco.utility.testrail.annotation.TestRail; | ||||
|  | ||||
| public class NodeContentTest extends RestTest | ||||
| { | ||||
|  | ||||
|     @TestRail(section = {TestGroup.REST_API, | ||||
|             TestGroup.SEARCH}, executionType = ExecutionType.SANITY, description = "Check basic functionality of GET queries/sites") | ||||
|     @Test(groups = {TestGroup.REST_API, TestGroup.RATINGS, TestGroup.CORE}) | ||||
|     public void testNodeContent() throws Exception | ||||
|     { | ||||
|  | ||||
|         UserModel adminUser = dataContent.getAdminUser(); | ||||
|         final String fileName = "nodecontent.pdf"; | ||||
|         final String term = "babekyrtso"; | ||||
|  | ||||
|         FileModel fileModel = FileModel.getFileModelBasedOnTestDataFile(fileName); | ||||
|         restClient.authenticateUser(adminUser) | ||||
|                 .configureRequestSpec() | ||||
|                 .addMultiPart("filedata", fileModel.toFile()); | ||||
|         RestNodeModel node = restClient.authenticateUser(adminUser).withCoreAPI().usingNode(ContentModel.my()).createNode(); | ||||
|         restClient.assertStatusCodeIs(HttpStatus.CREATED); | ||||
|  | ||||
|         SearchRequest query = new SearchRequest(); | ||||
|         RestRequestQueryModel queryModel = new RestRequestQueryModel(); | ||||
|         queryModel.setLanguage("afts"); | ||||
|         queryModel.setQuery(term); | ||||
|         query.setQuery(queryModel); | ||||
|  | ||||
|         RetryOperation op = () -> { | ||||
|             List<SearchNodeModel> entries = restClient.authenticateUser(adminUser) | ||||
|                     .withSearchAPI() | ||||
|                     .search(query).getEntries(); | ||||
|  | ||||
|             assertFalse(CollectionUtils.isEmpty(entries), "Search results should not be empty"); | ||||
|             boolean fileFound = entries.stream() | ||||
|                     .map(SearchNodeModel::getModel) | ||||
|                     .anyMatch(e -> fileName.equals(e.getName())); | ||||
|             assertTrue(fileFound, "Search results should contain the file: " + fileName); | ||||
|  | ||||
|             restClient.assertStatusCodeIs(HttpStatus.OK); | ||||
|         }; | ||||
|         Utility.sleep(300, 100000, op); | ||||
|  | ||||
|         restClient.authenticateUser(adminUser) | ||||
|                 .withCoreAPI() | ||||
|                 .usingNode(ContentModel.my()) | ||||
|                 .deleteNode(node); | ||||
|         restClient.assertStatusCodeIs(HttpStatus.NO_CONTENT); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
										
											Binary file not shown.
										
									
								
							| @@ -15,7 +15,6 @@ | ||||
|             <package name="org.alfresco.rest.people.*"/> | ||||
|             <package name="org.alfresco.rest.queries.*"/> | ||||
|             <package name="org.alfresco.rest.ratings.*"/> | ||||
|             <package name="org.alfresco.rest.search.*"/> | ||||
|         </packages> | ||||
|     </test> | ||||
| </suite> | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <developers> | ||||
| @@ -31,6 +31,11 @@ | ||||
|             <artifactId>webdav</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|     <build> | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
|   | ||||
							
								
								
									
										80
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <artifactId>alfresco-community-repo</artifactId> | ||||
|     <version>25.3.0.25-SNAPSHOT</version> | ||||
|     <version>25.2.0.37-SNAPSHOT</version> | ||||
|     <packaging>pom</packaging> | ||||
|     <name>Alfresco Community Repo Parent</name> | ||||
|  | ||||
| @@ -24,7 +24,7 @@ | ||||
|  | ||||
|     <properties> | ||||
|         <acs.version.major>25</acs.version.major> | ||||
|         <acs.version.minor>3</acs.version.minor> | ||||
|         <acs.version.minor>2</acs.version.minor> | ||||
|         <acs.version.revision>0</acs.version.revision> | ||||
|         <acs.version.label /> | ||||
|         <amp.min.version>${acs.version.major}.0.0</amp.min.version> | ||||
| @@ -51,37 +51,36 @@ | ||||
|         <dependency.alfresco-server-root.version>7.0.2</dependency.alfresco-server-root.version> | ||||
|         <dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version> | ||||
|         <dependency.activiti.version>5.23.0</dependency.activiti.version> | ||||
|         <dependency.alfresco-transform-core.version>5.2.1-A.3</dependency.alfresco-transform-core.version> | ||||
|         <dependency.alfresco-transform-service.version>4.2.1-A.4</dependency.alfresco-transform-service.version> | ||||
|         <dependency.alfresco-transform-core.version>5.1.8-SNAPSHOT</dependency.alfresco-transform-core.version> | ||||
|         <dependency.alfresco-transform-service.version>4.1.8-SNAPSHOT</dependency.alfresco-transform-service.version> | ||||
|         <dependency.alfresco-greenmail.version>7.1</dependency.alfresco-greenmail.version> | ||||
|         <dependency.acs-event-model.version>1.0.5</dependency.acs-event-model.version> | ||||
|         <dependency.acs-event-model.version>1.0.2</dependency.acs-event-model.version> | ||||
|  | ||||
|         <dependency.aspectj.version>1.9.22.1</dependency.aspectj.version> | ||||
|         <dependency.spring.version>6.2.8</dependency.spring.version> | ||||
|         <dependency.spring.version>6.2.2</dependency.spring.version> | ||||
|         <dependency.spring-security.version>6.3.9</dependency.spring-security.version> | ||||
|         <dependency.antlr.version>3.5.3</dependency.antlr.version> | ||||
|         <dependency.jackson.version>2.17.2</dependency.jackson.version> | ||||
|         <dependency.cxf.version>4.1.2</dependency.cxf.version> | ||||
|         <dependency.cxf.version>4.1.0</dependency.cxf.version> | ||||
|         <dependency.opencmis.version>1.0.0-jakarta-1</dependency.opencmis.version> | ||||
|         <dependency.webscripts.version>10.2</dependency.webscripts.version> | ||||
|         <dependency.bouncycastle.version>1.81</dependency.bouncycastle.version> | ||||
|         <dependency.mockito-core.version>5.18.0</dependency.mockito-core.version> | ||||
|         <dependency.webscripts.version>10.0</dependency.webscripts.version> | ||||
|         <dependency.bouncycastle.version>1.79</dependency.bouncycastle.version> | ||||
|         <dependency.mockito-core.version>5.14.1</dependency.mockito-core.version> | ||||
|         <dependency.assertj.version>3.27.3</dependency.assertj.version> | ||||
|         <dependency.org-json.version>20250517</dependency.org-json.version> | ||||
|         <dependency.org-json.version>20240303</dependency.org-json.version> | ||||
|         <dependency.commons-dbcp.version>2.12.0</dependency.commons-dbcp.version> | ||||
|         <dependency.commons-io.version>2.20.0</dependency.commons-io.version> | ||||
|         <dependency.gson.version>2.13.1</dependency.gson.version> | ||||
|         <dependency.commons-io.version>2.18.0</dependency.commons-io.version> | ||||
|         <dependency.gson.version>2.12.1</dependency.gson.version> | ||||
|         <dependency.guava.version>33.3.1-jre</dependency.guava.version> | ||||
|         <dependency.httpclient.version>4.5.14</dependency.httpclient.version> | ||||
|         <dependency.httpcore.version>4.4.16</dependency.httpcore.version> | ||||
|         <dependency.httpcomponents-httpclient5.version>5.5</dependency.httpcomponents-httpclient5.version> | ||||
|         <dependency.httpcomponents-httpcore5.version>5.3.4</dependency.httpcomponents-httpcore5.version> | ||||
|         <dependency.httpcomponents-httpcore5-h2.version>5.3.4</dependency.httpcomponents-httpcore5-h2.version> | ||||
|         <dependency.httpcomponents-httpclient5.version>5.4.1</dependency.httpcomponents-httpclient5.version> | ||||
|         <dependency.httpcomponents-httpcore5.version>5.3.3</dependency.httpcomponents-httpcore5.version> | ||||
|         <dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version> | ||||
|         <dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version> | ||||
|         <dependency.slf4j.version>2.0.16</dependency.slf4j.version> | ||||
|         <dependency.log4j.version>2.25.1</dependency.log4j.version> | ||||
|         <dependency.groovy.version>3.0.25</dependency.groovy.version> | ||||
|         <dependency.log4j.version>2.24.3</dependency.log4j.version> | ||||
|         <dependency.groovy.version>3.0.23</dependency.groovy.version> | ||||
|         <dependency.tika.version>2.9.2</dependency.tika.version> | ||||
|         <dependency.truezip.version>7.7.10</dependency.truezip.version> | ||||
|         <dependency.poi.version>5.4.0</dependency.poi.version> | ||||
| @@ -115,19 +114,19 @@ | ||||
|         <dependency.jakarta-json-path.version>2.9.0</dependency.jakarta-json-path.version> | ||||
|         <dependency.json-smart.version>2.5.2</dependency.json-smart.version> | ||||
|         <alfresco.googledrive.version>4.1.0</alfresco.googledrive.version> | ||||
|         <alfresco.aos-module.version>3.3.0</alfresco.aos-module.version> | ||||
|         <alfresco.api-explorer.version>25.2.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share --> | ||||
|         <alfresco.aos-module.version>3.3.0-A1</alfresco.aos-module.version> | ||||
|         <alfresco.api-explorer.version>25.1.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share --> | ||||
|  | ||||
|         <alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version> | ||||
|         <license-maven-plugin.version>2.4.0</license-maven-plugin.version> | ||||
|         <spotless-plugin.version>2.45.0</spotless-plugin.version> | ||||
|         <spotless-plugin.version>2.44.2</spotless-plugin.version> | ||||
|  | ||||
|         <dependency.postgresql.version>42.7.5</dependency.postgresql.version> | ||||
|         <dependency.mysql.version>8.0.30</dependency.mysql.version> | ||||
|         <dependency.mysql-image.version>8</dependency.mysql-image.version> | ||||
|         <dependency.mariadb.version>2.7.4</dependency.mariadb.version> | ||||
|         <dependency.tas-utility.version>5.0.2</dependency.tas-utility.version> | ||||
|         <dependency.rest-assured.version>5.5.5</dependency.rest-assured.version> | ||||
|         <dependency.rest-assured.version>5.5.0</dependency.rest-assured.version> | ||||
|         <dependency.tas-email.version>2.0.0</dependency.tas-email.version> | ||||
|         <dependency.tas-webdav.version>1.21</dependency.tas-webdav.version> | ||||
|         <dependency.tas-ftp.version>1.19</dependency.tas-ftp.version> | ||||
| @@ -401,20 +400,15 @@ | ||||
|                 <artifactId>httpcore5</artifactId> | ||||
|                 <version>${dependency.httpcomponents-httpcore5.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.apache.httpcomponents.core5</groupId> | ||||
|                 <artifactId>httpcore5-h2</artifactId> | ||||
|                 <version>${dependency.httpcomponents-httpcore5-h2.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>commons-logging</groupId> | ||||
|                 <artifactId>commons-logging</artifactId> | ||||
|                 <version>1.3.5</version> | ||||
|                 <version>1.3.3</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>commons-beanutils</groupId> | ||||
|                 <artifactId>commons-beanutils</artifactId> | ||||
|                 <version>1.11.0</version> | ||||
|                 <version>1.9.4</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>commons-codec</groupId> | ||||
| @@ -444,8 +438,8 @@ | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.apache.commons</groupId> | ||||
|                 <artifactId>commons-fileupload2-jakarta-servlet6</artifactId> | ||||
|                 <version>2.0.0-M4</version> | ||||
|                 <artifactId>commons-fileupload2-jakarta</artifactId> | ||||
|                 <version>2.0.0-M1</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>commons-net</groupId> | ||||
| @@ -708,13 +702,13 @@ | ||||
|             <dependency> | ||||
|                 <groupId>com.networknt</groupId> | ||||
|                 <artifactId>json-schema-validator</artifactId> | ||||
|                 <version>1.5.8</version> | ||||
|                 <version>1.5.5</version> | ||||
|             </dependency> | ||||
|             <!-- upgrade dependency from TIKA --> | ||||
|             <dependency> | ||||
|                 <groupId>org.jsoup</groupId> | ||||
|                 <artifactId>jsoup</artifactId> | ||||
|                 <version>1.21.1</version> | ||||
|                 <version>1.18.1</version> | ||||
|             </dependency> | ||||
|             <!-- upgrade dependency from TIKA --> | ||||
|             <dependency> | ||||
| @@ -798,7 +792,7 @@ | ||||
|             <dependency> | ||||
|                 <groupId>joda-time</groupId> | ||||
|                 <artifactId>joda-time</artifactId> | ||||
|                 <version>2.14.0</version> | ||||
|                 <version>2.13.1</version> | ||||
|             </dependency> | ||||
|  | ||||
|             <!-- provided dependencies --> | ||||
| @@ -828,6 +822,18 @@ | ||||
|                 <version>4.13.2</version> | ||||
|                 <scope>test</scope> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>com.epam.reportportal</groupId> | ||||
|                 <artifactId>agent-java-testng</artifactId> | ||||
|                 <version>5.4.0</version> | ||||
|                 <scope>test</scope> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>com.squareup.okhttp3</groupId> | ||||
|                 <artifactId>okhttp</artifactId> | ||||
|                 <version>4.12.0</version> | ||||
|                 <scope>test</scope> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.antlr</groupId> | ||||
|                 <artifactId>gunit</artifactId> | ||||
| @@ -943,7 +949,7 @@ | ||||
|             <dependency> | ||||
|                 <groupId>org.projectlombok</groupId> | ||||
|                 <artifactId>lombok</artifactId> | ||||
|                 <version>1.18.38</version> | ||||
|                 <version>1.18.36</version> | ||||
|                 <scope>provided</scope> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
| @@ -1000,7 +1006,7 @@ | ||||
|                 <plugin> | ||||
|                     <groupId>io.fabric8</groupId> | ||||
|                     <artifactId>docker-maven-plugin</artifactId> | ||||
|                     <version>0.46.0</version> | ||||
|                     <version>0.45.0</version> | ||||
|                 </plugin> | ||||
|                 <plugin> | ||||
|                     <artifactId>maven-surefire-plugin</artifactId> | ||||
| @@ -1081,7 +1087,7 @@ | ||||
|                 <plugin> | ||||
|                     <groupId>org.codehaus.cargo</groupId> | ||||
|                     <artifactId>cargo-maven3-plugin</artifactId> | ||||
|                     <version>1.10.20</version> | ||||
|                     <version>1.10.16</version> | ||||
|                 </plugin> | ||||
|                 <plugin> | ||||
|                     <groupId>org.apache.maven.plugins</groupId> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <dependencies> | ||||
| @@ -45,7 +45,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.apache.santuario</groupId> | ||||
|             <artifactId>xmlsec</artifactId> | ||||
|             <version>4.0.4</version> | ||||
|             <version>4.0.3</version> | ||||
|         </dependency> | ||||
|         <!-- newer version, see REPO-3133 --> | ||||
|         <dependency> | ||||
| @@ -66,6 +66,11 @@ | ||||
|             <artifactId>junit</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.mockito</groupId> | ||||
|             <artifactId>mockito-core</artifactId> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2023 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software.  | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of  | ||||
| @@ -46,7 +46,7 @@ import org.alfresco.repo.management.subsystems.ActivateableBean; | ||||
| import org.alfresco.repo.security.authentication.AuthenticationComponent; | ||||
| import org.alfresco.repo.security.authentication.AuthenticationException; | ||||
| import org.alfresco.repo.security.authentication.AuthenticationUtil; | ||||
| import org.alfresco.repo.security.authentication.external.ExternalUserAuthenticator; | ||||
| import org.alfresco.repo.security.authentication.external.AdminConsoleAuthenticator; | ||||
| import org.alfresco.repo.security.authentication.external.RemoteUserMapper; | ||||
| import org.alfresco.repo.web.auth.AuthenticationListener; | ||||
| import org.alfresco.repo.web.auth.TicketCredentials; | ||||
| @@ -71,11 +71,9 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|  | ||||
|     protected RemoteUserMapper remoteUserMapper; | ||||
|     protected AuthenticationComponent authenticationComponent; | ||||
|     protected ExternalUserAuthenticator adminConsoleAuthenticator; | ||||
|     protected ExternalUserAuthenticator webScriptsHomeAuthenticator; | ||||
|     protected AdminConsoleAuthenticator adminConsoleAuthenticator; | ||||
|  | ||||
|     private boolean alwaysAllowBasicAuthForAdminConsole = true; | ||||
|     private boolean alwaysAllowBasicAuthForWebScriptsHome = true; | ||||
|     List<String> adminConsoleScriptFamilies; | ||||
|     long getRemoteUserTimeoutMilliseconds = GET_REMOTE_USER_TIMEOUT_MILLISECONDS_DEFAULT; | ||||
|  | ||||
| @@ -99,16 +97,6 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|         this.alwaysAllowBasicAuthForAdminConsole = alwaysAllowBasicAuthForAdminConsole; | ||||
|     } | ||||
|  | ||||
|     public boolean isAlwaysAllowBasicAuthForWebScriptsHome() | ||||
|     { | ||||
|         return alwaysAllowBasicAuthForWebScriptsHome; | ||||
|     } | ||||
|  | ||||
|     public void setAlwaysAllowBasicAuthForWebScriptsHome(boolean alwaysAllowBasicAuthForWebScriptsHome) | ||||
|     { | ||||
|         this.alwaysAllowBasicAuthForWebScriptsHome = alwaysAllowBasicAuthForWebScriptsHome; | ||||
|     } | ||||
|  | ||||
|     public List<String> getAdminConsoleScriptFamilies() | ||||
|     { | ||||
|         return adminConsoleScriptFamilies; | ||||
| @@ -130,17 +118,11 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|     } | ||||
|  | ||||
|     public void setAdminConsoleAuthenticator( | ||||
|             ExternalUserAuthenticator adminConsoleAuthenticator) | ||||
|             AdminConsoleAuthenticator adminConsoleAuthenticator) | ||||
|     { | ||||
|         this.adminConsoleAuthenticator = adminConsoleAuthenticator; | ||||
|     } | ||||
|  | ||||
|     public void setWebScriptsHomeAuthenticator( | ||||
|             ExternalUserAuthenticator webScriptsHomeAuthenticator) | ||||
|     { | ||||
|         this.webScriptsHomeAuthenticator = webScriptsHomeAuthenticator; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Authenticator create(WebScriptServletRequest req, WebScriptServletResponse res) | ||||
|     { | ||||
| @@ -154,8 +136,6 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|      */ | ||||
|     public class RemoteUserAuthenticator extends BasicHttpAuthenticator | ||||
|     { | ||||
|         private static final String WEB_SCRIPTS_BASE_PATH = "org/springframework/extensions/webscripts"; | ||||
|  | ||||
|         public RemoteUserAuthenticator(WebScriptServletRequest req, WebScriptServletResponse res, AuthenticationListener listener) | ||||
|         { | ||||
|             super(req, res, listener); | ||||
| @@ -176,47 +156,24 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|             { | ||||
|  | ||||
|                 if (servletReq.getServiceMatch() != null && | ||||
|                         isAdminConsole(servletReq.getServiceMatch().getWebScript()) && isAdminConsoleAuthenticatorActive()) | ||||
|                         isAdminConsoleWebScript(servletReq.getServiceMatch().getWebScript()) && isAdminConsoleAuthenticatorActive()) | ||||
|                 { | ||||
|                     userId = getAdminConsoleUser(); | ||||
|                 } | ||||
|                 else if (servletReq.getServiceMatch() != null && | ||||
|                         isWebScriptsHome(servletReq.getServiceMatch().getWebScript()) && isWebScriptsHomeAuthenticatorActive()) | ||||
|                 { | ||||
|                     userId = getWebScriptsHomeUser(); | ||||
|                 } | ||||
|  | ||||
|                 if (userId == null) | ||||
|                 { | ||||
|                     if (isAlwaysAllowBasicAuthForAdminConsole()) | ||||
|                     { | ||||
|                         boolean shouldUseTimeout = shouldUseTimeoutForAdminAccessingAdminConsole(required, isGuest); | ||||
|                         final boolean useTimeoutForAdminAccessingAdminConsole = shouldUseTimeoutForAdminAccessingAdminConsole(required, isGuest); | ||||
|  | ||||
|                         if (shouldUseTimeout && isBasicAuthHeaderPresentForAdmin()) | ||||
|                         if (useTimeoutForAdminAccessingAdminConsole && isBasicAuthHeaderPresentForAdmin()) | ||||
|                         { | ||||
|                             return callBasicAuthForAdminConsoleOrWebScriptsHomeAccess(required, isGuest); | ||||
|                             return callBasicAuthForAdminConsoleAccess(required, isGuest); | ||||
|                         } | ||||
|                         try | ||||
|                         { | ||||
|                             userId = getRemoteUserWithTimeout(shouldUseTimeout); | ||||
|                         } | ||||
|                         catch (AuthenticationTimeoutException e) | ||||
|                         { | ||||
|                             // return basic auth challenge | ||||
|                             return false; | ||||
|                         } | ||||
|                     } | ||||
|                     else if (isAlwaysAllowBasicAuthForWebScriptsHome()) | ||||
|                     { | ||||
|                         boolean shouldUseTimeout = shouldUseTimeoutForAdminAccessingWebScriptsHome(required, isGuest); | ||||
|  | ||||
|                         if (shouldUseTimeout && isBasicAuthHeaderPresentForAdmin()) | ||||
|                         { | ||||
|                             return callBasicAuthForAdminConsoleOrWebScriptsHomeAccess(required, isGuest); | ||||
|                         } | ||||
|                         try | ||||
|                         { | ||||
|                             userId = getRemoteUserWithTimeout(shouldUseTimeout); | ||||
|                             userId = getRemoteUserWithTimeout(useTimeoutForAdminAccessingAdminConsole); | ||||
|                         } | ||||
|                         catch (AuthenticationTimeoutException e) | ||||
|                         { | ||||
| @@ -295,63 +252,38 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|                     authenticated = super.authenticate(required, isGuest); | ||||
|                 } | ||||
|             } | ||||
|             if (!authenticated && servletReq.getServiceMatch() != null) | ||||
|             if (!authenticated && servletReq.getServiceMatch() != null && | ||||
|                     isAdminConsoleWebScript(servletReq.getServiceMatch().getWebScript()) && isAdminConsoleAuthenticatorActive()) | ||||
|             { | ||||
|                 WebScript webScript = servletReq.getServiceMatch().getWebScript(); | ||||
|  | ||||
|                 if (isAdminConsole(webScript) && isAdminConsoleAuthenticatorActive()) | ||||
|                 { | ||||
|                     adminConsoleAuthenticator.requestAuthentication( | ||||
|                             this.servletReq.getHttpServletRequest(), | ||||
|                             this.servletRes.getHttpServletResponse()); | ||||
|                 } | ||||
|                 else if (isWebScriptsHome(webScript) | ||||
|                         && isWebScriptsHomeAuthenticatorActive()) | ||||
|                 { | ||||
|                     webScriptsHomeAuthenticator.requestAuthentication( | ||||
|                             this.servletReq.getHttpServletRequest(), | ||||
|                             this.servletRes.getHttpServletResponse()); | ||||
|                 } | ||||
|                 adminConsoleAuthenticator.requestAuthentication(this.servletReq.getHttpServletRequest(), this.servletRes.getHttpServletResponse()); | ||||
|             } | ||||
|             return authenticated; | ||||
|         } | ||||
|  | ||||
|         private boolean callBasicAuthForAdminConsoleOrWebScriptsHomeAccess(RequiredAuthentication required, boolean isGuest) | ||||
|         private boolean callBasicAuthForAdminConsoleAccess(RequiredAuthentication required, boolean isGuest) | ||||
|         { | ||||
|             // return REST call, after a timeout/basic auth challenge | ||||
|             if (LOGGER.isTraceEnabled()) | ||||
|             { | ||||
|                 LOGGER.trace("An Admin Console or WebScripts Home request has come in with Basic Auth headers present for an admin user."); | ||||
|                 LOGGER.trace("An Admin Console request has come in with Basic Auth headers present for an admin user."); | ||||
|             } | ||||
|             // In order to prompt for another password, in case it was not entered correctly, | ||||
|             // the output of this method should be returned by the calling "authenticate" method; | ||||
|             // This would also mean, that once the admin basic auth header is present, | ||||
|             // the authentication chain will not be used for access | ||||
|             // the authentication chain will not be used for the admin console access | ||||
|             return super.authenticate(required, isGuest); | ||||
|         } | ||||
|  | ||||
|         private boolean shouldUseTimeoutForAdminAccessingAdminConsole(RequiredAuthentication required, boolean isGuest) | ||||
|         { | ||||
|             boolean adminConsoleTimeout = RequiredAuthentication.admin.equals(required) && !isGuest && | ||||
|                     servletReq.getServiceMatch() != null && isAdminConsole(servletReq.getServiceMatch().getWebScript()); | ||||
|             boolean useTimeoutForAdminAccessingAdminConsole = RequiredAuthentication.admin.equals(required) && !isGuest && | ||||
|                     servletReq.getServiceMatch() != null && isAdminConsoleWebScript(servletReq.getServiceMatch().getWebScript()); | ||||
|  | ||||
|             if (LOGGER.isTraceEnabled()) | ||||
|             { | ||||
|                 LOGGER.trace("Should ensure that the admins can login with basic auth: " + adminConsoleTimeout); | ||||
|                 LOGGER.trace("Should ensure that the admins can login with basic auth: " + useTimeoutForAdminAccessingAdminConsole); | ||||
|             } | ||||
|             return adminConsoleTimeout; | ||||
|         } | ||||
|  | ||||
|         private boolean shouldUseTimeoutForAdminAccessingWebScriptsHome(RequiredAuthentication required, boolean isGuest) | ||||
|         { | ||||
|             boolean adminWebScriptsHomeTimeout = RequiredAuthentication.admin.equals(required) && !isGuest && | ||||
|                     servletReq.getServiceMatch() != null && isWebScriptsHome(servletReq.getServiceMatch().getWebScript()); | ||||
|  | ||||
|             if (LOGGER.isTraceEnabled()) | ||||
|             { | ||||
|                 LOGGER.trace("Should ensure that the admins can login with basic auth: " + adminWebScriptsHomeTimeout); | ||||
|             } | ||||
|             return adminWebScriptsHomeTimeout; | ||||
|             return useTimeoutForAdminAccessingAdminConsole; | ||||
|         } | ||||
|  | ||||
|         private boolean isRemoteUserMapperActive() | ||||
| @@ -364,12 +296,7 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|             return adminConsoleAuthenticator != null && (!(adminConsoleAuthenticator instanceof ActivateableBean) || ((ActivateableBean) adminConsoleAuthenticator).isActive()); | ||||
|         } | ||||
|  | ||||
|         private boolean isWebScriptsHomeAuthenticatorActive() | ||||
|         { | ||||
|             return webScriptsHomeAuthenticator != null && (!(webScriptsHomeAuthenticator instanceof ActivateableBean) || ((ActivateableBean) webScriptsHomeAuthenticator).isActive()); | ||||
|         } | ||||
|  | ||||
|         protected boolean isAdminConsole(WebScript webScript) | ||||
|         protected boolean isAdminConsoleWebScript(WebScript webScript) | ||||
|         { | ||||
|             if (webScript == null || adminConsoleScriptFamilies == null || webScript.getDescription() == null | ||||
|                     || webScript.getDescription().getFamilys() == null) | ||||
| @@ -383,7 +310,7 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|             } | ||||
|  | ||||
|             // intersect the "family" sets defined | ||||
|             Set<String> families = new HashSet<>(webScript.getDescription().getFamilys()); | ||||
|             Set<String> families = new HashSet<String>(webScript.getDescription().getFamilys()); | ||||
|             families.retainAll(adminConsoleScriptFamilies); | ||||
|             final boolean isAdminConsole = !families.isEmpty(); | ||||
|  | ||||
| @@ -395,23 +322,6 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|             return isAdminConsole; | ||||
|         } | ||||
|  | ||||
|         protected boolean isWebScriptsHome(WebScript webScript) | ||||
|         { | ||||
|             if (webScript == null || webScript.toString() == null) | ||||
|             { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             boolean isWebScriptsHome = webScript.toString().startsWith(WEB_SCRIPTS_BASE_PATH); | ||||
|  | ||||
|             if (LOGGER.isTraceEnabled() && isWebScriptsHome) | ||||
|             { | ||||
|                 LOGGER.trace("Detected a WebScripts Home webscript: " + webScript); | ||||
|             } | ||||
|  | ||||
|             return isWebScriptsHome; | ||||
|         } | ||||
|  | ||||
|         protected String getRemoteUserWithTimeout(boolean useTimeout) throws AuthenticationTimeoutException | ||||
|         { | ||||
|             if (!useTimeout) | ||||
| @@ -507,21 +417,7 @@ public class RemoteUserAuthenticatorFactory extends BasicHttpAuthenticatorFactor | ||||
|  | ||||
|             if (isRemoteUserMapperActive()) | ||||
|             { | ||||
|                 userId = adminConsoleAuthenticator.getUserId(this.servletReq.getHttpServletRequest(), this.servletRes.getHttpServletResponse()); | ||||
|             } | ||||
|  | ||||
|             logRemoteUserID(userId); | ||||
|  | ||||
|             return userId; | ||||
|         } | ||||
|  | ||||
|         protected String getWebScriptsHomeUser() | ||||
|         { | ||||
|             String userId = null; | ||||
|  | ||||
|             if (isRemoteUserMapperActive()) | ||||
|             { | ||||
|                 userId = webScriptsHomeAuthenticator.getUserId(this.servletReq.getHttpServletRequest(), this.servletRes.getHttpServletResponse()); | ||||
|                 userId = adminConsoleAuthenticator.getAdminConsoleUser(this.servletReq.getHttpServletRequest(), this.servletRes.getHttpServletResponse()); | ||||
|             } | ||||
|  | ||||
|             logRemoteUserID(userId); | ||||
|   | ||||
| @@ -30,7 +30,7 @@ import jakarta.servlet.http.HttpServletRequest; | ||||
|  | ||||
| import org.apache.commons.fileupload2.core.FileItemInput; | ||||
| import org.apache.commons.fileupload2.core.FileItemInputIterator; | ||||
| import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload; | ||||
| import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.commons.logging.LogFactory; | ||||
| import org.springframework.extensions.webscripts.Status; | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import jakarta.servlet.http.HttpServletRequest; | ||||
|  | ||||
| import org.apache.commons.fileupload2.core.FileItemInput; | ||||
| import org.apache.commons.fileupload2.core.FileItemInputIterator; | ||||
| import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload; | ||||
| import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.commons.logging.LogFactory; | ||||
| import org.springframework.extensions.webscripts.Status; | ||||
|   | ||||
| @@ -2,23 +2,23 @@ | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2016 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
|  * the paid license agreement will prevail.  Otherwise, the software is | ||||
|  * This file is part of the Alfresco software.  | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of  | ||||
|  * the paid license agreement will prevail.  Otherwise, the software is  | ||||
|  * provided under the following open source license terms: | ||||
|  * | ||||
|  *  | ||||
|  * Alfresco is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU Lesser General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  *  | ||||
|  * Alfresco is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU Lesser General Public License for more details. | ||||
|  * | ||||
|  *  | ||||
|  * You should have received a copy of the GNU Lesser General Public License | ||||
|  * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. | ||||
|  * #L% | ||||
| @@ -38,19 +38,14 @@ import java.util.Collections; | ||||
| import java.util.Comparator; | ||||
| import java.util.HashMap; | ||||
| import java.util.Iterator; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.commons.logging.LogFactory; | ||||
| import org.springframework.beans.factory.InitializingBean; | ||||
| import org.springframework.extensions.surf.util.I18NUtil; | ||||
|  | ||||
| import org.alfresco.model.ContentModel; | ||||
| import org.alfresco.query.PagingRequest; | ||||
| import org.alfresco.repo.security.permissions.AccessDeniedException; | ||||
| import org.alfresco.repo.site.SiteModel; | ||||
| import org.alfresco.rest.api.Nodes; | ||||
| import org.alfresco.rest.api.People; | ||||
| @@ -94,7 +89,6 @@ import org.alfresco.util.SearchLanguageConversion; | ||||
|  */ | ||||
| public class QueriesImpl implements Queries, InitializingBean | ||||
| { | ||||
|     private static final Log LOGGER = LogFactory.getLog(QueriesImpl.class); | ||||
|     private final static Map<String, QName> NODE_SORT_PARAMS_TO_QNAMES = sortParamsToQNames( | ||||
|             PARAM_NAME, ContentModel.PROP_NAME, | ||||
|             PARAM_CREATEDAT, ContentModel.PROP_CREATED, | ||||
| @@ -253,7 +247,7 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|                             { | ||||
|                                 // first request for this namespace prefix, get and cache result | ||||
|                                 Collection<String> prefixes = namespaceService.getPrefixes(qname.getNamespaceURI()); | ||||
|                                 prefix = !prefixes.isEmpty() ? prefixes.iterator().next() : ""; | ||||
|                                 prefix = prefixes.size() != 0 ? prefixes.iterator().next() : ""; | ||||
|                                 cache.put(qname.getNamespaceURI(), prefix); | ||||
|                             } | ||||
|                             buf.append('/').append(prefix).append(':').append(ISO9075.encode(qname.getLocalName())); | ||||
| @@ -267,6 +261,12 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|                 return buf.toString(); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected List<Node> newList(int capacity) | ||||
|             { | ||||
|                 return new ArrayList<Node>(capacity); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected Node convert(NodeRef nodeRef, List<String> includeParam) | ||||
|             { | ||||
| @@ -303,11 +303,18 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|                 query.append("*\")"); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected List<Person> newList(int capacity) | ||||
|             { | ||||
|                 return new ArrayList<Person>(capacity); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected Person convert(NodeRef nodeRef, List<String> includeParam) | ||||
|             { | ||||
|                 String personId = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_USERNAME); | ||||
|                 return people.getPerson(personId); | ||||
|                 Person person = people.getPerson(personId); | ||||
|                 return person; | ||||
|             } | ||||
|  | ||||
|             // TODO Do the sort in the query on day. A comment in the code for the V0 API used for live people | ||||
| @@ -334,18 +341,28 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|                 query.append("*\")"); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected List<Site> newList(int capacity) | ||||
|             { | ||||
|                 return new ArrayList<>(capacity); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             protected Site convert(NodeRef nodeRef, List<String> includeParam) | ||||
|             { | ||||
|                 return getSite(siteService.getSite(nodeRef)); | ||||
|                 return getSite(siteService.getSite(nodeRef), true); | ||||
|             } | ||||
|  | ||||
|             // note: see also Sites.getSite | ||||
|             private Site getSite(SiteInfo siteInfo) | ||||
|             private Site getSite(SiteInfo siteInfo, boolean includeRole) | ||||
|             { | ||||
|                 // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) | ||||
|                 String siteId = siteInfo.getShortName(); | ||||
|                 String role = sites.getSiteRole(siteId); | ||||
|                 String role = null; | ||||
|                 if (includeRole) | ||||
|                 { | ||||
|                     role = sites.getSiteRole(siteId); | ||||
|                 } | ||||
|                 return new Site(siteInfo, role); | ||||
|             } | ||||
|         }.find(parameters, PARAM_TERM, MIN_TERM_LENGTH_SITES, "_SITE", POST_QUERY_SORT, SITE_SORT_PARAMS_TO_QNAMES, new SortColumn(PARAM_SITE_TITLE, true)); | ||||
| @@ -395,38 +412,34 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|             } | ||||
|  | ||||
|             ResultSet queryResults = null; | ||||
|             List<T> collection = null; | ||||
|             try | ||||
|             { | ||||
|                 queryResults = searchService.query(sp); | ||||
|  | ||||
|                 List<NodeRef> nodeRefs = queryResults.getNodeRefs(); | ||||
|                 Map<NodeRef, T> collection = new LinkedHashMap<>(nodeRefs.size()); | ||||
|  | ||||
|                 if (sort == POST_QUERY_SORT) | ||||
|                 { | ||||
|                     nodeRefs = postQuerySort(parameters, sortParamsToQNames, defaultSortCols, nodeRefs); | ||||
|                 } | ||||
|  | ||||
|                 collection = newList(nodeRefs.size()); | ||||
|                 List<String> includeParam = parameters.getInclude(); | ||||
|  | ||||
|                 for (NodeRef nodeRef : nodeRefs) | ||||
|                 { | ||||
|                     try | ||||
|                     { | ||||
|                         T t = convert(nodeRef, includeParam); | ||||
|                         collection.put(nodeRef, t); | ||||
|                     } | ||||
|                     catch (AccessDeniedException ade) | ||||
|                     { | ||||
|                         LOGGER.debug("Ignoring search result for nodeRef " + nodeRef + " due to access denied exception", ade); | ||||
|                     } | ||||
|                     T t = convert(nodeRef, includeParam); | ||||
|                     collection.add(t); | ||||
|                 } | ||||
|  | ||||
|                 if (sort == POST_QUERY_SORT) | ||||
|                 { | ||||
|                     List<T> postQuerySortedCollection = postQuerySort(parameters, sortParamsToQNames, defaultSortCols, collection.keySet()) | ||||
|                             .stream() | ||||
|                             .map(collection::get) | ||||
|                             .toList(); | ||||
|                     return listPage(postQuerySortedCollection, paging); | ||||
|                     return listPage(collection, paging); | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     return CollectionWithPagingInfo.asPaged(paging, collection.values(), queryResults.hasMore(), Long.valueOf(queryResults.getNumberFound()).intValue()); | ||||
|                     return CollectionWithPagingInfo.asPaged(paging, collection, queryResults.hasMore(), Long.valueOf(queryResults.getNumberFound()).intValue()); | ||||
|                 } | ||||
|             } | ||||
|             finally | ||||
| @@ -451,6 +464,15 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|          */ | ||||
|         protected abstract void buildQuery(StringBuilder query, String term, SearchParameters sp, String queryTemplateName); | ||||
|  | ||||
|         /** | ||||
|          * Returns a list of the correct type. | ||||
|          *  | ||||
|          * @param capacity | ||||
|          *            of the list | ||||
|          * @return a new list. | ||||
|          */ | ||||
|         protected abstract List<T> newList(int capacity); | ||||
|  | ||||
|         /** | ||||
|          * Converts a nodeRef into the an object of the required type. | ||||
|          *  | ||||
| @@ -529,7 +551,7 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|         private List<SortColumn> getSorting(Parameters parameters, List<SortColumn> defaultSortCols) | ||||
|         { | ||||
|             List<SortColumn> sortCols = parameters.getSorting(); | ||||
|             if (sortCols == null || sortCols.isEmpty()) | ||||
|             if (sortCols == null || sortCols.size() == 0) | ||||
|             { | ||||
|                 sortCols = defaultSortCols == null ? Collections.emptyList() : defaultSortCols; | ||||
|             } | ||||
| @@ -537,66 +559,62 @@ public class QueriesImpl implements Queries, InitializingBean | ||||
|         } | ||||
|  | ||||
|         protected List<NodeRef> postQuerySort(Parameters parameters, Map<String, QName> sortParamsToQNames, | ||||
|                 List<SortColumn> defaultSortCols, Set<NodeRef> unsortedNodeRefs) | ||||
|                 List<SortColumn> defaultSortCols, List<NodeRef> nodeRefs) | ||||
|         { | ||||
|             final List<SortColumn> sortCols = getSorting(parameters, defaultSortCols); | ||||
|             int sortColCount = sortCols.size(); | ||||
|  | ||||
|             if (sortColCount == 0) | ||||
|             if (sortColCount > 0) | ||||
|             { | ||||
|                 return new ArrayList<>(unsortedNodeRefs); | ||||
|             } | ||||
|                 // make copy of nodeRefs because it can be unmodifiable list. | ||||
|                 nodeRefs = new ArrayList<NodeRef>(nodeRefs); | ||||
|  | ||||
|             // make copy of nodeRefs because it can be unmodifiable list. | ||||
|             List<NodeRef> sortedNodeRefs = new ArrayList<>(unsortedNodeRefs); | ||||
|  | ||||
|             List<QName> sortPropQNames = new ArrayList<>(sortColCount); | ||||
|             for (SortColumn sortCol : sortCols) | ||||
|             { | ||||
|                 QName sortPropQName = sortParamsToQNames.get(sortCol.column); | ||||
|                 if (sortPropQName == null) | ||||
|                 List<QName> sortPropQNames = new ArrayList<>(sortColCount); | ||||
|                 for (SortColumn sortCol : sortCols) | ||||
|                 { | ||||
|                     throw new InvalidArgumentException("Invalid sort field: " + sortCol.column); | ||||
|                 } | ||||
|                 sortPropQNames.add(sortPropQName); | ||||
|             } | ||||
|  | ||||
|             final Collator col = AlfrescoCollator.getInstance(I18NUtil.getLocale()); | ||||
|             Collections.sort(sortedNodeRefs, new Comparator<NodeRef>() { | ||||
|                 @Override | ||||
|                 public int compare(NodeRef n1, NodeRef n2) | ||||
|                 { | ||||
|                     int result = 0; | ||||
|                     for (int i = 0; i < sortCols.size(); i++) | ||||
|                     QName sortPropQName = sortParamsToQNames.get(sortCol.column); | ||||
|                     if (sortPropQName == null) | ||||
|                     { | ||||
|                         SortColumn sortCol = sortCols.get(i); | ||||
|                         QName sortPropQName = sortPropQNames.get(i); | ||||
|  | ||||
|                         Serializable p1 = getProperty(n1, sortPropQName); | ||||
|                         Serializable p2 = getProperty(n2, sortPropQName); | ||||
|  | ||||
|                         result = ((p1 instanceof Long) && (p2 instanceof Long) | ||||
|                                 ? Long.compare((Long) p1, (Long) p2) | ||||
|                                 : col.compare(p1.toString(), p2.toString())) | ||||
|                                 * (sortCol.asc ? 1 : -1); | ||||
|  | ||||
|                         if (result != 0) | ||||
|                         { | ||||
|                             break; | ||||
|                         } | ||||
|                         throw new InvalidArgumentException("Invalid sort field: " + sortCol.column); | ||||
|                     } | ||||
|                     return result; | ||||
|                     sortPropQNames.add(sortPropQName); | ||||
|                 } | ||||
|  | ||||
|                 private Serializable getProperty(NodeRef nodeRef, QName sortPropQName) | ||||
|                 { | ||||
|                     Serializable result = nodeService.getProperty(nodeRef, sortPropQName); | ||||
|                     return result == null ? "" : result; | ||||
|                 } | ||||
|                 final Collator col = AlfrescoCollator.getInstance(I18NUtil.getLocale()); | ||||
|                 Collections.sort(nodeRefs, new Comparator<NodeRef>() { | ||||
|                     @Override | ||||
|                     public int compare(NodeRef n1, NodeRef n2) | ||||
|                     { | ||||
|                         int result = 0; | ||||
|                         for (int i = 0; i < sortCols.size(); i++) | ||||
|                         { | ||||
|                             SortColumn sortCol = sortCols.get(i); | ||||
|                             QName sortPropQName = sortPropQNames.get(i); | ||||
|  | ||||
|             }); | ||||
|                             Serializable p1 = getProperty(n1, sortPropQName); | ||||
|                             Serializable p2 = getProperty(n2, sortPropQName); | ||||
|  | ||||
|             return sortedNodeRefs; | ||||
|                             result = ((p1 instanceof Long) && (p2 instanceof Long) | ||||
|                                     ? Long.compare((Long) p1, (Long) p2) | ||||
|                                     : col.compare(p1.toString(), p2.toString())) | ||||
|                                     * (sortCol.asc ? 1 : -1); | ||||
|  | ||||
|                             if (result != 0) | ||||
|                             { | ||||
|                                 break; | ||||
|                             } | ||||
|                         } | ||||
|                         return result; | ||||
|                     } | ||||
|  | ||||
|                     private Serializable getProperty(NodeRef nodeRef, QName sortPropQName) | ||||
|                     { | ||||
|                         Serializable result = nodeService.getProperty(nodeRef, sortPropQName); | ||||
|                         return result == null ? "" : result; | ||||
|                     } | ||||
|  | ||||
|                 }); | ||||
|             } | ||||
|             return nodeRefs; | ||||
|         } | ||||
|  | ||||
|         // note: see also AbstractNodeRelation | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -75,7 +75,6 @@ public class ActionNodeParameterValidator implements ActionValidator | ||||
|     static final String NO_PROPER_PERMISSIONS_FOR_NODE = "No proper permissions for node: "; | ||||
|     static final String NOT_A_CATEGORY = "Node is not a category "; | ||||
|     static final String NOT_A_FOLDER = "Node is not a folder "; | ||||
|     static final String NO_LONGER_EXISTS = "%s having Id: %s no longer exists. Please update your rule definition."; | ||||
|  | ||||
|     private final Actions actions; | ||||
|     private final NamespaceService namespaceService; | ||||
| @@ -133,15 +132,7 @@ public class ActionNodeParameterValidator implements ActionValidator | ||||
|                     .filter(pd -> action.getParams().containsKey(pd.getName())) | ||||
|                     .forEach(p -> { | ||||
|                         final String nodeId = Objects.toString(action.getParams().get(p.getName()), Strings.EMPTY); | ||||
|                         NodeRef nodeRef; | ||||
|                         try | ||||
|                         { | ||||
|                             nodeRef = nodes.validateNode(nodeId); | ||||
|                         } | ||||
|                         catch (EntityNotFoundException e) | ||||
|                         { | ||||
|                             throw new EntityNotFoundException(String.format(NO_LONGER_EXISTS, p.getDisplayLabel(), nodeId), e); | ||||
|                         } | ||||
|                         final NodeRef nodeRef = nodes.validateNode(nodeId); | ||||
|                         validatePermission(action.getActionDefinitionId(), p.getName(), nodeRef); | ||||
|                         validateType(action.getActionDefinitionId(), nodeRef); | ||||
|                     }); | ||||
| @@ -178,5 +169,4 @@ public class ActionNodeParameterValidator implements ActionValidator | ||||
|             throw new InvalidArgumentException(NOT_A_CATEGORY + nodeRef.getId()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -27,6 +27,7 @@ package org.alfresco.rest.framework.resource.parameters; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.apache.poi.ss.formula.functions.T; | ||||
| import org.springframework.extensions.webscripts.WebScriptRequest; | ||||
|  | ||||
| import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; | ||||
| @@ -68,7 +69,7 @@ public interface Parameters | ||||
|      * @return The Parameter value | ||||
|      * @throws InvalidArgumentException | ||||
|      */ | ||||
|     <T> T getParameter(String parameterName, Class<T> clazz) throws InvalidArgumentException; | ||||
|     T getParameter(String parameterName, Class<T> clazz) throws InvalidArgumentException; | ||||
|  | ||||
|     /** | ||||
|      * Returns a representation of the Paging of collections of resources, with skip count and max items. See {@link Paging} Specified by the "skipCount" and "maxItems" request parameters. | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import org.apache.commons.beanutils.ConvertUtils; | ||||
| import org.apache.poi.ss.formula.functions.T; | ||||
| import org.springframework.extensions.webscripts.WebScriptRequest; | ||||
|  | ||||
| import org.alfresco.repo.content.MimetypeMap; | ||||
| @@ -230,7 +231,7 @@ public class Params implements Parameters | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public <T> T getParameter(String parameterName, Class<T> clazz) throws InvalidArgumentException | ||||
|     public T getParameter(String parameterName, Class<T> clazz) throws InvalidArgumentException | ||||
|     { | ||||
|         String param = getParameter(parameterName); | ||||
|         if (param == null) | ||||
| @@ -238,7 +239,7 @@ public class Params implements Parameters | ||||
|         Object obj = ConvertUtils.convert(param, clazz); | ||||
|         if (obj != null && obj.getClass().equals(clazz)) | ||||
|         { | ||||
|             return clazz.cast(obj); | ||||
|             return (T) obj; | ||||
|         } | ||||
|         throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[]{parameterName}); | ||||
|     } | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Admin Console | ||||
| admin-console.help=Help | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Successfully saved values. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Konzole pro spr\u00e1vce | ||||
| admin-console.help=N\u00e1pov\u011bda | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Hodnoty byly \u00fasp\u011b\u0161n\u011b ulo\u017eeny. | ||||
|  | ||||
| admin-console.host=Hostitel | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Administrationskonsol | ||||
| admin-console.help=Hj\u00e6lp | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=V\u00e6rdierne blev gemt. | ||||
|  | ||||
| admin-console.host=V\u00e6rt | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Administratorkonsole | ||||
| admin-console.help=Hilfe | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Erfolgreich gespeicherte Werte. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Consola de administraci\u00f3n | ||||
| admin-console.help=Ayuda | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Valores guardados correctamente. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Hallintakonsoli | ||||
| admin-console.help=Ohje | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Arvot tallennettiin. | ||||
|  | ||||
| admin-console.host=Is\u00e4nt\u00e4 | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Console d'administration | ||||
| admin-console.help=Aide | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Les valeurs ont bien \u00e9t\u00e9 enregistr\u00e9es. | ||||
|  | ||||
| admin-console.host=H\u00f4te | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Console di amministrazione | ||||
| admin-console.help=Aiuto | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=I valori sono stati salvati. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb | ||||
| admin-console.help=\u30d8\u30eb\u30d7 | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=\u5024\u3092\u6b63\u5e38\u306b\u4fdd\u5b58\u3057\u307e\u3057\u305f\u3002 | ||||
|  | ||||
| admin-console.host=\u30db\u30b9\u30c8 | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Admin-konsoll | ||||
| admin-console.help=Hjelp | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Verdier som ble lagret. | ||||
|  | ||||
| admin-console.host=Vert | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Beheerconsole | ||||
| admin-console.help=Help | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Waarden zijn opgeslagen. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Konsola administracyjna | ||||
| admin-console.help=Pomoc | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Warto\u015bci zosta\u0142y zapisane pomy\u015blnie. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Console de administra\u00e7\u00e3o | ||||
| admin-console.help=Ajuda | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=Valores salvos com sucesso. | ||||
|  | ||||
| admin-console.host=Host | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 | ||||
| admin-console.help=\u0421\u043f\u0440\u0430\u0432\u043a\u0430 | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. | ||||
|  | ||||
| admin-console.host=\u0425\u043e\u0441\u0442 | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=Admin-konsol | ||||
| admin-console.help=Hj\u00e4lp | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=V\u00e4rden sparades. | ||||
|  | ||||
| admin-console.host=V\u00e4rd | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| # I18N messages for the Repository Admin Console | ||||
| admin-console.header=\u7ba1\u7406\u63a7\u5236\u53f0 | ||||
| admin-console.help=\u5e2e\u52a9 | ||||
| admin-console.help-link-topic=qvs1720602310678 | ||||
| admin-console.help-link=https://support.hyland.com/p/alfresco | ||||
| admin-console.success=\u5df2\u6210\u529f\u4fdd\u5b58\u7684\u503c\u3002 | ||||
|  | ||||
| admin-console.host=\u4e3b\u673a | ||||
|   | ||||
| @@ -5,4 +5,4 @@ | ||||
|    <authentication>guest</authentication> | ||||
|    <transaction allow="readonly">required</transaction> | ||||
|    <lifecycle>internal</lifecycle> | ||||
| </webscript> | ||||
| </webscript> | ||||
| @@ -554,7 +554,7 @@ Admin.addEventListener(window, 'load', function() { | ||||
|  | ||||
|       <div class="header"> | ||||
|          <span><a href="${url.serviceContext}${DEFAULT_CONTROLLER!"/admin"}">${msg("admin-console.header")}</a></span><#if metadata??><span class="meta">${HOSTNAME}</span><span class="meta">${HOSTADDR}</span></#if> | ||||
|          <div style="float:right"><a href="${documentationUrl(msg("admin-console.help-link-topic"),"&component=Alfresco%20Content%20Services")}" target="_blank">${msg("admin-console.help")}</a></div> | ||||
|          <div style="float:right"><a href="${msg("admin-console.help-link", docsEdition)}" target="_blank">${msg("admin-console.help")}</a></div> | ||||
|       </div> | ||||
|        | ||||
|       <div class="navigation-wrapper"> | ||||
|   | ||||
| @@ -40,6 +40,7 @@ | ||||
| 		"items": | ||||
| 		[ | ||||
| 		<#list results as row> | ||||
| 			<#if row.item.hasPermission("Read")> | ||||
| 			{ | ||||
| 				"type": "${row.item.typeShort}", | ||||
| 				"parentType": "${row.item.parentTypeShort!""}", | ||||
| @@ -75,6 +76,7 @@ | ||||
| 				"nodeRef": "${row.item.nodeRef}"<#if row.selectable?exists>, | ||||
| 				"selectable" : ${row.selectable?string}</#if> | ||||
| 			}<#if row_has_next>,</#if> | ||||
| 			</#if> | ||||
| 		</#list> | ||||
| 		] | ||||
| 	} | ||||
|   | ||||
| @@ -214,13 +214,9 @@ | ||||
|       <property name="authenticationListener" ref="webScriptAuthenticationListener"/> | ||||
|       <property name="remoteUserMapper" ref="RemoteUserMapper" /> | ||||
|       <property name="adminConsoleAuthenticator" ref="AdminConsoleAuthenticator" /> | ||||
|        <property name="webScriptsHomeAuthenticator" ref="WebScriptsHomeAuthenticator" /> | ||||
|       <property name="alwaysAllowBasicAuthForAdminConsole"> | ||||
|          <value>${authentication.alwaysAllowBasicAuthForAdminConsole.enabled}</value> | ||||
|       </property> | ||||
|        <property name="alwaysAllowBasicAuthForWebScriptsHome"> | ||||
|            <value>${authentication.alwaysAllowBasicAuthForWebScriptsHome.enabled}</value> | ||||
|        </property> | ||||
|       <property name="getRemoteUserTimeoutMilliseconds"> | ||||
|          <value>${authentication.getRemoteUserTimeoutMilliseconds}</value> | ||||
|       </property> | ||||
|   | ||||
| @@ -29,7 +29,6 @@ import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| import static org.junit.Assert.fail; | ||||
| import static org.mockito.Mockito.lenient; | ||||
| import static org.mockito.Mockito.never; | ||||
| import static org.mockito.Mockito.verify; | ||||
| import static org.mockito.Mockito.when; | ||||
| @@ -204,8 +203,8 @@ public class MoveMethodTest | ||||
|     @Test | ||||
|     public void canRenameFoldersWhenNewNameMatchesShufflePattern() throws Exception | ||||
|     { | ||||
|         lenient().when(davHelper.isRenameShuffle(destPath)).thenReturn(true); | ||||
|         lenient().when(davHelper.isRenameShuffle(sourcePath)).thenReturn(false); | ||||
|         when(davHelper.isRenameShuffle(destPath)).thenReturn(true); | ||||
|         when(davHelper.isRenameShuffle(sourcePath)).thenReturn(false); | ||||
|  | ||||
|         // Test: Perform the rename | ||||
|         moveMethod.moveOrCopy(sourceNodeRef, sourceParentNodeRef, destParentNodeRef, "dest.doc"); | ||||
| @@ -248,8 +247,8 @@ public class MoveMethodTest | ||||
|         sourcePath = "/path/from/test.doc"; | ||||
|         moveMethod.m_strPath = sourcePath; | ||||
|  | ||||
|         lenient().when(davHelper.getServiceRegistry()).thenReturn(mockServiceRegistry); | ||||
|         lenient().when(mockServiceRegistry.getContentService()).thenReturn(mockContentService); | ||||
|         when(davHelper.getServiceRegistry()).thenReturn(mockServiceRegistry); | ||||
|         when(mockServiceRegistry.getContentService()).thenReturn(mockContentService); | ||||
|  | ||||
|         List<String> sourcePathSplit = Arrays.asList("path", "from", "test.doc"); | ||||
|         when(davHelper.splitAllPaths(sourcePath)).thenReturn(sourcePathSplit); | ||||
| @@ -367,7 +366,7 @@ public class MoveMethodTest | ||||
|  | ||||
|                     when(mockFileFolderService.resolveNamePath(rootNode, sourcePathSplit)).thenReturn(tmpFI); | ||||
|                     when(davHelper.isRenameShuffle(destPath)).thenReturn(false); | ||||
|                     lenient().when(davHelper.isRenameShuffle(sourcePath)).thenReturn(true); | ||||
|                     when(davHelper.isRenameShuffle(sourcePath)).thenReturn(true); | ||||
|  | ||||
|                     moveMethod.moveOrCopy(atmpFI.getNodeRef(), companyHomeNodeRef, companyHomeNodeRef, bakFileName); | ||||
|  | ||||
|   | ||||
| @@ -25,8 +25,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.api.tests; | ||||
|  | ||||
| import java.util.Arrays; | ||||
|  | ||||
| import org.alfresco.repo.web.util.JettyComponent; | ||||
|  | ||||
| public class EnterprisePublicApiTestFixture extends EnterpriseTestFixture | ||||
| @@ -42,53 +40,32 @@ public class EnterprisePublicApiTestFixture extends EnterpriseTestFixture | ||||
|     public final static String[] CLASS_LOCATIONS = new String[]{"classpath*:/publicapi/lucene/"}; | ||||
|  | ||||
|     private static EnterprisePublicApiTestFixture instance; | ||||
|     private String[] customConfigLocations; | ||||
|  | ||||
|     /* Note: synchronized for multi-threaded test access */ | ||||
|     public synchronized static EnterprisePublicApiTestFixture getInstance(boolean createTestData, String... customConfigLocations) | ||||
|     public synchronized static EnterprisePublicApiTestFixture getInstance(boolean createTestData) throws Exception | ||||
|     { | ||||
|         if (instance == null) | ||||
|         { | ||||
|             instance = new EnterprisePublicApiTestFixture(customConfigLocations); | ||||
|             try | ||||
|             { | ||||
|                 instance.setup(createTestData); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 String errorMessage = "Exception was thrown during setup EnterprisePublicApiTestFixture: " + e.getClass() + " - " + e.getMessage(); | ||||
|                 throw new RuntimeException(errorMessage, e); | ||||
|             } | ||||
|             instance = new EnterprisePublicApiTestFixture(); | ||||
|             instance.setup(createTestData); | ||||
|         } | ||||
|         return instance; | ||||
|     } | ||||
|  | ||||
|     public static EnterprisePublicApiTestFixture getInstance(String... customConfigLocations) | ||||
|     public static EnterprisePublicApiTestFixture getInstance() throws Exception | ||||
|     { | ||||
|         return getInstance(true, customConfigLocations); | ||||
|         return getInstance(true); | ||||
|     } | ||||
|  | ||||
|     public static EnterprisePublicApiTestFixture getInstance() | ||||
|     { | ||||
|         return getInstance(true, null); | ||||
|     } | ||||
|  | ||||
|     public static EnterprisePublicApiTestFixture getInstance(boolean createTestData) | ||||
|     { | ||||
|         return getInstance(createTestData, null); | ||||
|     } | ||||
|  | ||||
|     private EnterprisePublicApiTestFixture(String... customConfigLocations) | ||||
|     private EnterprisePublicApiTestFixture() | ||||
|     { | ||||
|         super(CONFIG_LOCATIONS, CLASS_LOCATIONS, PORT, CONTEXT_PATH, PUBLIC_API_SERVLET_NAME, DEFAULT_NUM_MEMBERS_PER_SITE, false); | ||||
|         this.customConfigLocations = customConfigLocations; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected JettyComponent makeJettyComponent() | ||||
|     { | ||||
|         String[] configLocations = mergeLocations(getConfigLocations(), this.customConfigLocations); | ||||
|         JettyComponent jettyComponent = new EnterpriseJettyComponent(getPort(), getContextPath(), configLocations, getClassLocations()); | ||||
|         JettyComponent jettyComponent = new EnterpriseJettyComponent(getPort(), getContextPath(), getConfigLocations(), getClassLocations()); | ||||
|         return jettyComponent; | ||||
|     } | ||||
|  | ||||
| @@ -97,19 +74,4 @@ public class EnterprisePublicApiTestFixture extends EnterpriseTestFixture | ||||
|     { | ||||
|         return new RepoService(applicationContext); | ||||
|     } | ||||
|  | ||||
|     private String[] mergeLocations(String[]... locations) | ||||
|     { | ||||
|         String[] mergedLocations = new String[0]; | ||||
|         for (String[] location : locations) | ||||
|         { | ||||
|             if (location == null || location.length == 0) | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             mergedLocations = Arrays.copyOf(mergedLocations, mergedLocations.length + location.length); | ||||
|             System.arraycopy(location, 0, mergedLocations, mergedLocations.length - location.length, location.length); | ||||
|         } | ||||
|         return mergedLocations; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -36,21 +36,15 @@ public class EnterpriseTestApi extends AbstractTestApi | ||||
|         getTestFixture().getRandomNetwork(); | ||||
|     } | ||||
|  | ||||
|     protected String[] getCustomConfigLocations() | ||||
|     { | ||||
|         return new String[]{}; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected TestFixture getTestFixture() throws Exception | ||||
|     { | ||||
|         return EnterprisePublicApiTestFixture.getInstance(getCustomConfigLocations()); | ||||
|         return EnterprisePublicApiTestFixture.getInstance(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected TestFixture getTestFixture(boolean createTestData) throws Exception | ||||
|     { | ||||
|         return EnterprisePublicApiTestFixture.getInstance(createTestData, getCustomConfigLocations()); | ||||
|         return EnterprisePublicApiTestFixture.getInstance(createTestData); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -130,7 +130,6 @@ public class QueriesSitesApiTest extends AbstractSingleNetworkSiteTest | ||||
|     public void testLiveSearchSites() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|         AuthenticationUtil.setFullyAuthenticatedUser(user1); | ||||
|  | ||||
|         int sCount = 5; | ||||
|         assertTrue(sCount > 4); // as relied on by test below | ||||
| @@ -232,11 +231,7 @@ public class QueriesSitesApiTest extends AbstractSingleNetworkSiteTest | ||||
|  | ||||
|     private NodeRef getNodeRef(String createdSiteId) | ||||
|     { | ||||
|         // Created sites do not return NodeRefs to the caller so we need to get the NodeRef from the siteService. | ||||
|         // Temporarily as admin we will get NodeRefs to handle ACL authorization. | ||||
|         String userUnderTest = AuthenticationUtil.getFullyAuthenticatedUser(); | ||||
|         AuthenticationUtil.setFullyAuthenticatedUser(DEFAULT_ADMIN); | ||||
|  | ||||
|         AuthenticationUtil.setFullyAuthenticatedUser(user1); | ||||
|         // The following call to siteService.getSite(createdSiteId).getNodeRef() returns a NodeRef like: | ||||
|         // workspace://SpacesStore/9db76769-96de-4de4-bdb4-a127130af362 | ||||
|         // We call tenantService.getName(nodeRef) to get a fully qualified NodeRef as Solr returns this. | ||||
| @@ -244,8 +239,6 @@ public class QueriesSitesApiTest extends AbstractSingleNetworkSiteTest | ||||
|         // workspace://@org.alfresco.rest.api.tests.queriespeopleapitest@SpacesStore/9db76769-96de-4de4-bdb4-a127130af362 | ||||
|         NodeRef nodeRef = siteService.getSite(createdSiteId).getNodeRef(); | ||||
|         nodeRef = tenantService.getName(nodeRef); | ||||
|  | ||||
|         AuthenticationUtil.setFullyAuthenticatedUser(userUnderTest); | ||||
|         return nodeRef; | ||||
|     } | ||||
|  | ||||
| @@ -253,7 +246,6 @@ public class QueriesSitesApiTest extends AbstractSingleNetworkSiteTest | ||||
|     public void testLiveSearchSites_SortPage() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|         AuthenticationUtil.setFullyAuthenticatedUser(user1); | ||||
|  | ||||
|         List<String> siteIds = new ArrayList<>(5); | ||||
|  | ||||
| @@ -314,51 +306,6 @@ public class QueriesSitesApiTest extends AbstractSingleNetworkSiteTest | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * If the search service do not support ACL filtering, then the Queries API should handle the response to exclude private sites and potential unauthorized error when building response. | ||||
|      */ | ||||
|     @Test | ||||
|     public void testLiveSearchExcludesPrivateSites() throws Exception | ||||
|     { | ||||
|         String publicSiteId = null; | ||||
|         String privateSiteId = null; | ||||
|         try | ||||
|         { | ||||
|             // given | ||||
|             setRequestContext(null, DEFAULT_ADMIN, DEFAULT_ADMIN_PWD); | ||||
|             createUser("bartender"); | ||||
|  | ||||
|             publicSiteId = createSite("samePrefixPublicSite", "samePrefixPublicSite", "Visible to all users", SiteVisibility.PUBLIC, 201).getId(); | ||||
|             privateSiteId = createSite("samePrefixPrivateSite", "samePrefixPrivateSite", "Hidden from bartender", SiteVisibility.PRIVATE, 201).getId(); | ||||
|  | ||||
|             String[] searchResults = {publicSiteId, privateSiteId}; | ||||
|             String[] expectedSites = {publicSiteId}; | ||||
|  | ||||
|             // when | ||||
|             setRequestContext(null, "bartender", "password"); | ||||
|             AuthenticationUtil.setFullyAuthenticatedUser("bartender"); | ||||
|  | ||||
|             // then | ||||
|             checkApiCall("samePrefix", null, getPaging(0, 100), 200, expectedSites, searchResults); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             // cleanup | ||||
|             AuthenticationUtil.setFullyAuthenticatedUser(DEFAULT_ADMIN); | ||||
|             setRequestContext(null, DEFAULT_ADMIN, DEFAULT_ADMIN_PWD); | ||||
|             if (publicSiteId != null) | ||||
|             { | ||||
|                 deleteSite(publicSiteId, true, 204); | ||||
|             } | ||||
|             if (privateSiteId != null) | ||||
|             { | ||||
|                 deleteSite(privateSiteId, true, 204); | ||||
|             } | ||||
|             deleteUser("bartender", null); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getScope() | ||||
|     { | ||||
|   | ||||
| @@ -0,0 +1 @@ | ||||
| com.epam.reportportal.testng.ReportPortalTestNGListener | ||||
										
											Binary file not shown.
										
									
								
							| @@ -27,7 +27,7 @@ to integrate with a number of external Authentication providers including | ||||
|   * https://github.com/Alfresco/alfresco-data-model/tree/master/src/main/java/org/alfresco/repo/security/authentication | ||||
| * License: LGPL | ||||
| * Issue Tracker Link: https://issues.alfresco.com/jira/issues/?jql=project%3DREPO | ||||
| * Documentation Link: https://support.hyland.com/access?dita:id=byj1720776091160&vrm_version=25.2&component=Alfresco%20Content%20Services%20Community%20Edition | ||||
| * Documentation Link: https://support.hyland.com/r/Alfresco/Alfresco-Content-Services-Community-Edition/23.4/Alfresco-Content-Services-Community-Edition/Administer/Manage-Security/Authentication-and-sync | ||||
| * Contribution Model: Alfresco Open Source | ||||
| *** | ||||
|  | ||||
|   | ||||
| @@ -16,7 +16,7 @@ | ||||
| * Source Code Link:m https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/ | ||||
| * License: LGPL | ||||
| * Issue Tracker Link: https://issues.alfresco.com/jira/secure/RapidBoard.jspa?projectKey=REPO&useStoredSettings=true&rapidView=379 | ||||
| * Documentation Link: https://support.hyland.com/access?dita:id=ybx1720084724583&vrm_version=25.2 | ||||
| * Documentation Link: https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/23.4/Alfresco-Content-Services/Configure/Repository/About-Versioning | ||||
| * Contribution Model: Alfresco publishes the source code and will review proposed patch requests | ||||
| *** | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>25.3.0.25-SNAPSHOT</version> | ||||
|         <version>25.2.0.37-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <dependencies> | ||||
| @@ -85,7 +85,7 @@ | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
|             <artifactId>commons-fileupload2-jakarta-servlet6</artifactId> | ||||
|             <artifactId>commons-fileupload2-jakarta</artifactId> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
| @@ -94,7 +94,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.apache.commons</groupId> | ||||
|             <artifactId>commons-lang3</artifactId> | ||||
|             <version>3.18.0</version> | ||||
|             <version>3.17.0</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>commons-codec</groupId> | ||||
| @@ -120,7 +120,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>commons-validator</groupId> | ||||
|             <artifactId>commons-validator</artifactId> | ||||
|             <version>1.10.0</version> | ||||
|             <version>1.9.0</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.json</groupId> | ||||
| @@ -358,7 +358,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>com.fasterxml.woodstox</groupId> | ||||
|             <artifactId>woodstox-core</artifactId> | ||||
|             <version>7.1.1</version> | ||||
|             <version>7.0.0</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
| @@ -402,7 +402,7 @@ | ||||
|         <dependency> | ||||
|             <groupId>org.mybatis</groupId> | ||||
|             <artifactId>mybatis-spring</artifactId> | ||||
|             <version>3.0.5</version> | ||||
|             <version>3.0.4</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- Activiti --> | ||||
| @@ -627,6 +627,11 @@ | ||||
|             <artifactId>junit</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.epam.reportportal</groupId> | ||||
|             <artifactId>agent-java-testng</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.assertj</groupId> | ||||
|             <artifactId>assertj-core</artifactId> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2019 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2019 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -39,7 +39,6 @@ import org.alfresco.service.cmr.repository.ContentReader; | ||||
| import org.alfresco.service.cmr.repository.ContentWriter; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.transform.config.TransformOptionGroup; | ||||
| import org.alfresco.transform.config.TransformOptionValue; | ||||
| @@ -53,7 +52,6 @@ public abstract class AbstractLocalTransform implements LocalTransform | ||||
|  | ||||
|     protected final String name; | ||||
|     protected final MimetypeService mimetypeService; | ||||
|     protected final NodeService nodeService; | ||||
|     protected final TransformerDebug transformerDebug; | ||||
|  | ||||
|     protected final Set<String> transformsTransformOptionNames = new HashSet<>(); | ||||
| @@ -67,8 +65,7 @@ public abstract class AbstractLocalTransform implements LocalTransform | ||||
|             MimetypeService mimetypeService, boolean strictMimeTypeCheck, | ||||
|             Map<String, Set<String>> strictMimetypeExceptions, boolean retryTransformOnDifferentMimeType, | ||||
|             Set<TransformOption> transformsTransformOptions, | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry, | ||||
|             NodeService nodeService) | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry) | ||||
|     { | ||||
|         this.name = name; | ||||
|         this.transformerDebug = transformerDebug; | ||||
| @@ -77,7 +74,6 @@ public abstract class AbstractLocalTransform implements LocalTransform | ||||
|         this.strictMimetypeExceptions = strictMimetypeExceptions; | ||||
|         this.retryTransformOnDifferentMimeType = retryTransformOnDifferentMimeType; | ||||
|         this.localTransformServiceRegistry = localTransformServiceRegistry; | ||||
|         this.nodeService = nodeService; | ||||
|  | ||||
|         addOptionNames(transformsTransformOptionNames, transformsTransformOptions); | ||||
|     } | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2019 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2019 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -37,7 +37,6 @@ import org.alfresco.service.cmr.repository.ContentReader; | ||||
| import org.alfresco.service.cmr.repository.ContentWriter; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.util.TempFileProvider; | ||||
|  | ||||
| @@ -55,10 +54,10 @@ public class LocalFailoverTransform extends AbstractLocalTransform | ||||
|             Map<String, Set<String>> strictMimetypeExceptions, | ||||
|             boolean retryTransformOnDifferentMimeType, | ||||
|             Set<TransformOption> transformsTransformOptions, | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService) | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry) | ||||
|     { | ||||
|         super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions, | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService); | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -41,7 +41,6 @@ import org.alfresco.service.cmr.repository.ContentReader; | ||||
| import org.alfresco.service.cmr.repository.ContentWriter; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.transform.config.SupportedSourceAndTarget; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.transform.config.Transformer; | ||||
| @@ -64,10 +63,10 @@ public class LocalPassThroughTransform extends AbstractLocalTransform | ||||
|             Map<String, Set<String>> strictMimetypeExceptions, | ||||
|             boolean retryTransformOnDifferentMimeType, | ||||
|             Set<TransformOption> transformsTransformOptions, | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService) | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry) | ||||
|     { | ||||
|         super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions, | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService); | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry); | ||||
|     } | ||||
|  | ||||
|     public static Transformer getConfig(List<String> mimetypes) | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -38,7 +38,6 @@ import org.alfresco.service.cmr.repository.ContentReader; | ||||
| import org.alfresco.service.cmr.repository.ContentWriter; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.util.TempFileProvider; | ||||
|  | ||||
| @@ -62,10 +61,10 @@ public class LocalPipelineTransform extends AbstractLocalTransform | ||||
|             Map<String, Set<String>> strictMimetypeExceptions, | ||||
|             boolean retryTransformOnDifferentMimeType, | ||||
|             Set<TransformOption> transformsTransformOptions, | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry, NodeService nodeService) | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry) | ||||
|     { | ||||
|         super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions, | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService); | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2022 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -26,24 +26,16 @@ | ||||
| package org.alfresco.repo.content.transform; | ||||
|  | ||||
| import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_ENCODING; | ||||
| import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_FILENAME; | ||||
| import static org.alfresco.repo.rendition2.RenditionDefinition2.SOURCE_NODE_REF; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
|  | ||||
| import org.alfresco.httpclient.HttpClientConfig; | ||||
| import org.alfresco.model.ContentModel; | ||||
| import org.alfresco.repo.content.metadata.AsynchronousExtractor; | ||||
| import org.alfresco.repo.rendition2.RenditionDefinition2; | ||||
| import org.alfresco.service.cmr.repository.ContentReader; | ||||
| import org.alfresco.service.cmr.repository.ContentWriter; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.service.cmr.repository.*; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.util.Pair; | ||||
|  | ||||
| @@ -55,6 +47,7 @@ import org.alfresco.util.Pair; | ||||
| public class LocalTransformImpl extends AbstractLocalTransform | ||||
| { | ||||
|     private RemoteTransformerClient remoteTransformerClient; | ||||
|     TransformerDebug transformerDebug; | ||||
|  | ||||
|     private boolean available = false; | ||||
|  | ||||
| @@ -65,11 +58,11 @@ public class LocalTransformImpl extends AbstractLocalTransform | ||||
|             Set<TransformOption> transformsTransformOptions, | ||||
|             LocalTransformServiceRegistry localTransformServiceRegistry, String baseUrl, | ||||
|             HttpClientConfig httpClientConfig, | ||||
|             NodeService nodeService, | ||||
|             int startupRetryPeriodSeconds) | ||||
|     { | ||||
|         super(name, transformerDebug, mimetypeService, strictMimeTypeCheck, strictMimetypeExceptions, | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry, nodeService); | ||||
|                 retryTransformOnDifferentMimeType, transformsTransformOptions, localTransformServiceRegistry); | ||||
|         this.transformerDebug = transformerDebug; | ||||
|         remoteTransformerClient = new RemoteTransformerClient(name, baseUrl, httpClientConfig); | ||||
|         remoteTransformerClient.setStartupRetryPeriodSeconds(startupRetryPeriodSeconds); | ||||
|  | ||||
| @@ -161,17 +154,6 @@ public class LocalTransformImpl extends AbstractLocalTransform | ||||
|             transformOptions.put(SOURCE_NODE_REF, sourceNodeRef.toString()); | ||||
|         } | ||||
|  | ||||
|         String filename = null; | ||||
|         if (sourceNodeRef != null && nodeService.exists(sourceNodeRef)) | ||||
|         { | ||||
|             filename = (String) nodeService.getProperty(sourceNodeRef, ContentModel.PROP_NAME); | ||||
|         } | ||||
|  | ||||
|         if (StringUtils.isNotEmpty(filename)) | ||||
|         { | ||||
|             transformOptions.put(SOURCE_FILENAME, filename); | ||||
|         } | ||||
|  | ||||
|         // Build an array of option names and values and extract the timeout. | ||||
|         long timeoutMs = 0; | ||||
|         int nonOptions = transformOptions.containsKey(RenditionDefinition2.TIMEOUT) ? 1 : 0; | ||||
| @@ -207,7 +189,8 @@ public class LocalTransformImpl extends AbstractLocalTransform | ||||
|         args[i++] = targetMimetype; | ||||
|  | ||||
|         targetExtension = AsynchronousExtractor.getExtension(targetMimetype, sourceExtension, targetExtension); | ||||
|         remoteTransformerClient.request(reader, writer, sourceMimetype, sourceExtension, targetExtension, | ||||
|         String fileName = transformerDebug.getFilename(sourceNodeRef, true); | ||||
|         remoteTransformerClient.request(reader, writer, fileName, sourceMimetype, sourceExtension, targetExtension, | ||||
|                 timeoutMs, log, args); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2019 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2019 - 2023 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -43,7 +43,6 @@ import org.springframework.beans.factory.InitializingBean; | ||||
|  | ||||
| import org.alfresco.httpclient.HttpClientConfig; | ||||
| import org.alfresco.service.cmr.repository.MimetypeService; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.transform.config.CoreFunction; | ||||
| import org.alfresco.transform.config.TransformOption; | ||||
| import org.alfresco.transform.config.TransformOptionGroup; | ||||
| @@ -72,7 +71,6 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|         private Map<String, LocalTransform> localTransforms = new HashMap<>(); | ||||
|     } | ||||
|  | ||||
|     private NodeService nodeService; | ||||
|     private String pipelineConfigDir; | ||||
|     private Properties properties; | ||||
|     private MimetypeService mimetypeService; | ||||
| @@ -87,11 +85,6 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|         return httpClientConfig; | ||||
|     } | ||||
|  | ||||
|     public void setNodeService(NodeService nodeService) | ||||
|     { | ||||
|         this.nodeService = nodeService; | ||||
|     } | ||||
|  | ||||
|     public void setHttpClientConfig(HttpClientConfig httpClientConfig) | ||||
|     { | ||||
|         this.httpClientConfig = httpClientConfig; | ||||
| @@ -146,7 +139,6 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|         PropertyCheck.mandatory(this, "mimetypeService", mimetypeService); | ||||
|         PropertyCheck.mandatory(this, "properties", properties); | ||||
|         PropertyCheck.mandatory(this, "transformerDebug", transformerDebug); | ||||
|         PropertyCheck.mandatory(this, "nodeService", nodeService); | ||||
|         strictMimetypeExceptions = getStrictMimetypeExceptions(); | ||||
|         super.afterPropertiesSet(); | ||||
|     } | ||||
| @@ -201,14 +193,14 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|             { | ||||
|                 localTransform = new LocalPassThroughTransform(name, transformerDebug, mimetypeService, | ||||
|                         strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType, | ||||
|                         transformsTransformOptions, this, nodeService); | ||||
|                         transformsTransformOptions, this); | ||||
|             } | ||||
|             else if (!isPipeline && !isFailover) | ||||
|             { | ||||
|                 int startupRetryPeriodSeconds = getStartupRetryPeriodSeconds(name); | ||||
|                 localTransform = new LocalTransformImpl(name, transformerDebug, mimetypeService, | ||||
|                         strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType, | ||||
|                         transformsTransformOptions, this, baseUrl, httpClientConfig, nodeService, | ||||
|                         transformsTransformOptions, this, baseUrl, httpClientConfig, | ||||
|                         startupRetryPeriodSeconds); | ||||
|             } | ||||
|             else if (isPipeline) | ||||
| @@ -223,7 +215,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|  | ||||
|                 localTransform = new LocalPipelineTransform(name, transformerDebug, mimetypeService, | ||||
|                         strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType, | ||||
|                         transformsTransformOptions, this, nodeService); | ||||
|                         transformsTransformOptions, this); | ||||
|                 for (int i = 0; i < transformerCount; i++) | ||||
|                 { | ||||
|                     TransformStep intermediateTransformerStep = pipeline.get(i); | ||||
| @@ -272,7 +264,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl | ||||
|  | ||||
|                 localTransform = new LocalFailoverTransform(name, transformerDebug, mimetypeService, | ||||
|                         strictMimeTypeCheck, strictMimetypeExceptions, retryTransformOnDifferentMimeType, | ||||
|                         transformsTransformOptions, this, nodeService); | ||||
|                         transformsTransformOptions, this); | ||||
|  | ||||
|                 for (String transformerStepName : failover) | ||||
|                 { | ||||
|   | ||||
| @@ -29,6 +29,7 @@ import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.util.StringJoiner; | ||||
|  | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.http.Header; | ||||
| import org.apache.http.HttpEntity; | ||||
| @@ -90,7 +91,8 @@ public class RemoteTransformerClient | ||||
|         return baseUrl; | ||||
|     } | ||||
|  | ||||
|     public void request(ContentReader reader, ContentWriter writer, String sourceMimetype, String sourceExtension, | ||||
|     @SuppressWarnings("PMD.UseObjectForClearerAPI") | ||||
|     public void request(ContentReader reader, ContentWriter writer, String fileName, String sourceMimetype, String sourceExtension, | ||||
|             String targetExtension, long timeoutMs, Log logger, String... args) | ||||
|     { | ||||
|  | ||||
| @@ -103,7 +105,7 @@ public class RemoteTransformerClient | ||||
|  | ||||
|         try (InputStream contentStream = reader.getContentInputStream()) | ||||
|         { | ||||
|             HttpEntity reqEntity = getRequestEntity(contentStream, sourceMimetype, sourceExtension, targetExtension, timeoutMs, | ||||
|             HttpEntity reqEntity = getRequestEntity(contentStream, sourceMimetype, sourceExtension, fileName, targetExtension, timeoutMs, | ||||
|                     args, sj); | ||||
|  | ||||
|             request(logger, sourceExtension, targetExtension, reqEntity, writer, sj.toString()); | ||||
| @@ -114,10 +116,10 @@ public class RemoteTransformerClient | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     HttpEntity getRequestEntity(ContentReader reader, String sourceMimetype, String sourceExtension, String targetExtension, | ||||
|     HttpEntity getRequestEntity(ContentReader reader, String sourceMimetype, String sourceExtension, String fileName, String targetExtension, | ||||
|             long timeoutMs, String[] args, StringJoiner sj) | ||||
|     { | ||||
|         return getRequestEntity(reader.getContentInputStream(), sourceMimetype, sourceExtension, targetExtension, timeoutMs, args, sj); | ||||
|         return getRequestEntity(reader.getContentInputStream(), sourceMimetype, sourceExtension, fileName, targetExtension, timeoutMs, args, sj); | ||||
|     } | ||||
|  | ||||
|     void request(Log logger, String sourceExtension, String targetExtension, HttpEntity reqEntity, ContentWriter writer, String args) | ||||
| @@ -331,12 +333,19 @@ public class RemoteTransformerClient | ||||
|         return httpclient.execute(httpGet); | ||||
|     } | ||||
|  | ||||
|     private HttpEntity getRequestEntity(InputStream contentStream, String sourceMimetype, String sourceExtension, | ||||
|     private HttpEntity getRequestEntity(InputStream contentStream, String sourceMimetype, String sourceExtension, String filename, | ||||
|             String targetExtension, long timeoutMs, String[] args, StringJoiner sj) | ||||
|     { | ||||
|         MultipartEntityBuilder builder = MultipartEntityBuilder.create(); | ||||
|         ContentType contentType = ContentType.create(sourceMimetype); | ||||
|         builder.addBinaryBody("file", contentStream, contentType, "tmp." + sourceExtension); | ||||
|         if (StringUtils.isEmpty(filename)) | ||||
|         { | ||||
|             builder.addBinaryBody("file", contentStream, contentType, "tmp." + sourceExtension); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             builder.addBinaryBody("file", contentStream, contentType, filename); | ||||
|         } | ||||
|         builder.addTextBody("targetExtension", targetExtension); | ||||
|         sj.add("targetExtension" + '=' + targetExtension); | ||||
|         for (int i = 0; i < args.length; i += 2) | ||||
|   | ||||
| @@ -1130,10 +1130,7 @@ public class Search extends BaseScopableProcessorExtension implements Initializi | ||||
|                     // for example the key could be: {!afts}@{http://www.alfresco.org/model/content/1.0}created:[NOW/DAY-1DAY TO NOW/DAY+1DAY] | ||||
|                     // qName => @{http://www.alfresco.org/model/content/1.0}created | ||||
|                     // 7 => {!afts} | ||||
|                     if (key.startsWith("{!afts}")) | ||||
|                     { | ||||
|                         key = key.substring(7); | ||||
|                     } | ||||
|                     key = key.substring(7); | ||||
|                     String qName = key.substring(0, key.lastIndexOf(':')); | ||||
|  | ||||
|                     // Retrieve the previous facet queries | ||||
|   | ||||
| @@ -862,18 +862,9 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl implements Extens | ||||
|         if (aspectDef != null) | ||||
|         { | ||||
|             // Remove default properties | ||||
|             Map<QName, Serializable> propsBefore = nodeDAO.getNodeProperties(nodeId); | ||||
|             Map<QName, PropertyDefinition> propertyDefs = aspectDef.getProperties(); | ||||
|             Set<QName> propertyToRemoveQNames = propertyDefs.keySet(); | ||||
|             boolean propertiesRemoved = nodeDAO.removeNodeProperties(nodeId, propertyToRemoveQNames); | ||||
|  | ||||
|             if (propertiesRemoved) | ||||
|             { | ||||
|                 invokeOnUpdateProperties( | ||||
|                         nodeRef, | ||||
|                         propsBefore, // before | ||||
|                         nodeDAO.getNodeProperties(nodeId)); // after | ||||
|             } | ||||
|             nodeDAO.removeNodeProperties(nodeId, propertyToRemoveQNames); | ||||
|  | ||||
|             // Remove child associations | ||||
|             // We have to iterate over the associations and remove all those between the parent and child | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2025 Alfresco Software Limited | ||||
|  * Copyright (C) 2005 - 2018 Alfresco Software Limited | ||||
|  * %% | ||||
|  * This file is part of the Alfresco software. | ||||
|  * If the software was purchased under a paid Alfresco license, the terms of | ||||
| @@ -35,7 +35,6 @@ import org.alfresco.api.AlfrescoPublicApi; | ||||
|  * @author adavis | ||||
|  */ | ||||
| @AlfrescoPublicApi | ||||
| @SuppressWarnings({"PMD.UnnecessaryFullyQualifiedName", "PMD.UnnecessaryModifier"}) | ||||
| public interface RenditionDefinition2 | ||||
| { | ||||
|     public static final String TIMEOUT = "timeout"; | ||||
| @@ -107,11 +106,6 @@ public interface RenditionDefinition2 | ||||
|      */ | ||||
|     public static final String SOURCE_NODE_REF = "sourceNodeRef"; | ||||
|  | ||||
|     /** | ||||
|      * The Source File Name is automatically added to the Transform Options if not specified and the transformer knows about it. | ||||
|      */ | ||||
|     public static final String SOURCE_FILENAME = "sourceFilename"; | ||||
|  | ||||
|     /** | ||||
|      * The encoding of a Target Node is automatically added to the Transform Options if not specified and the transformer knows about it. | ||||
|      */ | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user