diff --git a/.asf.yaml b/.asf.yaml
index 3b0662d64b8..632495fb372 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -22,17 +22,18 @@ github:
- request-routing
- service-mesh
- microservices
+ dependabot_alerts: false
+ dependabot_updates: true
enabled_merge_buttons:
- # enable squash button:
- squash: true
- # enable merge button:
- merge: false
- # disable rebase button:
- rebase: true
+ squash: true
+ squash_commit_message: PR_TITLE
+ merge: false
+ rebase: true
- notifications:
- commits: commits@syncope.apache.org
- issues: dev@syncope.apache.org
- pullrequests_status: dev@syncope.apache.org
- pullrequests_comment: dev@syncope.apache.org
- jira_options: link label worklog
+notifications:
+ commits: commits@syncope.apache.org
+ issues: dev@syncope.apache.org
+ pullrequests_status: dev@syncope.apache.org
+ pullrequests_comment: dev@syncope.apache.org
+ pullrequests_bot_dependabot: dev@syncope.apache.org
+ jira_options: link label worklog
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 779056e11be..00000000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License
-version: 2
-updates:
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "weekly"
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index d9e36d2eb21..d9d8950afc7 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -18,10 +18,10 @@ name: "CodeQL"
on:
push:
- branches: [master,2_1_X,pr-*]
+ branches: [3_0_X,pr-*]
pull_request:
# The branches below must be a subset of the branches above
- branches: [master,2_1_X]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -29,6 +29,10 @@ jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
strategy:
fail-fast: false
@@ -41,21 +45,26 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v2
+ uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -80,4 +89,4 @@ jobs:
mvn -T 1C -PskipTests,all
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@v4
diff --git a/.github/workflows/crosschecks.yml b/.github/workflows/crosschecks.yml
index 0c821532693..e0a562802da 100644
--- a/.github/workflows/crosschecks.yml
+++ b/.github/workflows/crosschecks.yml
@@ -18,10 +18,10 @@ name: "Cross Checks"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -38,17 +38,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: ${{ matrix.java }}
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: Validate
diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml
new file mode 100644
index 00000000000..37d071f7f10
--- /dev/null
+++ b/.github/workflows/dockerhub.yml
@@ -0,0 +1,75 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License
+name: "Push to DockerHub"
+
+on:
+ push:
+ branches:
+ - 3_0_X
+
+jobs:
+ push2DockerHub:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Disk space before
+ run: df . -h
+ - name: Free disk space
+ run: |
+ sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
+ sudo rm -rf /usr/share/dotnet/ /usr/local/graalvm/ /usr/local/.ghcup/ \
+ /usr/local/share/powershell /usr/local/share/chromium /usr/local/share/boost \
+ /usr/local/lib/android /usr/local/lib/node_modules /opt/hostedtoolcache/CodeQL \
+ /opt/ghc /usr/local/.ghcup || true
+ echo "some directories deleted"
+ sudo apt-get remove --purge -y google-chrome-stable >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y microsoft-edge-stable >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y firefox >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y '^dotnet-.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y '^llvm-.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y 'php.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y '^mongodb-.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y '^mysql-.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y '^postgresql-.*' >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y temurin-* >/dev/null 2>&1 || true
+ sudo apt-get remove --purge -y azure-cli google-cloud-cli* powershell >/dev/null 2>&1 || true
+ sudo apt-get autoremove -y
+ sudo apt-get autoclean -y
+ echo "some packages purged"
+ - name: Disk space after
+ run: df . -h
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ - name: Setup Java JDK
+ uses: actions/setup-java@v5
+ with:
+ distribution: 'zulu'
+ java-version: 11
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build
+ run: mvn -U -T 1C -P 'skipTests,all,docker'
+ - name: 'Push to DockerHub'
+ run: mvn -f docker/pom.xml docker:push -Ddocker.username=${{secrets.DOCKERHUB_USER}} -Ddocker.password=${{secrets.DOCKERHUB_TOKEN}}
diff --git a/.github/workflows/fit_Elasticsearch.yml b/.github/workflows/fit_Elasticsearch.yml
index 6ff57c89b94..67fd89e399b 100644
--- a/.github/workflows/fit_Elasticsearch.yml
+++ b/.github/workflows/fit_Elasticsearch.yml
@@ -18,10 +18,10 @@ name: "FIT Elasticsearch"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Elasticsearch / H2 / JSON'
diff --git a/.github/workflows/fit_OpenSearch.yml b/.github/workflows/fit_OpenSearch.yml
new file mode 100644
index 00000000000..7a51f565312
--- /dev/null
+++ b/.github/workflows/fit_OpenSearch.yml
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License
+name: "FIT OpenSearch"
+
+on:
+ push:
+ branches: ['3_0_X', 'pr-*']
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [3_0_X]
+ schedule:
+ - cron: '0 13 * * 4'
+
+jobs:
+ fit_OpenSearch:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ - name: Setup Java JDK
+ uses: actions/setup-java@v5
+ with:
+ distribution: 'zulu'
+ java-version: 11
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build
+ run: mvn -U -T 1C -P 'skipTests,all'
+ - name: 'OpenSearch / H2 / JSON'
+ run: mvn -f fit/core-reference/pom.xml -P opensearch-it -Dinvoker.streamLogs=true -Dmodernizer.skip=true -Drat.skip=true -Dcheckstyle.skip=true -Djacoco.skip=true
diff --git a/.github/workflows/fit_Payara.yml b/.github/workflows/fit_Payara.yml
index 903ad3e6355..843a19cfbd1 100644
--- a/.github/workflows/fit_Payara.yml
+++ b/.github/workflows/fit_Payara.yml
@@ -18,10 +18,10 @@ name: "FIT Payara"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Payara / H2 / JSON'
diff --git a/.github/workflows/fit_Tomcat_H2_JSON.yml b/.github/workflows/fit_Tomcat_H2_JSON.yml
index 546f00d0709..35205ed479e 100644
--- a/.github/workflows/fit_Tomcat_H2_JSON.yml
+++ b/.github/workflows/fit_Tomcat_H2_JSON.yml
@@ -18,10 +18,10 @@ name: "FIT Tomcat H2 JSON"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Tomcat / H2 / JSON'
diff --git a/.github/workflows/fit_Tomcat_H2_XML.yml b/.github/workflows/fit_Tomcat_H2_XML.yml
index 4482ce97d06..5eeadd14d97 100644
--- a/.github/workflows/fit_Tomcat_H2_XML.yml
+++ b/.github/workflows/fit_Tomcat_H2_XML.yml
@@ -18,10 +18,10 @@ name: "FIT Tomcat H2 XML"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Tomcat / H2 / XML'
diff --git a/.github/workflows/fit_Tomcat_H2_YAML.yml b/.github/workflows/fit_Tomcat_H2_YAML.yml
index 141b74c91ab..5334f9d4b8b 100644
--- a/.github/workflows/fit_Tomcat_H2_YAML.yml
+++ b/.github/workflows/fit_Tomcat_H2_YAML.yml
@@ -18,10 +18,10 @@ name: "FIT Tomcat H2 YAML"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Tomcat / H2 / YAML'
diff --git a/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml b/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
index 76d97855c5f..6d5e96e2523 100644
--- a/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
+++ b/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
@@ -18,10 +18,10 @@ name: "FIT WA SAML2SP4UI OIDCC4UI"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'WA / SAML2SP4UI, OIDCC4UI'
diff --git a/.github/workflows/fit_WA_SRA_CASClient.yml b/.github/workflows/fit_WA_SRA_CASClient.yml
index 3ba99446c0e..51e398012eb 100644
--- a/.github/workflows/fit_WA_SRA_CASClient.yml
+++ b/.github/workflows/fit_WA_SRA_CASClient.yml
@@ -18,10 +18,10 @@ name: "FIT WA SRA CASClient"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,20 +31,23 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
-# - name: Setup tmate session
-# uses: mxschmitt/action-tmate@v3
- name: 'WA / SRA / CAS Client'
run: mvn -f fit/wa-reference/pom.xml verify -Dinvoker.streamLogs=true -Dmodernizer.skip=true -Drat.skip=true -Dcheckstyle.skip=true -Djacoco.skip=true -Dit.test=org.apache.syncope.fit.sra.CASSRAITCase
diff --git a/.github/workflows/fit_WA_SRA_OAuth2.yml b/.github/workflows/fit_WA_SRA_OAuth2.yml
index de0ec2f0f87..67a1a745e75 100644
--- a/.github/workflows/fit_WA_SRA_OAuth2.yml
+++ b/.github/workflows/fit_WA_SRA_OAuth2.yml
@@ -18,10 +18,10 @@ name: "FIT WA SRA OAuth2"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'WA / SRA / OAuth 2.0'
diff --git a/.github/workflows/fit_WA_SRA_OIDC.yml b/.github/workflows/fit_WA_SRA_OIDC.yml
index 11a2e4941a5..ab74d103e31 100644
--- a/.github/workflows/fit_WA_SRA_OIDC.yml
+++ b/.github/workflows/fit_WA_SRA_OIDC.yml
@@ -18,10 +18,10 @@ name: "FIT WA SRA OIDC"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'WA / SRA / OpenID Connect 1.0'
diff --git a/.github/workflows/fit_WA_SRA_SAML2.yml b/.github/workflows/fit_WA_SRA_SAML2.yml
index b2a013fe99f..838c36dae2f 100644
--- a/.github/workflows/fit_WA_SRA_SAML2.yml
+++ b/.github/workflows/fit_WA_SRA_SAML2.yml
@@ -18,10 +18,10 @@ name: "FIT WA SRA SAML2"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'WA / SRA / SAML 2.0'
diff --git a/.github/workflows/fit_Wildfly.yml b/.github/workflows/fit_Wildfly.yml
index 3e8fb0d0270..c5227aa839e 100644
--- a/.github/workflows/fit_Wildfly.yml
+++ b/.github/workflows/fit_Wildfly.yml
@@ -18,10 +18,10 @@ name: "FIT Wildfly"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Wildfly / H2 / JSON'
diff --git a/.github/workflows/fit_Zookeeper.yml b/.github/workflows/fit_Zookeeper.yml
index 27c7139b13c..f70bbcc5d4d 100644
--- a/.github/workflows/fit_Zookeeper.yml
+++ b/.github/workflows/fit_Zookeeper.yml
@@ -18,10 +18,10 @@ name: "FIT Zookeeper"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Zookeeper / H2 / JSON'
diff --git a/.github/workflows/mariadb.yml b/.github/workflows/mariadb.yml
index 62f514b8b8d..d02a6dcf21a 100644
--- a/.github/workflows/mariadb.yml
+++ b/.github/workflows/mariadb.yml
@@ -18,10 +18,10 @@ name: "MariaDB"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,18 +31,51 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Integration Tests: MariaDB'
run: mvn -f fit/core-reference/pom.xml -P mariadb-it -Dinvoker.streamLogs=true -Dmodernizer.skip=true -Drat.skip=true -Dcheckstyle.skip=true -Djacoco.skip=true
+
+ majson:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ - name: Setup Java JDK
+ uses: actions/setup-java@v5
+ with:
+ distribution: 'zulu'
+ java-version: 11
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build
+ run: mvn -U -T 1C -P 'skipTests,all'
+ - name: 'Unit Tests: MariaDB JPA JSON'
+ run: mvn -f core/persistence-jpa-json/pom.xml -P majson -Dinvoker.streamLogs=true -Dmodernizer.skip=true -Dianal.phase=none -Drat.skip=true -Dcheckstyle.skip=true -Djacoco.skip=true
+ - name: 'Integration Tests: MariaDB JPA JSON'
+ run: mvn -f fit/core-reference/pom.xml -P majson-it -Dinvoker.streamLogs=true -Dmodernizer.skip=true -Drat.skip=true -Dcheckstyle.skip=true -Djacoco.skip=true
diff --git a/.github/workflows/mysql.yml b/.github/workflows/mysql.yml
index 4e31b234edf..12f3ba9ee62 100644
--- a/.github/workflows/mysql.yml
+++ b/.github/workflows/mysql.yml
@@ -18,10 +18,10 @@ name: "MySQL"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Integration Tests: MySQL'
@@ -52,17 +57,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
- distribution: 'zulu'
+ distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Unit Tests: MySQL JPA JSON'
diff --git a/.github/workflows/oracle.yml b/.github/workflows/oracle.yml
index 3b4cd1f3f35..af08ebec242 100644
--- a/.github/workflows/oracle.yml
+++ b/.github/workflows/oracle.yml
@@ -18,10 +18,10 @@ name: "Oracle"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Integration Tests: Oracle'
@@ -52,17 +57,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Unit Tests: Oracle JPA JSON'
diff --git a/.github/workflows/postgresql.yml b/.github/workflows/postgresql.yml
index b1b575b3913..3efab625d64 100644
--- a/.github/workflows/postgresql.yml
+++ b/.github/workflows/postgresql.yml
@@ -18,10 +18,10 @@ name: "PostgreSQL"
on:
push:
- branches: ['master', 'pr-*']
+ branches: ['3_0_X', 'pr-*']
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [3_0_X]
schedule:
- cron: '0 13 * * 4'
@@ -31,17 +31,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Integration Tests: PostgreSQL'
@@ -52,17 +57,22 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v6
- name: Setup Java JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 11
- - uses: actions/cache@v3
+ - name: Setup Maven
+ uses: stCarolas/setup-maven@v5
+ with:
+ maven-version: 3.9.6
+ - uses: actions/cache@v4
with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
- name: Build
run: mvn -U -T 1C -P 'skipTests,all'
- name: 'Unit Tests: PostgreSQL JPA JSON'
diff --git a/.gitignore b/.gitignore
index 1d105b47ba9..984b61bfb8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,6 @@
target
maven-eclipse.xml
.externalToolBuilders
-archetype/src/main/resources/archetype-resources/pom.xml
*nb-configuration.xml
node_modules
**/checkstyle.cache
diff --git a/SECURITY.md b/.mvn/extensions.xml
similarity index 65%
rename from SECURITY.md
rename to .mvn/extensions.xml
index 72c8f7851db..0fa026d33a7 100644
--- a/SECURITY.md
+++ b/.mvn/extensions.xml
@@ -1,3 +1,4 @@
+
-# Security Policy
-
-## Supported Versions
-
-| Version | Supported |
-| ------- | ------------------ |
-| 3.0.x | :white_check_mark: |
-| 2.1.x | :white_check_mark: |
-| 2.0.x | :x: |
-| 1.2.x | :x: |
-| 1.1.x | :x: |
-
-## Reporting a Vulnerability
-
-The general guidelines are set by the Apache Security Team and described at https://apache.org/security/
+
+
+ org.apache.maven.extensions
+ maven-build-cache-extension
+ 1.2.2
+
+
diff --git a/.mvn/maven-build-cache-config.xml b/.mvn/maven-build-cache-config.xml
new file mode 100644
index 00000000000..0f0daea7fa0
--- /dev/null
+++ b/.mvn/maven-build-cache-config.xml
@@ -0,0 +1,53 @@
+
+
+
+
+ true
+ XX
+
+
+
+ {*.java,*.xml,*.properties}
+
+
+
+
+
+
+
+
+
+
+ unpack-autoupdate
+
+
+
+
+
+
+ install
+
+
+
+
+
+
diff --git a/CHANGES b/CHANGES
index ccd13febe80..7a9ca6e5c84 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,304 @@ Apache Syncope - CHANGES
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------
+Release Notes - Syncope - Version 3.0.16
+================================================================================
+
+** Bug
+ * [SYNCOPE-1933] - Console: only first dynamic group is shown
+ * [SYNCOPE-1936] - WA: only SIGNATURE and CURRENT keys generated for OIDC
+ * [SYNCOPE-1937] - User password history length is not correctly trimmed
+ * [SYNCOPE-1943] - French Canadian GUI failed with Groups contextual menu
+
+Release Notes - Syncope - Version 3.0.15
+================================================================================
+
+** Bug
+ * [SYNCOPE-1922] - Disallow searches by encrypted attribute
+ * [SYNCOPE-1924] - Bug in retainAll, removeAll, and removeIf methods of PropagationByResource
+ * [SYNCOPE-1925] - Contextual menu stays open after modal window is closed
+
+** Improvement
+ * [SYNCOPE-1926] - Reduce number of update on Syncope after a SCIM PATCH
+ * [SYNCOPE-1932] - Improve AES management
+
+Release Notes - Syncope - Version 3.0.14
+================================================================================
+
+** Bug
+ * [SYNCOPE-1906] - Wrong result order if sorting by plain attribute
+ * [SYNCOPE-1912] - Linked account password is not propagated on update
+ * [SYNCOPE-1920] - Error in search panel while trying to add a condition after an attribute of type Long
+
+** Improvement
+ * [SYNCOPE-1907] - Run Groovy code in a sandbox
+ * [SYNCOPE-1908] - Improve Relationship management
+ * [SYNCOPE-1909] - Docker containers as unprivileged user
+ * [SYNCOPE-1918] - Push task with assign unmatching rule remove dynamic memberships
+
+Release Notes - Syncope - Version 3.0.13
+================================================================================
+
+** Bug
+ * [SYNCOPE-1888] - Console: change required property for specific inputs in policy configuration
+ * [SYNCOPE-1891] - Missing mapped attribute setting for SAML2IdPAuthModuleConf
+ * [SYNCOPE-1894] - Mapping parsing error while schema contains a dot
+ * [SYNCOPE-1895] - Console CSV export does not consider search filter
+ * [SYNCOPE-1896] - Audit: not serializable exception for ConnectorObject and Any instances
+ * [SYNCOPE-1902] - Can't set Unauthorized Redirect URL in access policy via Console
+ * [SYNCOPE-1904] - Console: cannot edit authentication.attributes under Keymaster > Parameters
+
+** Improvement
+ * [SYNCOPE-1886] - Elasticsearch and Opensearch query performance improvements
+ * [SYNCOPE-1887] - Enduser: require re-authentication for sensitive features
+ * [SYNCOPE-1889] - Improve group search using SCIM extension
+ * [SYNCOPE-1893] - SCIM extension improvement
+ * [SYNCOPE-1897] - WA: mapping Google MFA crypto settings
+ * [SYNCOPE-1900] - Implement OIDC Back-Channel Logout for Console and Enduser
+
+Release Notes - Syncope - Version 3.0.12
+================================================================================
+
+** Bug
+ * [SYNCOPE-1868] - NPE when performing provision without changing password
+ * [SYNCOPE-1871] - Realm selection shows only one of allowed sub-trees
+ * [SYNCOPE-1873] - LocalDateTime fields not properly handled in BeanPanel
+ * [SYNCOPE-1875] - SAML delegated authentication: metadata keeps getting re-generated
+ * [SYNCOPE-1878] - Priority propagation failing with NOT_ATTEMPTED
+ * [SYNCOPE-1883] - Google MFA authentication does not validate scratch codes
+ * [SYNCOPE-1884] - Errors with Encrypted plain values
+
+** Improvement
+ * [SYNCOPE-1841] - Read-only multi value schema must not show new and delete button
+ * [SYNCOPE-1869] - Support evaluation order for client apps
+ * [SYNCOPE-1872] - Allow setting of force execution for MFA authentication
+ * [SYNCOPE-1880] - SCIM endpoints ignore the Prefer header
+ * [SYNCOPE-1885] - Self password reset does not trigger notification tasks without Flowable extension
+
+** Task
+ * [SYNCOPE-1866] - Implement AuthProfile management in Enduser
+
+Release Notes - Syncope - Version 3.0.11
+================================================================================
+
+** Bug
+ * [SYNCOPE-1849] - NullPointerException when logging into Console
+ * [SYNCOPE-1851] - NullPointerExeption for Date fields in Macro execution forms
+ * [SYNCOPE-1853] - Deprovision is wrongly fired on group delete
+ * [SYNCOPE-1856] - Administrator can update and delete realms outside of the granted subtree
+ * [SYNCOPE-1858] - Macro operation with dropdown form property without default value generates stacktrace
+ * [SYNCOPE-1860] - Standalone WAR artifacts duplicates JAR dependencies
+ * [SYNCOPE-1864] - Unwanted password propagation after update on pull
+ * [SYNCOPE-1867] - Prevent NPE when fetching realm entitlements to enforce authorization
+
+** Improvement
+ * [SYNCOPE-1854] - propagation not triggered after user updated while in status "updateApproved"
+ * [SYNCOPE-1855] - Refactor database search to use less nested queries
+ * [SYNCOPE-1859] - SearchPanel displays the schema keys and doesn't consider translations
+ * [SYNCOPE-1865] - Allow to specify signing and encryption algorithms for OIDC client application
+
+Release Notes - Syncope - Version 3.0.10
+================================================================================
+
+** Bug
+ * [SYNCOPE-1686] - relationship refering to object itself
+ * [SYNCOPE-1833] - Non-compliant SCIM payload returned when user extension is defined
+ * [SYNCOPE-1837] - Resources, Relationships and AuxClasses are deleted after SCIM PUT method invocation
+ * [SYNCOPE-1838] - Group owners cannot log into Console
+ * [SYNCOPE-1839] - In Console Commands cannot be removed from Macro Tasks
+ * [SYNCOPE-1840] - Cannot define the same form property for different Macro tasks
+ * [SYNCOPE-1846] - Cannot create more than one relationship at a time from the console
+ * [SYNCOPE-1847] - Propagation task audit throws exception during serialzation
+ * [SYNCOPE-1848] - Can't read user memberships with SCIM search endpoint
+
+** Improvement
+ * [SYNCOPE-1835] - Support Credential Criteria for LDAP authentication
+ * [SYNCOPE-1836] - Password propagation on resource doesn't happen from the SCIM extension
+ * [SYNCOPE-1842] - Support Credential Criteria for JAAS, JDBC and Syncope authentication
+ * [SYNCOPE-1843] - Support Azure AD authentication and attribute resolution
+ * [SYNCOPE-1844] - Support Okta authentication and attribute repository
+ * [SYNCOPE-1845] - Support doubleclik on data tables rows
+
+Release Notes - Syncope - Version 3.0.9
+================================================================================
+
+** Bug
+ * [SYNCOPE-1824] - Password policies are not always enforced on linked account password while updating account
+ * [SYNCOPE-1825] - Database schema not set on OpenJPA even if configured by properties
+ * [SYNCOPE-1826] - Search fails if search condition contains four digits at the end of the value
+ * [SYNCOPE-1828] - Can't open the profiles tab in WA page if one of the fields is null
+ * [SYNCOPE-1831] - SCIM general configuration can not be updated
+
+** New Feature
+ * [SYNCOPE-1662] - Leverage MariaDB JSON type
+
+** Improvement
+ * [SYNCOPE-1830] - Add support for membership attributes on elasticsearch and opensearch searches
+ * [SYNCOPE-1832] - Replace number input method for UI
+
+Release Notes - Syncope - Version 3.0.8
+================================================================================
+
+** Improvement
+ * [SYNCOPE-1822] - SCIM: support user extension
+ * [SYNCOPE-1823] - SCIM: support search by extension attributes
+
+Release Notes - Syncope - Version 3.0.7
+================================================================================
+
+** Bug
+ * [SYNCOPE-1798] - Incorrect descendant Realms found by Elasticsearch / OpenSearch
+ * [SYNCOPE-1800] - FIQL comparison espressions with single quote cause JSONB search to fail
+ * [SYNCOPE-1803] - Can't remove multivalue membership plain schema value from console
+ * [SYNCOPE-1806] - Overlapping dynamic realms don't get updated
+ * [SYNCOPE-1808] - Wrong location for group in ResourceTypes SCIM service
+ * [SYNCOPE-1812] - Can't perform case-sensitive search using MariaDB
+ * [SYNCOPE-1813] - Wrong provisioning result shown after batch operation
+ * [SYNCOPE-1817] - Standalone: components not available
+ * [SYNCOPE-1818] - Wrong status value propagated to external resources if changed while pulling
+ * [SYNCOPE-1820] - Console label not working with multivalue schema
+
+** Improvement
+ * [SYNCOPE-1802] - Missing delegated SAML2 IdP configuration parameters
+ * [SYNCOPE-1807] - Status propagation on resource doesn't happen from the SCIM extension
+ * [SYNCOPE-1809] - Cleanup of uid-on-create attribute on resource unassignment
+ * [SYNCOPE-1811] - Missing Bypass MFA properties
+ * [SYNCOPE-1815] - Macro improvements
+ * [SYNCOPE-1816] - Provide the possibility to add a JcifsSpnegoAuthenticationHandler
+
+** Task
+ * [SYNCOPE-1805] - Upgrade Spring Framework and Security versions
+
+Release Notes - Syncope - Version 3.0.6
+================================================================================
+
+** Bug
+ * [SYNCOPE-1778] - Reset password requires double click in order to provide username
+ * [SYNCOPE-1779] - Missing support for underscore in queries
+ * [SYNCOPE-1785] - Display rows changes not effective until reload
+ * [SYNCOPE-1790] - Swagger filtered GET returns multiple Users/AnyObjects instead of one
+ * [SYNCOPE-1791] - Unable to save audit config for CUSTOM event in the console
+ * [SYNCOPE-1792] - Error in console while editing conf parameter with values containing numbers
+ * [SYNCOPE-1793] - A logged in user cannot associate/deassociate a resource to himself
+ * [SYNCOPE-1794] - SAML: Authentication issue instant is too old or in the future
+
+** New Feature
+ * [SYNCOPE-1783] - Provide OpenSearch extension
+ * [SYNCOPE-1789] - Add support for X509 authentication
+ * [SYNCOPE-1796] - Verify access token issued by Microsoft Entra (formerly Azure)
+
+** Improvement
+ * [SYNCOPE-1780] - Password policy allows a minimum length less than the number of characters needed
+ * [SYNCOPE-1784] - Allow you to use other OIDCScopes in addition to those currently defined
+ * [SYNCOPE-1786] - Self Keymaster improvements
+ * [SYNCOPE-1787] - Support deployments with large number of Realms
+ * [SYNCOPE-1788] - Allow to insert JWKS value in OIDC Client Applications
+ * [SYNCOPE-1795] - JWT_SSO_PROVIDER and AUDIT_APPENDER should not be Implementations
+ * [SYNCOPE-1797] - Compatibility of SCIM 2.0 requests from Microsoft Entra
+
+Release Notes - Syncope - Version 3.0.5
+================================================================================
+
+** Bug
+ * [SYNCOPE-1764] - Connector capabilities and/or configuration are not updated in cluster environments
+ * [SYNCOPE-1770] - Errors upon Core restart after adding domain
+ * [SYNCOPE-1774] - Admin console does not recognize parameter type
+ * [SYNCOPE-1777] - DelegatedAdministrationException is occasionally thrown during Pull Task execution
+
+** New Feature
+ * [SYNCOPE-1772] - WA: support MFA trusted device storage
+
+** Improvement
+ * [SYNCOPE-1771] - WA: support delegated authentication for Google, Keycloak and Apple ID
+ * [SYNCOPE-1773] - Support configuration for multi-nodes Elasticsearch clusters
+ * [SYNCOPE-1775] - It should be possible to set logoutType to WA services
+ * [SYNCOPE-1776] - Let Elasticsearch re-index use bulk requests
+
+Release Notes - Syncope - Version 3.0.4
+================================================================================
+
+** Bug
+ * [SYNCOPE-1755] - NullPointer exception during PULL delete operation in case of NO_MATCH
+ * [SYNCOPE-1757] - Misalignment between SyncTokenSerializer and SyncTokenDeserializer in case of token given as a clear string
+ * [SYNCOPE-1761] - As admin, searching Users, Groups or Any Objects performs full Realm tree traversal
+ * [SYNCOPE-1763] - Constant increase of open files after upgrade to CXF 3.6.0
+ * [SYNCOPE-1767] - When searching Groups with GROUP_MEMBER condition only Users are considered
+
+** Improvement
+ * [SYNCOPE-1759] - REST endpoint to evaluate account and password compliance with policies
+ * [SYNCOPE-1760] - Align Core Spring Boot actuator endpoint security with other components
+ * [SYNCOPE-1762] - Enrich actuator info with JPA provider information
+ * [SYNCOPE-1765] - allow WA to decrypt properties during the configuration bootstrap phase
+ * [SYNCOPE-1768] - Improve internal storage export feature
+ * [SYNCOPE-1769] - Allow the same name to be used across different Any Object types
+
+Release Notes - Syncope - Version 3.0.3
+================================================================================
+
+** Bug
+ * [SYNCOPE-1731] - Performance issue with multiple any type classes
+ * [SYNCOPE-1734] - Elasticsearch not updated for uidOnCreate
+ * [SYNCOPE-1735] - Can't retrieve all policies during Realm create and update
+ * [SYNCOPE-1736] - Templates do not set the latest additions to Users and Groups
+ * [SYNCOPE-1737] - Cannot specifiy attribute mapping for AttributeRelease policies
+ * [SYNCOPE-1739] - Wrong volume mapping for source code in fit docker profile
+ * [SYNCOPE-1742] - Exception in console when defining a date for delegation
+ * [SYNCOPE-1749] - Incorrect Dynamic Group Membership Condition save from Console
+ * [SYNCOPE-1750] - Password policy not enforced if password is not stored in Syncope
+
+** New Feature
+ * [SYNCOPE-1741] - Add support form Azure Active Directory delegated authentication
+ * [SYNCOPE-1746] - Provide Software Bill Of Materials (SBOM)
+
+** Improvement
+ * [SYNCOPE-1732] - Console does not support custom Access Policy Configuration
+ * [SYNCOPE-1733] - Support OAUTH20 authentication module in WA
+ * [SYNCOPE-1738] - Refactor Report management
+ * [SYNCOPE-1740] - Allow to specify UsernameAttributeProvider for Client Applications
+ * [SYNCOPE-1743] - Add support for Ticket Expiration Policies into ClientApp
+ * [SYNCOPE-1745] - Allow to manage ConnId bundles with more Connectors
+ * [SYNCOPE-1747] - Provide controls to refresh WA client applications from Console
+ * [SYNCOPE-1748] - SCIM 2.0 Implement PATCH operations
+ * [SYNCOPE-1751] - Improve password auto generation on propagation
+ * [SYNCOPE-1752] - Support large number of Realms
+ * [SYNCOPE-1753] - Extend changes' history management to most relevant WA configuration objects
+
+Release Notes - Syncope - Version 3.0.2
+================================================================================
+
+** Bug
+ * [SYNCOPE-1725] - Error when searching with high number of OR or AND conditions with Elasticsearch
+ * [SYNCOPE-1726] - WA does not always get configuration from Core on startup
+ * [SYNCOPE-1727] - Elasticsearch cannot find anything under given Realm in case of parent update
+ * [SYNCOPE-1728] - Unable to create LDAP authentication module from console
+ * [SYNCOPE-1730] - Standalone on Windows: Console Topology page does not show any Connector or Resource
+
+** Improvement
+ * [SYNCOPE-1722] - Allow password fields to reveal their value to the end-user
+ * [SYNCOPE-1723] - remove some non-reproducible bits
+ * [SYNCOPE-1724] - Provide health status for Elasticsearch
+ * [SYNCOPE-1729] - Configure Maven Build Cache Extension
+
+Release Notes - Syncope - Version 3.0.1
+================================================================================
+
+** Bug
+ * [SYNCOPE-1711] - WA Docker image not working properly
+ * [SYNCOPE-1712] - Invalid HTTP method: PATCH with JDK 17
+ * [SYNCOPE-1715] - Cannot update Audit settings via Console
+
+** New Feature
+ * [SYNCOPE-1105] - Provide unique key for operations
+
+** Improvement
+ * [SYNCOPE-1709] - Persist Jobs' current status in the database to support multi-node deployments
+ * [SYNCOPE-1713] - Support time-based conditions for Audit, Exec and Remediation queries
+ * [SYNCOPE-1714] - Support Docker deployments from archetype
+ * [SYNCOPE-1716] - Concurrent handling for pull and push tasks
+ * [SYNCOPE-1719] - Remove limitations for memberships and relationships
+ * [SYNCOPE-1720] - Switch persistence identifiers to UUID version 7
+ * [SYNCOPE-1721] - Allow for more Access Policy types
+
Release Notes - Syncope - Version 3.0.0
================================================================================
diff --git a/NOTICE b/NOTICE
index 20545c539f1..d7aa1399613 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
Apache Syncope
-Copyright 2012-2022 The Apache Software Foundation
+Copyright 2012-2023 The Apache Software Foundation
This product includes software developed by:
The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.md b/README.md
deleted file mode 100644
index da05e9a8784..00000000000
--- a/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-**Apache Syncope** is an Open Source system for managing digital identities in enterprise environments,
-implemented in Java EE technology and released under Apache 2.0 license.
-
-More information at https://syncope.apache.org
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/archetype/pom.xml b/archetype/pom.xml
index d75dd77f555..3e9fae9a9e5 100644
--- a/archetype/pom.xml
+++ b/archetype/pom.xml
@@ -24,7 +24,7 @@ under the License.
org.apache.syncope
syncope
- 3.0.1-SNAPSHOT
+ 3.0.17-SNAPSHOT
Apache Syncope Archetype
@@ -34,6 +34,8 @@ under the License.
maven-archetype
+ 3.4.1
+
${basedir}/..
@@ -42,7 +44,7 @@ under the License.
org.apache.maven.archetype
archetype-packaging
- 3.2.0
+ ${maven.archetype.version}
@@ -51,56 +53,38 @@ under the License.
org.apache.maven.plugins
maven-archetype-plugin
- 3.2.1
+ ${maven.archetype.version}
true
-
- org.codehaus.mojo
- xml-maven-plugin
- true
+ org.apache.maven.plugins
+ maven-antrun-plugin
- generate-resources
+ adjust-MasterContent
- transform
+ run
+ prepare-package
+
+
+
+
+
+
+
-
-
-
- ${basedir}/src/main/resources
-
- meta-pom.xml
-
- ${basedir}/src/main/resources/archetype-resources
- ${basedir}/src/main/resources/properties2pom.xsl
-
-
- syncopeVersion
- ${project.version}
-
-
-
-
- indent
- yes
-
-
-
-
- ^meta-(.*)\.xml$
- $1.xml
-
-
-
-
-
@@ -131,18 +115,18 @@ under the License.
core.properties
- ${project.build.outputDirectory}/archetype-resources/core/src/main/resources
+ archetype-resources/core/src/main/resources
../core/provisioning-java/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/core/src/main/resources
+ archetype-resources/core/src/main/resources
../core/persistence-jpa/src/main/resources
META-INF/spring-persistence.xml
- ${project.build.outputDirectory}/archetype-resources/core/src/main/resources
+ archetype-resources/core/src/main/resources
../core/persistence-jpa-json/src/main/resources/
@@ -150,41 +134,41 @@ under the License.
META-INF/*
audit/*
- ${project.build.outputDirectory}/archetype-resources/core/src/main/resources
+ archetype-resources/core/src/main/resources
../core/persistence-jpa/src/test/resources/domains
- ${project.build.outputDirectory}/archetype-resources/core/src/test/resources/domains
+ archetype-resources/core/src/test/resources/domains
../fit/core-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/core/src/main/resources
+ archetype-resources/core/src/main/resources
log4j2.xml
../fit/core-reference/src/test/resources
- ${project.build.outputDirectory}/archetype-resources/core/src/test/resources
+ archetype-resources/core/src/test/resources
keystore
../fit/core-reference/src/test/resources/scriptedsql
- ${project.build.outputDirectory}/archetype-resources/core/src/test/resources/scriptedsql
+ archetype-resources/core/src/test/resources/scriptedsql
../fit/core-reference/src/test/resources/rest
- ${project.build.outputDirectory}/archetype-resources/core/src/test/resources/rest
+ archetype-resources/core/src/test/resources/rest
../fit/core-reference/src/main/webapp/WEB-INF
- ${project.build.outputDirectory}/archetype-resources/core/src/main/webapp/WEB-INF
+ archetype-resources/core/src/main/webapp/WEB-INF
../fit/core-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/core/src/test/resources
+ archetype-resources/core/src/test/resources
core-embedded.properties
core-all.properties
@@ -195,25 +179,25 @@ under the License.
../client/idrepo/console/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/console/src/main/resources
+ archetype-resources/console/src/main/resources
console.properties
../fit/console-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/console/src/main/resources
+ archetype-resources/console/src/main/resources
log4j2.xml
../fit/console-reference/src/main/webapp/WEB-INF
- ${project.build.outputDirectory}/archetype-resources/console/src/main/webapp/WEB-INF
+ archetype-resources/console/src/main/webapp/WEB-INF
../fit/console-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/console/src/test/resources
+ archetype-resources/console/src/test/resources
console-embedded.properties
console-https.properties
@@ -222,7 +206,7 @@ under the License.
../client/idrepo/enduser/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/enduser/src/main/resources
+ archetype-resources/enduser/src/main/resources
enduser.properties
customFormLayout.json
@@ -230,18 +214,18 @@ under the License.
../fit/enduser-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/enduser/src/main/resources
+ archetype-resources/enduser/src/main/resources
log4j2.xml
../fit/enduser-reference/src/main/webapp/WEB-INF
- ${project.build.outputDirectory}/archetype-resources/enduser/src/main/webapp/WEB-INF
+ archetype-resources/enduser/src/main/webapp/WEB-INF
../fit/enduser-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/enduser/src/test/resources
+ archetype-resources/enduser/src/test/resources
enduser-embedded.properties
enduser-https.properties
@@ -250,11 +234,11 @@ under the License.
../sra/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/sra/src/main/resources
+ archetype-resources/sra/src/main/resources
../fit/wa-reference/src/test/resources
- ${project.build.outputDirectory}/archetype-resources/sra/src/test/resources
+ archetype-resources/sra/src/test/resources
sra-*.properties
@@ -266,22 +250,22 @@ under the License.
cas-theme-default.properties
wa.properties
- ${project.build.outputDirectory}/archetype-resources/wa/src/main/resources
+ archetype-resources/wa/src/main/resources
../fit/wa-reference/src/main/webapp/WEB-INF
- ${project.build.outputDirectory}/archetype-resources/wa/src/main/webapp/WEB-INF
+ archetype-resources/wa/src/main/webapp/WEB-INF
../fit/wa-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/wa/src/main/resources
+ archetype-resources/wa/src/main/resources
log4j2.xml
../fit/wa-reference/src/main/resources
- ${project.build.outputDirectory}/archetype-resources/wa/src/test/resources
+ archetype-resources/wa/src/test/resources
wa-embedded.properties
@@ -289,7 +273,7 @@ under the License.
../fit/wa-reference/src/test/resources
- ${project.build.outputDirectory}/archetype-resources/fit/src/test/resources
+ archetype-resources/fit/src/test/resources
keystore.jks
diff --git a/archetype/src/main/resources/archetype-resources/common/pom.xml b/archetype/src/main/resources/archetype-resources/common/pom.xml
index b7e87968a9c..16e1d9e0e14 100644
--- a/archetype/src/main/resources/archetype-resources/common/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/common/pom.xml
@@ -38,6 +38,10 @@ under the License.
org.apache.syncope.common.idm
syncope-common-idm-lib
+
+ org.apache.syncope.common.am
+ syncope-common-am-lib
+
diff --git a/archetype/src/main/resources/archetype-resources/console/pom.xml b/archetype/src/main/resources/archetype-resources/console/pom.xml
index b1bca655473..5292c723a57 100644
--- a/archetype/src/main/resources/archetype-resources/console/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/console/pom.xml
@@ -30,7 +30,11 @@ under the License.
Apache Syncope sample project - Console
${groupId}
${artifactId}
- war
+ ${packaging}
+
+
+ war
+
@@ -121,8 +125,12 @@ under the License.
- executable
-
+ standalone
+
+
+ jar
+
+
org.springframework.boot
diff --git a/archetype/src/main/resources/archetype-resources/core/pom.xml b/archetype/src/main/resources/archetype-resources/core/pom.xml
index 602e5280b2e..93a046ac73b 100644
--- a/archetype/src/main/resources/archetype-resources/core/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/core/pom.xml
@@ -30,7 +30,11 @@ under the License.
Apache Syncope sample project - Core
${groupId}
${artifactId}
- war
+ ${packaging}
+
+
+ war
+
@@ -158,10 +162,6 @@ under the License.
src/main/resources
true
-
- workflow.properties
- provisioning.properties
-
src/main/resources/all
@@ -172,17 +172,12 @@ under the License.
-
- executable
-
+ standalone
+
+
+ jar
+
+
org.springframework.boot
diff --git a/archetype/src/main/resources/archetype-resources/enduser/pom.xml b/archetype/src/main/resources/archetype-resources/enduser/pom.xml
index 04dbfa86d3d..3f4da4cf70d 100644
--- a/archetype/src/main/resources/archetype-resources/enduser/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/enduser/pom.xml
@@ -30,7 +30,11 @@ under the License.
Apache Syncope sample project - Enduser
${groupId}
${artifactId}
- war
+ ${packaging}
+
+
+ war
+
@@ -40,8 +44,8 @@ under the License.
- org.apache.syncope.client.idrepo
- syncope-client-idrepo-enduser
+ org.apache.syncope.client.am
+ syncope-client-am-enduser
@@ -148,8 +152,12 @@ under the License.
- executable
-
+ standalone
+
+
+ jar
+
+
org.springframework.boot
diff --git a/archetype/src/main/resources/archetype-resources/fit/pom.xml b/archetype/src/main/resources/archetype-resources/fit/pom.xml
index 6999730f1de..e55d33bc8e8 100644
--- a/archetype/src/main/resources/archetype-resources/fit/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/fit/pom.xml
@@ -194,9 +194,10 @@ under the License.
-Djavax.net.ssl.trustStore=${basedir}/src/test/resources/keystore.jks
-Djavax.net.ssl.trustStorePassword=password
+ -Dreactor.netty.http.server.accessLogEnabled=true
+ -Dsyncope.log.dir=${project.build.directory}/log
-jar
${basedir}/../sra/target/syncope-sra-exec.jar
- -Dreactor.netty.http.server.accessLogEnabled=true
${basedir}/../sra/target/test-classes
@@ -222,8 +223,6 @@ under the License.
${project.build.directory}/cargo/extract
600000
- ${cargo.log}
-
@@ -240,6 +239,9 @@ under the License.
${basedir}/src/test/resources/keystore.jks
password
+
+ ${basedir}/../core/target/test-classes
+ file:${basedir}/../core/target/bundles/
@@ -298,6 +300,25 @@ under the License.
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+
+
+ regex-property
+
+ regex-property
+
+
+ groupIdDocker
+ ${groupId}
+ \.
+ /
+ true
+
+
+
+
@@ -409,6 +430,11 @@ under the License.
postgres
+ -Dfile.encoding=UTF-8 -Dwicket.ioc.useByteBuddy=true -server -Xms1536m -Xmx1536m
+ -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+DisableExplicitGC
+ -Djava.security.egd=file:/dev/./urandom
+ -Djavax.net.ssl.trustStore=/opt/syncope/conf/keystore.p12
+ -Djavax.net.ssl.trustStorePassword=password
docker,postgresql,all
jdbc:postgresql://postgres:5432/syncope?stringtype=unspecified
syncope
@@ -426,7 +452,9 @@ under the License.
${basedir}/../core/target/classes/domains/MasterContent.xml:/opt/syncope/conf/domains/MasterContent.xml:ro
- ${settings.localRepository}/${groupId}/syncope-core/${project.version}/syncope-core-${project.version}-classes.jar:/opt/syncope/lib/${groupId}-syncope-core-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-core/${project.version}/syncope-core-${project.version}-classes.jar:/opt/syncope/lib/syncope-core-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-common/${project.version}/syncope-common-${project.version}.jar:/opt/syncope/lib/syncope-common.jar:ro
+ ${basedir}/src/test/resources/keystore.p12:/opt/syncope/conf/keystore.p12:ro
@@ -445,11 +473,6 @@ under the License.
syncope
- -Dfile.encoding=UTF-8 -Dwicket.ioc.useByteBuddy=true -server -Xms1536m -Xmx1536m
- -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+DisableExplicitGC
- -Djava.security.egd=file:/dev/./urandom
- -Djavax.net.ssl.trustStore=/opt/syncope/conf/keystore.p12
- -Djavax.net.ssl.trustStorePassword=password
docker,all
http://syncope-console:8080/syncope-console/
http://syncope:8080/syncope/rest/keymaster
@@ -460,8 +483,8 @@ under the License.
- ${basedir}/src/test/resources/keystore.p12:/opt/syncope/conf/keystore.p12:ro
- ${settings.localRepository}/${groupId}/syncope-console/${project.version}/syncope-console-${project.version}-classes.jar:/opt/syncope/lib/${groupId}-syncope-console-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-console/${project.version}/syncope-console-${project.version}-classes.jar:/opt/syncope/lib/syncope-console-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-common/${project.version}/syncope-common-${project.version}.jar:/opt/syncope/lib/syncope-common.jar:ro
@@ -491,7 +514,8 @@ under the License.
- ${settings.localRepository}/${groupId}/syncope-enduser/${project.version}/syncope-enduser-${project.version}-classes.jar:/opt/syncope/lib/${groupId}-syncope-enduser-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-enduser/${project.version}/syncope-enduser-${project.version}-classes.jar:/opt/syncope/lib/syncope-enduser-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-common/${project.version}/syncope-common-${project.version}.jar:/opt/syncope/lib/syncope-common.jar:ro
@@ -524,7 +548,8 @@ under the License.
${basedir}/../wa/src/test/resources/wa-docker-https.properties:/opt/syncope/conf/wa-docker-https.properties:ro
${basedir}/src/test/resources/keystore.p12:/opt/syncope/conf/keystore.p12:ro
- ${settings.localRepository}/${groupId}/syncope-wa/${project.version}/syncope-wa-${project.version}-classes.jar:/opt/syncope/lib/${groupId}-syncope-wa-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-wa/${project.version}/syncope-wa-${project.version}-classes.jar:/opt/syncope/lib/syncope-wa-classes.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-common/${project.version}/syncope-common-${project.version}.jar:/opt/syncope/lib/syncope-common.jar:ro
@@ -557,7 +582,8 @@ under the License.
- ${settings.localRepository}/${groupId}/syncope-sra/${project.version}/syncope-sra-${project.version}.jar:/opt/syncope/lib/${groupId}-syncope-sra.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-sra/${project.version}/syncope-sra-${project.version}.jar:/opt/syncope/lib/syncope-sra.jar:ro
+ ${settings.localRepository}/${groupIdDocker}/syncope-common/${project.version}/syncope-common-${project.version}.jar:/opt/syncope/lib/syncope-common.jar:ro
diff --git a/archetype/src/main/resources/meta-pom.xml b/archetype/src/main/resources/archetype-resources/pom.xml
similarity index 90%
rename from archetype/src/main/resources/meta-pom.xml
rename to archetype/src/main/resources/archetype-resources/pom.xml
index 0a453ee8103..25a71bc0e92 100644
--- a/archetype/src/main/resources/meta-pom.xml
+++ b/archetype/src/main/resources/archetype-resources/pom.xml
@@ -26,11 +26,11 @@ under the License.
org.apache.syncope
syncope
-
+ syncopeVersion
-
+ syncopeVersion
${secretKey}
${anonymousKey}
${jwsKey}
@@ -39,6 +39,8 @@ under the License.
none
true
true
+
+ 9443
Apache Syncope sample project
@@ -54,7 +56,12 @@ under the License.
syncope-common-idm-lib
${syncope.version}
-
+
+ org.apache.syncope.common.am
+ syncope-common-am-lib
+ ${syncope.version}
+
+
org.apache.syncope.core
syncope-core-starter
@@ -83,8 +90,8 @@ under the License.
- org.apache.syncope.client.idrepo
- syncope-client-idrepo-enduser
+ org.apache.syncope.client.am
+ syncope-client-am-enduser
${syncope.version}
diff --git a/archetype/src/main/resources/archetype-resources/wa/pom.xml b/archetype/src/main/resources/archetype-resources/wa/pom.xml
index cab9c2420c1..6e9082af022 100644
--- a/archetype/src/main/resources/archetype-resources/wa/pom.xml
+++ b/archetype/src/main/resources/archetype-resources/wa/pom.xml
@@ -30,10 +30,35 @@ under the License.
Apache Syncope sample project - WA
${groupId}
${artifactId}
- war
+ ${packaging}
+
+
+ war
+
+
+ org.springframework
+ spring-framework-bom
+ ${spring-framework.version}
+ pom
+ import
+
+
+ org.springframework.security
+ spring-security-bom
+ ${spring-security.version}
+ pom
+ import
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
org.apereo.cas
cas-server-support-bom
@@ -41,6 +66,19 @@ under the License.
pom
import
+
+
+
+ nz.net.ultraq.thymeleaf
+ thymeleaf-layout-dialect
+ ${thymeleaf-layout-dialect.version}
+
+
+
+ org.apache.cxf
+ cxf-rt-transports-http
+ ${cxf.version}
+
@@ -106,8 +144,12 @@ under the License.
- executable
-
+ standalone
+
+
+ jar
+
+
org.springframework.boot
diff --git a/archetype/src/main/resources/properties2pom.xsl b/archetype/src/main/resources/properties2pom.xsl
deleted file mode 100644
index 41e76b47451..00000000000
--- a/archetype/src/main/resources/properties2pom.xsl
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/client/am/console/pom.xml b/client/am/console/pom.xml
index ded3392d8a5..d39c5aed80d 100644
--- a/client/am/console/pom.xml
+++ b/client/am/console/pom.xml
@@ -24,7 +24,7 @@ under the License.
org.apache.syncope.client
syncope-client-am
- 3.0.1-SNAPSHOT
+ 3.0.17-SNAPSHOT
Apache Syncope Client AM Console
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/AMConsoleContext.java b/client/am/console/src/main/java/org/apache/syncope/client/console/AMConsoleContext.java
new file mode 100644
index 00000000000..46b94e1603e
--- /dev/null
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/AMConsoleContext.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console;
+
+import org.apache.syncope.client.console.commons.AMAccessPolicyConfProvider;
+import org.apache.syncope.client.console.commons.AMPolicyTabProvider;
+import org.apache.syncope.client.console.commons.AMRealmPolicyProvider;
+import org.apache.syncope.client.console.commons.AccessPolicyConfProvider;
+import org.apache.syncope.client.console.commons.PolicyTabProvider;
+import org.apache.syncope.client.console.commons.RealmPolicyProvider;
+import org.apache.syncope.client.console.init.AMClassPathScanImplementationContributor;
+import org.apache.syncope.client.console.init.ClassPathScanImplementationContributor;
+import org.apache.syncope.client.console.rest.AttrRepoRestClient;
+import org.apache.syncope.client.console.rest.AuthModuleRestClient;
+import org.apache.syncope.client.console.rest.AuthProfileRestClient;
+import org.apache.syncope.client.console.rest.ClientAppRestClient;
+import org.apache.syncope.client.console.rest.OIDCJWKSRestClient;
+import org.apache.syncope.client.console.rest.PolicyRestClient;
+import org.apache.syncope.client.console.rest.SAML2IdPEntityRestClient;
+import org.apache.syncope.client.console.rest.SAML2SPEntityRestClient;
+import org.apache.syncope.client.console.rest.SRARouteRestClient;
+import org.apache.syncope.client.console.rest.SRAStatisticsRestClient;
+import org.apache.syncope.client.console.rest.WAConfigRestClient;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration(proxyBeanMethods = false)
+public class AMConsoleContext {
+
+ @Bean
+ public ClassPathScanImplementationContributor amClassPathScanImplementationContributor() {
+ return new AMClassPathScanImplementationContributor();
+ }
+
+ @Bean
+ public RealmPolicyProvider realmPolicyProvider(final PolicyRestClient policyRestClient) {
+ return new AMRealmPolicyProvider(policyRestClient);
+ }
+
+ @Bean
+ public PolicyTabProvider amPolicyTabProvider(final PolicyRestClient policyRestClient) {
+ return new AMPolicyTabProvider(policyRestClient);
+ }
+
+ @Bean
+ public AccessPolicyConfProvider accessPolicyConfProvider() {
+ return new AMAccessPolicyConfProvider();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public AttrRepoRestClient attrRepoRestClient() {
+ return new AttrRepoRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public AuthModuleRestClient authModuleRestClient() {
+ return new AuthModuleRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public AuthProfileRestClient authProfileRestClient() {
+ return new AuthProfileRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public ClientAppRestClient clientAppRestClient() {
+ return new ClientAppRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public OIDCJWKSRestClient oidcJWKSRestClient() {
+ return new OIDCJWKSRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public SAML2IdPEntityRestClient saml2IdPEntityRestClient() {
+ return new SAML2IdPEntityRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public SAML2SPEntityRestClient saml2SPEntityRestClient() {
+ return new SAML2SPEntityRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public SRARouteRestClient sraRouteRestClient() {
+ return new SRARouteRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public SRAStatisticsRestClient sRAStatisticsRestClient() {
+ return new SRAStatisticsRestClient();
+ }
+
+ @ConditionalOnMissingBean
+ @Bean
+ public WAConfigRestClient waConfigRestClient() {
+ return new WAConfigRestClient();
+ }
+}
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/SyncopeAMConsoleContext.java b/client/am/console/src/main/java/org/apache/syncope/client/console/SyncopeAMConsoleContext.java
deleted file mode 100644
index b5b35524d8e..00000000000
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/SyncopeAMConsoleContext.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console;
-
-import org.apache.syncope.client.console.commons.AMPolicyTabProvider;
-import org.apache.syncope.client.console.commons.AMRealmPolicyProvider;
-import org.apache.syncope.client.console.commons.PolicyTabProvider;
-import org.apache.syncope.client.console.commons.RealmPolicyProvider;
-import org.apache.syncope.client.console.init.AMClassPathScanImplementationContributor;
-import org.apache.syncope.client.console.init.ClassPathScanImplementationContributor;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration(proxyBeanMethods = false)
-public class SyncopeAMConsoleContext {
-
- @Bean
- public ClassPathScanImplementationContributor amClassPathScanImplementationContributor() {
- return new AMClassPathScanImplementationContributor();
- }
-
- @Bean
- public RealmPolicyProvider realmPolicyProvider() {
- return new AMRealmPolicyProvider();
- }
-
- @Bean
- public PolicyTabProvider amPolicyTabProvider() {
- return new AMPolicyTabProvider();
- }
-}
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
index 1066f1268c7..da73e8b0021 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
@@ -19,14 +19,15 @@
package org.apache.syncope.client.console.authprofiles;
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.authprofiles.AuthProfileDirectoryPanel.AuthProfileProvider;
import org.apache.syncope.client.console.commons.AMConstants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.panels.ModalDirectoryPanel;
import org.apache.syncope.client.console.rest.AuthProfileRestClient;
@@ -37,27 +38,23 @@
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
import org.apache.syncope.client.ui.commons.Constants;
-import org.apache.syncope.client.ui.commons.DirectoryDataProvider;
-import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
import org.apache.syncope.common.lib.to.AuthProfileTO;
import org.apache.syncope.common.lib.types.AMEntitlement;
import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
import org.apache.syncope.common.lib.wa.ImpersonationAccount;
+import org.apache.syncope.common.lib.wa.MfaTrustedDevice;
import org.apache.syncope.common.lib.wa.U2FDevice;
import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.extensions.wizard.WizardModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
@@ -68,8 +65,10 @@ public class AuthProfileDirectoryPanel
private final BaseModal authProfileModal;
- public AuthProfileDirectoryPanel(final String id, final PageReference pageRef) {
- super(id, pageRef);
+ public AuthProfileDirectoryPanel(
+ final String id, final AuthProfileRestClient restClient, final PageReference pageRef) {
+
+ super(id, restClient, pageRef);
authProfileModal = new BaseModal<>(Constants.OUTER) {
@@ -82,15 +81,9 @@ protected void onConfigure() {
}
};
authProfileModal.size(Modal.Size.Large);
- authProfileModal.setWindowClosedCallback(target -> {
- updateResultTable(target);
- authProfileModal.show(false);
- });
+ setWindowClosedReloadCallback(authProfileModal, true);
addOuterObject(authProfileModal);
- addNewItemPanelBuilder(new CreateAuthProfileWizardBuilder(pageRef), true);
- MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, AMEntitlement.AUTH_PROFILE_CREATE);
-
disableCheckBoxes();
initResultTable();
}
@@ -125,7 +118,7 @@ protected List> getColumns() {
@Override
protected boolean isCondition(final IModel rowModel) {
- return !rowModel.getObject().getImpersonationAccounts().isEmpty();
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getImpersonationAccounts());
}
});
columns.add(new BooleanConditionColumn<>(new StringResourceModel("googleMfaAuthTokens")) {
@@ -134,7 +127,7 @@ protected boolean isCondition(final IModel rowModel) {
@Override
protected boolean isCondition(final IModel rowModel) {
- return !rowModel.getObject().getGoogleMfaAuthTokens().isEmpty();
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getGoogleMfaAuthTokens());
}
});
columns.add(new BooleanConditionColumn<>(new StringResourceModel("googleMfaAuthAccounts")) {
@@ -143,7 +136,7 @@ protected boolean isCondition(final IModel rowModel) {
@Override
protected boolean isCondition(final IModel rowModel) {
- return !rowModel.getObject().getGoogleMfaAuthAccounts().isEmpty();
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getGoogleMfaAuthAccounts());
}
});
columns.add(new BooleanConditionColumn<>(new StringResourceModel("u2fRegisteredDevices")) {
@@ -152,7 +145,16 @@ protected boolean isCondition(final IModel rowModel) {
@Override
protected boolean isCondition(final IModel rowModel) {
- return !rowModel.getObject().getU2FRegisteredDevices().isEmpty();
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getU2FRegisteredDevices());
+ }
+ });
+ columns.add(new BooleanConditionColumn<>(new StringResourceModel("mfaTrustedDevices")) {
+
+ private static final long serialVersionUID = -8236820422411536323L;
+
+ @Override
+ protected boolean isCondition(final IModel rowModel) {
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getMfaTrustedDevices());
}
});
columns.add(new BooleanConditionColumn<>(new StringResourceModel("webAuthnAccount")) {
@@ -161,7 +163,7 @@ protected boolean isCondition(final IModel rowModel) {
@Override
protected boolean isCondition(final IModel rowModel) {
- return !rowModel.getObject().getWebAuthnDeviceCredentials().isEmpty();
+ return CollectionUtils.isNotEmpty(rowModel.getObject().getWebAuthnDeviceCredentials());
}
});
@@ -178,11 +180,11 @@ public ActionsPanel getActions(final IModel model)
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
- model.setObject(AuthProfileRestClient.read(model.getObject().getKey()));
+ model.setObject(restClient.read(model.getObject().getKey()));
target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
authProfileModal,
new AuthProfileItemDirectoryPanel(
- "panel", authProfileModal, model.getObject(), pageRef) {
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
private static final long serialVersionUID = -5380664539000792237L;
@@ -225,11 +227,11 @@ protected List> getColumns() {
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
- model.setObject(AuthProfileRestClient.read(model.getObject().getKey()));
+ model.setObject(restClient.read(model.getObject().getKey()));
target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
authProfileModal,
new AuthProfileItemDirectoryPanel(
- "panel", authProfileModal, model.getObject(), pageRef) {
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
private static final long serialVersionUID = 7332357430197837993L;
@@ -274,11 +276,11 @@ protected List> getColumns() {
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
- model.setObject(AuthProfileRestClient.read(model.getObject().getKey()));
+ model.setObject(restClient.read(model.getObject().getKey()));
target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
authProfileModal,
new AuthProfileItemDirectoryPanel(
- "panel", authProfileModal, model.getObject(), pageRef) {
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
private static final long serialVersionUID = -670769282358547044L;
@@ -323,11 +325,11 @@ protected List> getColumns() {
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
- model.setObject(AuthProfileRestClient.read(model.getObject().getKey()));
+ model.setObject(restClient.read(model.getObject().getKey()));
target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
authProfileModal,
new AuthProfileItemDirectoryPanel(
- "panel", authProfileModal, model.getObject(), pageRef) {
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
private static final long serialVersionUID = 5788448799796630011L;
@@ -364,7 +366,58 @@ protected List> getColumns() {
authProfileModal.header(new Model<>(getString("u2fRegisteredDevices", model)));
authProfileModal.show(true);
}
- }, ActionLink.ActionType.FO_EDIT, AMEntitlement.AUTH_PROFILE_UPDATE);
+ }, ActionLink.ActionType.DEPROVISION, AMEntitlement.AUTH_PROFILE_UPDATE);
+
+ panel.add(new ActionLink<>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
+ model.setObject(restClient.read(model.getObject().getKey()));
+ target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
+ authProfileModal,
+ new AuthProfileItemDirectoryPanel(
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
+
+ private static final long serialVersionUID = 5788448799796630011L;
+
+ @Override
+ protected List getItems() {
+ return model.getObject().getMfaTrustedDevices();
+ }
+
+ @Override
+ protected MfaTrustedDevice defaultItem() {
+ return new MfaTrustedDevice();
+ }
+
+ @Override
+ protected String sortProperty() {
+ return "id";
+ }
+
+ @Override
+ protected String paginatorRowsKey() {
+ return AMConstants.PREF_AUTHPROFILE_MFA_TRUSTED_FDEVICES_PAGINATOR_ROWS;
+ }
+
+ @Override
+ protected List> getColumns() {
+ List> columns = new ArrayList<>();
+ columns.add(new PropertyColumn<>(new ResourceModel("id"), "id", "id"));
+ columns.add(new PropertyColumn<>(new ResourceModel("name"), "name", "name"));
+ columns.add(new DatePropertyColumn<>(
+ new ResourceModel("recordDate"), "recordDate", "recordDate"));
+ columns.add(new DatePropertyColumn<>(
+ new ResourceModel("expirationDate"), "expirationDate", "expirationDate"));
+ return columns;
+ }
+ }, pageRef)));
+ authProfileModal.header(new Model<>(getString("mfaTrustedDevices", model)));
+ authProfileModal.show(true);
+ }
+ }, ActionLink.ActionType.DOWN, AMEntitlement.AUTH_PROFILE_UPDATE);
panel.add(new ActionLink<>() {
@@ -372,11 +425,11 @@ protected List> getColumns() {
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
- model.setObject(AuthProfileRestClient.read(model.getObject().getKey()));
+ model.setObject(restClient.read(model.getObject().getKey()));
target.add(authProfileModal.setContent(new ModalDirectoryPanel<>(
authProfileModal,
new AuthProfileItemDirectoryPanel(
- "panel", authProfileModal, model.getObject(), pageRef) {
+ "panel", restClient, authProfileModal, model.getObject(), pageRef) {
private static final long serialVersionUID = 6820212423488933184L;
@@ -422,7 +475,7 @@ protected List> getColumns() {
@Override
public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore) {
try {
- AuthProfileRestClient.delete(model.getObject().getKey());
+ restClient.delete(model.getObject().getKey());
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
target.add(container);
@@ -437,7 +490,7 @@ public void onClick(final AjaxRequestTarget target, final AuthProfileTO ignore)
return panel;
}
- protected static final class AuthProfileProvider extends DirectoryDataProvider {
+ protected final class AuthProfileProvider extends DirectoryDataProvider {
private static final long serialVersionUID = -185944053385660794L;
@@ -449,12 +502,12 @@ private AuthProfileProvider(final int paginatorRows) {
@Override
public Iterator iterator(final long first, final long count) {
int page = ((int) first / paginatorRows);
- return AuthProfileRestClient.list((page < 0 ? 0 : page) + 1, paginatorRows).iterator();
+ return restClient.list((page < 0 ? 0 : page) + 1, paginatorRows).iterator();
}
@Override
public long size() {
- return AuthProfileRestClient.count();
+ return restClient.count();
}
@Override
@@ -462,39 +515,4 @@ public IModel model(final AuthProfileTO object) {
return new CompoundPropertyModel<>(object);
}
}
-
- private class CreateAuthProfileWizardBuilder extends AuthProfileWizardBuilder {
-
- private static final long serialVersionUID = 1L;
-
- private class NewAuthProfileStep extends AuthProfileWizardBuilder.Step {
-
- private static final long serialVersionUID = 1L;
-
- NewAuthProfileStep(final AuthProfileTO modelObject) {
- super(modelObject);
-
- AjaxTextFieldPanel owner = new AjaxTextFieldPanel(
- "bean", "owner", new PropertyModel<>(modelObject, "owner"));
- owner.addRequiredLabel();
- addOrReplace(owner);
- }
- }
-
- CreateAuthProfileWizardBuilder(final PageReference pageRef) {
- super(new AuthProfileTO(), new StepModel<>(), pageRef);
- }
-
- @Override
- protected WizardModel buildModelSteps(final AuthProfileTO modelObject, final WizardModel wizardModel) {
- wizardModel.add(new NewAuthProfileStep(modelObject));
- return wizardModel;
- }
-
- @Override
- protected Serializable onApplyInternal(final AuthProfileTO modelObject) {
- AuthProfileRestClient.create(modelObject);
- return modelObject;
- }
- }
}
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileItemDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileItemDirectoryPanel.java
index a125278ef7b..c1e46041630 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileItemDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileItemDirectoryPanel.java
@@ -25,6 +25,7 @@
import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.rest.AuthProfileRestClient;
@@ -32,7 +33,6 @@
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
import org.apache.syncope.client.ui.commons.Constants;
-import org.apache.syncope.client.ui.commons.DirectoryDataProvider;
import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.BaseBean;
@@ -52,19 +52,20 @@
public abstract class AuthProfileItemDirectoryPanel
extends DirectoryPanel.AuthProfileItemProvider, AuthProfileRestClient> {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 7640851594812655896L;
- private final BaseModal authProfileModal;
+ protected final BaseModal authProfileModal;
- private final AuthProfileTO authProfile;
+ protected final AuthProfileTO authProfile;
public AuthProfileItemDirectoryPanel(
final String id,
+ final AuthProfileRestClient restClient,
final BaseModal authProfileModal,
final AuthProfileTO authProfile,
final PageReference pageRef) {
- super(id, pageRef, false);
+ super(id, restClient, pageRef, false);
this.authProfileModal = authProfileModal;
this.authProfile = authProfile;
@@ -74,8 +75,6 @@ public AuthProfileItemDirectoryPanel(
enableUtilityButton();
setFooterVisibility(false);
- addNewItemPanelBuilder(new AuthProfileItemWizardBuilder(pageRef), true);
-
disableCheckBoxes();
initResultTable();
}
@@ -132,7 +131,7 @@ public void onClick(final AjaxRequestTarget target, final I ignore) {
public void onClick(final AjaxRequestTarget target, final I ignore) {
try {
getItems().remove(model.getObject());
- AuthProfileRestClient.update(authProfile);
+ restClient.update(authProfile);
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
target.add(container);
@@ -212,7 +211,7 @@ protected Serializable onApplyInternal(final I modelObject) {
getItems().remove(model.getInitialModelObject());
getItems().add(modelObject);
- AuthProfileRestClient.update(authProfile);
+ restClient.update(authProfile);
return modelObject;
}
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileWizardBuilder.java b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileWizardBuilder.java
index 08475c41109..41a5ff99586 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileWizardBuilder.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileWizardBuilder.java
@@ -29,7 +29,7 @@
public abstract class AuthProfileWizardBuilder extends BaseAjaxWizardBuilder {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -723891643398238220L;
protected final StepModel model;
@@ -46,7 +46,7 @@ protected WizardModel buildModelSteps(final T modelObject, final WizardModel wiz
protected static class StepModel extends Model {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -3300650579312254364L;
private T initialModelObject;
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/CASSPDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/CASSPDirectoryPanel.java
index da990b68976..64d4900d19f 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/CASSPDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/CASSPDirectoryPanel.java
@@ -19,6 +19,7 @@
package org.apache.syncope.client.console.clientapps;
import java.util.List;
+import org.apache.syncope.client.console.rest.ClientAppRestClient;
import org.apache.syncope.common.lib.to.CASSPClientAppTO;
import org.apache.syncope.common.lib.types.AMEntitlement;
import org.apache.syncope.common.lib.types.ClientAppType;
@@ -32,13 +33,20 @@ public class CASSPDirectoryPanel extends ClientAppDirectoryPanel(ClientAppType.CASSP, defaultItem, modal, pageRef), true);
+ addNewItemPanelBuilder(new ClientAppModalPanelBuilder<>(
+ ClientAppType.CASSP,
+ defaultItem,
+ modal,
+ policyRestClient,
+ clientAppRestClient,
+ realmRestClient,
+ pageRef),
+ true);
MetaDataRoleAuthorizationStrategy.authorize(addAjaxLink, RENDER, AMEntitlement.CLIENTAPP_CREATE);
initResultTable();
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
index 68ea7862192..208f4ce2c64 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.java
@@ -19,30 +19,38 @@
package org.apache.syncope.client.console.clientapps;
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.audit.AuditHistoryModal;
import org.apache.syncope.client.console.commons.AMConstants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.pages.BasePage;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.panels.ModalDirectoryPanel;
+import org.apache.syncope.client.console.rest.AuditRestClient;
import org.apache.syncope.client.console.rest.ClientAppRestClient;
+import org.apache.syncope.client.console.rest.PolicyRestClient;
+import org.apache.syncope.client.console.rest.RealmRestClient;
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
import org.apache.syncope.client.ui.commons.Constants;
-import org.apache.syncope.client.ui.commons.DirectoryDataProvider;
import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.ClientAppTO;
import org.apache.syncope.common.lib.types.AMEntitlement;
+import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.ClientAppType;
+import org.apache.syncope.common.lib.types.IdRepoEntitlement;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.event.Broadcast;
@@ -53,26 +61,43 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
public abstract class ClientAppDirectoryPanel
extends DirectoryPanel, ClientAppRestClient> {
private static final long serialVersionUID = 4100100988730985059L;
- private final ClientAppType type;
+ @SpringBean
+ protected PolicyRestClient policyRestClient;
+
+ @SpringBean
+ protected ClientAppRestClient clientAppRestClient;
+
+ @SpringBean
+ protected RealmRestClient realmRestClient;
+
+ @SpringBean
+ protected AuditRestClient auditRestClient;
+
+ protected final ClientAppType type;
protected final BaseModal propertiesModal;
- public ClientAppDirectoryPanel(final String id, final ClientAppType type, final PageReference pageRef) {
- super(id, pageRef, true);
+ protected final BaseModal historyModal;
+
+ public ClientAppDirectoryPanel(
+ final String id,
+ final ClientAppRestClient restClient,
+ final ClientAppType type,
+ final PageReference pageRef) {
+
+ super(id, restClient, pageRef, true);
this.type = type;
modal.addSubmitButton();
modal.size(Modal.Size.Large);
- modal.setWindowClosedCallback(target -> {
- updateResultTable(target);
- modal.show(false);
- });
+ setWindowClosedReloadCallback(modal, true);
setFooterVisibility(true);
propertiesModal = new BaseModal<>(Constants.OUTER) {
@@ -86,10 +111,14 @@ protected void onConfigure() {
}
};
propertiesModal.size(Modal.Size.Large);
- propertiesModal.setWindowClosedCallback(target -> propertiesModal.show(false));
+ setWindowClosedReloadCallback(propertiesModal);
addOuterObject(propertiesModal);
disableCheckBoxes();
+
+ historyModal = new BaseModal<>(Constants.OUTER);
+ historyModal.size(Modal.Size.Large);
+ addOuterObject(historyModal);
}
@Override
@@ -103,6 +132,8 @@ protected List> getColumns() {
Constants.NAME_FIELD_NAME, Constants.NAME_FIELD_NAME));
columns.add(new PropertyColumn<>(
new StringResourceModel("clientAppId", this), "clientAppId", "clientAppId"));
+ columns.add(new PropertyColumn<>(
+ new StringResourceModel("evaluationOrder", this), "evaluationOrder", "evaluationOrder"));
addCustomColumnFields(columns);
@@ -124,7 +155,7 @@ public ActionsPanel getActions(final IModel model) {
public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
send(ClientAppDirectoryPanel.this, Broadcast.EXACT,
new AjaxWizard.EditItemActionEvent<>(
- ClientAppRestClient.read(type, model.getObject().getKey()), target));
+ restClient.read(type, model.getObject().getKey()), target));
}
}, ActionLink.ActionType.EDIT, AMEntitlement.CLIENTAPP_UPDATE);
@@ -134,16 +165,72 @@ public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
@Override
public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
- model.setObject(ClientAppRestClient.read(type, model.getObject().getKey()));
+ model.setObject(restClient.read(type, model.getObject().getKey()));
+ modal.setContent(new UsernameAttributeProviderModalPanelBuilder<>(
+ type, model.getObject(), modal, clientAppRestClient, pageRef).
+ build(actualId, 1, AjaxWizard.Mode.EDIT));
+ modal.header(new Model<>(getString("usernameAttributeProviderConf.title", model)));
+ modal.show(true);
+ target.add(modal);
+ }
+ }, ActionLink.ActionType.COMPOSE, AMEntitlement.CLIENTAPP_UPDATE);
+
+ panel.add(new ActionLink<>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
+ model.setObject(restClient.read(type, model.getObject().getKey()));
target.add(propertiesModal.setContent(new ModalDirectoryPanel<>(
propertiesModal,
- new ClientAppPropertiesDirectoryPanel<>("panel", propertiesModal, type, model, pageRef),
+ new ClientAppPropertiesDirectoryPanel<>(
+ "panel", restClient, propertiesModal, type, model, pageRef),
pageRef)));
propertiesModal.header(new Model<>(getString("properties.title", model)));
propertiesModal.show(true);
}
}, ActionLink.ActionType.TYPE_EXTENSIONS, AMEntitlement.CLIENTAPP_UPDATE);
+ panel.add(new ActionLink<>() {
+
+ private static final long serialVersionUID = -5432034353017728756L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
+ model.setObject(restClient.read(type, model.getObject().getKey()));
+
+ target.add(historyModal.setContent(new AuditHistoryModal<>(
+ AuditElements.EventCategoryType.LOGIC,
+ "ClientAppLogic",
+ model.getObject(),
+ AMEntitlement.CLIENTAPP_UPDATE,
+ auditRestClient) {
+
+ private static final long serialVersionUID = -3712506022627033811L;
+
+ @Override
+ protected void restore(final String json, final AjaxRequestTarget target) {
+ try {
+ ClientAppTO updated = MAPPER.readValue(json, ClientAppTO.class);
+ restClient.update(type, updated);
+
+ SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
+ } catch (Exception e) {
+ LOG.error("While restoring ClientApp {}", ((ClientAppTO) model.getObject()).getKey(), e);
+ SyncopeConsoleSession.get().onException(e);
+ }
+ ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+ }
+ }));
+
+ historyModal.header(new Model<>(getString("auditHistory.title", new Model<>(model.getObject()))));
+
+ historyModal.show(true);
+ }
+ }, ActionLink.ActionType.VIEW_AUDIT_HISTORY, String.format("%s,%s", AMEntitlement.CLIENTAPP_READ,
+ IdRepoEntitlement.AUDIT_LIST));
+
panel.add(new ActionLink<>() {
private static final long serialVersionUID = -3722207913631435501L;
@@ -166,7 +253,8 @@ public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
public void onClick(final AjaxRequestTarget target, final ClientAppTO ignore) {
T clientAppTO = model.getObject();
try {
- ClientAppRestClient.delete(type, clientAppTO.getKey());
+ restClient.delete(type, clientAppTO.getKey());
+
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
target.add(container);
} catch (SyncopeClientException e) {
@@ -210,14 +298,14 @@ protected class ClientAppDataProvider extends DirectoryDataProvider {
@Override
public Iterator iterator(final long first, final long count) {
- List list = ClientAppRestClient.list(type);
+ List list = restClient.list(type);
list.sort(comparator);
return list.subList((int) first, (int) first + (int) count).iterator();
}
@Override
public long size() {
- return ClientAppRestClient.list(type).size();
+ return restClient.list(type).size();
}
@Override
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
index bcc20e79cf5..5276ae85b62 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
@@ -18,16 +18,21 @@
*/
package org.apache.syncope.client.console.clientapps;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Base64;
import java.util.Comparator;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import javax.ws.rs.core.MediaType;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.SyncopeWebApplication;
import org.apache.syncope.client.console.commons.RealmsUtils;
import org.apache.syncope.client.console.panels.AbstractModalPanel;
import org.apache.syncope.client.console.rest.ClientAppRestClient;
@@ -35,27 +40,35 @@
import org.apache.syncope.client.console.rest.RealmRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxSearchFieldPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.BinaryFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.PolicyRenderer;
import org.apache.syncope.client.ui.commons.Constants;
import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxCheckBoxPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxNumberFieldPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPalettePanel;
-import org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.client.ui.commons.pages.BaseWebPage;
import org.apache.syncope.client.ui.commons.panels.WizardModalPanel;
import org.apache.syncope.client.ui.commons.wizards.AbstractModalPanelBuilder;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
-import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.OIDCScopeConstants;
import org.apache.syncope.common.lib.policy.PolicyTO;
import org.apache.syncope.common.lib.to.ClientAppTO;
+import org.apache.syncope.common.lib.to.OIDCRPClientAppTO;
import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.ClientAppType;
+import org.apache.syncope.common.lib.types.LogoutType;
+import org.apache.syncope.common.lib.types.OIDCApplicationType;
+import org.apache.syncope.common.lib.types.OIDCClientAuthenticationMethod;
import org.apache.syncope.common.lib.types.OIDCGrantType;
import org.apache.syncope.common.lib.types.OIDCResponseType;
import org.apache.syncope.common.lib.types.OIDCSubjectType;
+import org.apache.syncope.common.lib.types.OIDCTokenEncryptionAlg;
+import org.apache.syncope.common.lib.types.OIDCTokenEncryptionEncoding;
+import org.apache.syncope.common.lib.types.OIDCTokenSigningAlg;
import org.apache.syncope.common.lib.types.PolicyType;
import org.apache.syncope.common.lib.types.SAML2SPNameId;
import org.apache.syncope.common.lib.types.XmlSecAlgorithm;
@@ -77,49 +90,75 @@ public class ClientAppModalPanelBuilder extends AbstractM
private static final long serialVersionUID = 5945391813567245081L;
- private final IModel