From de93e7ba5f2d393d062ab74e7fb1a038f7c42c01 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Wed, 09 Mar 2022 00:07:09 +0000 Subject: [PATCH] Update to Keycloak 17.0.0 --- .github/workflows/test.yml | 64 ++++++++++----------- .github/workflows/release.yml | 68 +++++++++++----------- .github/workflows/update-deps.yml | 9 +- pom.xml | 4 README.md | 9 ++- integrationTest/suite.sh | 2 6 files changed, 78 insertions(+), 78 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6a6c638..d3df9ce 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,12 +12,14 @@ steps: - id: checkout name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - - name: Install Java and Maven - uses: actions/setup-java@v1 + - id: java + name: Install Java and Maven + uses: actions/setup-java@v2 with: - java-version: 8 + distribution: zulu + java-version: 11 - id: vars name: Get project variables @@ -36,10 +38,11 @@ mvn -B test package - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 with: name: jar path: target/${{ steps.vars.outputs.artifactId }}-${{ steps.vars.outputs.projectVersion }}.jar + if-no-files-found: error outputs: artifact_id: ${{ steps.vars.outputs.artifactId }} @@ -51,16 +54,6 @@ name: Test runs-on: ubuntu-latest needs: build - services: - keycloak: - image: quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }} - env: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - ports: - - 8080:8080 - volumes: - - '${{ github.workspace }}:/workspace' steps: - id: checkout name: Checkout code @@ -68,37 +61,42 @@ - id: download_artifact name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v3 with: name: jar + + - id: create_container + name: Create Keycloak container + run: | + docker run -i -t -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 --name keycloak "quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }}" start-dev - id: deploy name: Deploy artifact run: | - CONTAINER="${{ job.services.keycloak.id }}" + CONTAINER="keycloak" NAME="${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar" - FILE="/opt/jboss/keycloak/standalone/deployments/${NAME}" - docker cp "jar/${NAME}" "${CONTAINER}:/tmp/" - docker exec -i "${CONTAINER}" /bin/bash <<EOF - cp "/tmp/${NAME}" "${FILE}" - for i in {1..60}; do - echo -n . - [ -f "${FILE}.deployed" ] && echo && echo "Deployment succeeded!" && exit 0 - [ -f "${FILE}.failed" ] && echo && echo "Deployment failed!" && exit 1 - sleep 1 - done - echo && echo "Deployment timeout!" && exit 1 - EOF + FILE="/opt/keycloak/providers/${NAME}" + docker cp "${NAME}" "${CONTAINER}:${FILE}" + docker restart "${CONTAINER}" + for i in {1..60}; do + if curl --silent --max-time 1 -o /dev/null http://localhost:8080; then + echo && echo "Deployment succeeded!" && exit 0 + else + sleep 1 + echo -n "." + fi + done + echo && echo "Deployment timeout!" && exit 1 - id: configure_keycloak name: Configure Keycloak run: | - CONTAINER="${{ job.services.keycloak.id }}" + CONTAINER="keycloak" docker exec -i "${CONTAINER}" /bin/bash <<EOF - /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin - /opt/jboss/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ + /opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin --password admin + /opt/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ -s 'redirectUris=["http://localhost/*"]' -s baseUrl=http://localhost -s adminUrl=http://localhost - /opt/jboss/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas + /opt/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas EOF - id: run_tests @@ -113,7 +111,7 @@ steps: - id: download_artifact name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v3 with: name: jar @@ -135,6 +133,6 @@ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: jar/${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar + asset_path: ${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar asset_name: ${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar asset_content_type: application/java-archive diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c4d543b..6c044b4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,12 +10,14 @@ steps: - id: checkout name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - - name: Install Java and Maven - uses: actions/setup-java@v1 + - id: java + name: Install Java and Maven + uses: actions/setup-java@v2 with: - java-version: 8 + distribution: zulu + java-version: 11 - id: vars name: Get project variables @@ -34,10 +36,11 @@ mvn -B test package - name: Upload artifact - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 with: name: jar path: target/${{ steps.vars.outputs.artifactId }}-${{ steps.vars.outputs.projectVersion }}.jar + if-no-files-found: error outputs: artifact_id: ${{ steps.vars.outputs.artifactId }} @@ -49,16 +52,6 @@ name: Test runs-on: ubuntu-latest needs: build - services: - keycloak: - image: quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }} - env: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - ports: - - 8080:8080 - volumes: - - '${{ github.workspace }}:/workspace' steps: - id: checkout name: Checkout code @@ -66,37 +59,42 @@ - id: download_artifact name: Download artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v3 with: name: jar + + - id: create_container + name: Create Keycloak container + run: | + docker run -i -t -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 --name keycloak "quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }}" start-dev - id: deploy name: Deploy artifact run: | - CONTAINER="${{ job.services.keycloak.id }}" + CONTAINER="keycloak" NAME="${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar" - FILE="/opt/jboss/keycloak/standalone/deployments/${NAME}" - docker cp "jar/${NAME}" "${CONTAINER}:/tmp/" - docker exec -i "${CONTAINER}" /bin/bash <<EOF - cp "/tmp/${NAME}" "${FILE}" - for i in {1..60}; do - echo -n . - [ -f "${FILE}.deployed" ] && echo && echo "Deployment succeeded!" && exit 0 - [ -f "${FILE}.failed" ] && echo && echo "Deployment failed!" && exit 1 - sleep 1 - done - echo && echo "Deployment timeout!" && exit 1 - EOF + FILE="/opt/keycloak/providers/${NAME}" + docker cp "${NAME}" "${CONTAINER}:${FILE}" + docker restart "${CONTAINER}" + for i in {1..60}; do + if curl --silent --max-time 1 -o /dev/null http://localhost:8080; then + echo && echo "Deployment succeeded!" && exit 0 + else + sleep 1 + echo -n "." + fi + done + echo && echo "Deployment timeout!" && exit 1 - id: configure_keycloak name: Configure Keycloak run: | - CONTAINER="${{ job.services.keycloak.id }}" + CONTAINER="keycloak" docker exec -i "${CONTAINER}" /bin/bash <<EOF - /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin - /opt/jboss/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ + /opt/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080 --realm master --user admin --password admin + /opt/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ -s 'redirectUris=["http://localhost/*"]' -s baseUrl=http://localhost -s adminUrl=http://localhost - /opt/jboss/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas + /opt/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas EOF - id: run_tests diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml index dd8e29f..2636fdd 100644 --- a/.github/workflows/update-deps.yml +++ b/.github/workflows/update-deps.yml @@ -12,13 +12,14 @@ steps: - id: checkout name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - id: java name: Install Java and Maven - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: - java-version: 8 + distribution: zulu + java-version: 11 - id: update_keycloak name: Update Keycloak @@ -87,7 +88,7 @@ - id: create_pull_request_default_token name: Create pull request if: steps.check_branch.outputs.commit == '' - uses: actions/github-script@0.9.0 + uses: actions/github-script@v6 with: github-token: ${{ env.GH_TOKEN }} script: | diff --git a/README.md b/README.md index 434751a..ac27566 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,13 @@ ## Installation -Installation of a compatible plugin version is simple and can be done without a Keycloak server restart. +Quarkus is the default distribution method of Keycloak 17.0.0 and newer. For legacy installations using WildFly, please refer to the [old README](https://github.com/jacekkow/keycloak-protocol-cas/blob/16.1.1/README.md). 1. Download the latest release compatible with your Keycloak version from the [releases page](https://github.com/jacekkow/keycloak-protocol-cas/releases). -2. Copy the JAR file into the `standalone/deployments` directory in your Keycloak server's root. +2. Put the downloaded JAR file into the `providers/` directory inside Keycloak installation folder. +3. Stop the Keycloak server. +4. (Re-)build the installation using `kc.sh build` command. +5. Start the Keycloak: `kc.sh start` Remember to update plugin artifact with each Keycloak server upgrade! @@ -43,7 +46,7 @@ As there is no client ID indication in protocol, the client will be identified by the redirect URIs configured in Keycloak. -Enter `https://your.keycloak.host/auth/realms/master/protocol/cas` as the CAS URL into your SP. +Enter `https://your.keycloak.host/realms/master/protocol/cas` as the CAS URL into your SP. This assumes that you use the default `master` realm - if not, modify the URL accordingly. Note that some client implementations require you to enter login and validate URLs, not CAS URL! diff --git a/integrationTest/suite.sh b/integrationTest/suite.sh index 8b1507c..0270e51 100755 --- a/integrationTest/suite.sh +++ b/integrationTest/suite.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -keycloak_cas_url='http://localhost:8080/auth/realms/master/protocol/cas' +keycloak_cas_url='http://localhost:8080/realms/master/protocol/cas' action_pattern='action="([^"]+)"' ticket_pattern='Location: .*\?ticket=(ST-[-A-Za-z0-9_.=]+)' diff --git a/pom.xml b/pom.xml index 1e49744..d6a685e 100644 --- a/pom.xml +++ b/pom.xml @@ -22,13 +22,13 @@ <groupId>org.keycloak</groupId> <artifactId>keycloak-protocol-cas</artifactId> - <version>16.1.1</version> + <version>17.0.0</version> <name>Keycloak CAS Protocol</name> <description /> <properties> <keycloak.version>${project.version}</keycloak.version> - <jboss.logging.version>3.4.1.Final</jboss.logging.version> + <jboss.logging.version>3.4.3.Final</jboss.logging.version> <jboss.logging.tools.version>2.2.1.Final</jboss.logging.tools.version> <junit.version>4.13.2</junit.version> -- Gitblit v1.9.1