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