From fb26284c00e09e656732eb7ca4570afd052e0067 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Fri, 21 Jun 2024 11:47:01 +0000
Subject: [PATCH] Improve error reporting in CAS ticket validation

---
 src/main/java/org/keycloak/protocol/cas/installation/KeycloakCASClientInstallation.java |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/keycloak/protocol/cas/installation/KeycloakCASClientInstallation.java b/src/main/java/org/keycloak/protocol/cas/installation/KeycloakCASClientInstallation.java
index eb0785d..1a99abf 100644
--- a/src/main/java/org/keycloak/protocol/cas/installation/KeycloakCASClientInstallation.java
+++ b/src/main/java/org/keycloak/protocol/cas/installation/KeycloakCASClientInstallation.java
@@ -1,5 +1,8 @@
 package org.keycloak.protocol.cas.installation;
 
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.UriBuilder;
 import org.keycloak.Config;
 import org.keycloak.models.ClientModel;
 import org.keycloak.models.KeycloakSession;
@@ -7,16 +10,21 @@
 import org.keycloak.models.RealmModel;
 import org.keycloak.protocol.ClientInstallationProvider;
 import org.keycloak.protocol.cas.CASLoginProtocol;
+import org.keycloak.services.resources.RealmsResource;
 
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
 import java.net.URI;
 
 public class KeycloakCASClientInstallation implements ClientInstallationProvider {
 
     @Override
     public Response generateInstallation(KeycloakSession session, RealmModel realm, ClientModel client, URI baseUri) {
-        return Response.ok("{}", MediaType.TEXT_PLAIN_TYPE).build();
+        UriBuilder bindingUrlBuilder = UriBuilder.fromUri(baseUri);
+        String bindingUrl = RealmsResource.protocolUrl(bindingUrlBuilder)
+                .build(realm.getName(), CASLoginProtocol.LOGIN_PROTOCOL).toString();
+        String description = "CAS Server URL: " + bindingUrl + "\n" +
+                "CAS Protocol: CAS 2.0/3.0, SAML 1.1\n" +
+                "Use CAS REST API: false (unsupported)";
+        return Response.ok(description, MediaType.TEXT_PLAIN_TYPE).build();
     }
 
     @Override
@@ -26,12 +34,12 @@
 
     @Override
     public String getDisplayType() {
-        return "Keycloak CAS JSON";
+        return "Plain CAS configuration";
     }
 
     @Override
     public String getHelpText() {
-        return "keycloak.json file used by the Keycloak CAS client adapter to configure clients.  This must be saved to a keycloak.json file and put in your WEB-INF directory of your WAR file.  You may also want to tweak this file after you download it.";
+        return "CAS configuration properties required by CAS clients. Enter the values shown below into the configuration dialog of your client SP.";
     }
 
     @Override
@@ -56,7 +64,7 @@
 
     @Override
     public String getId() {
-        return "keycloak-cas-keycloak-json";
+        return "keycloak-cas-text";
     }
 
     @Override
@@ -66,12 +74,12 @@
 
     @Override
     public String getFilename() {
-        return "keycloak.json";
+        return "keycloak-cas.txt";
     }
 
     @Override
     public String getMediaType() {
-        return MediaType.APPLICATION_JSON;
+        return MediaType.TEXT_PLAIN;
     }
 
 }

--
Gitblit v1.9.1