mirror of https://github.com/jacekkow/keycloak-protocol-cas

Jacek Kowalski
13 hours ago fc40907a5866310f620d22c7f76ba5c148fafc07
Return CAS error instead of HTTP 500 on malformed tickets
2 files modified
23 ■■■■■ changed files
integrationTest/suite.sh 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/keycloak/protocol/cas/endpoints/AbstractValidateEndpoint.java 9 ●●●●● patch | view | raw | blame | history
integrationTest/suite.sh
@@ -80,6 +80,20 @@
fi
echo
echo "Testing CAS 2.0 - malformed ticket..."
response=$(curl --silent --write-out '%{http_code}' --output /dev/null "${keycloak_cas_url}/serviceValidate?service=http://localhost&ticket=ST-x--zz--y")
if [ "$response" != "400" ]; then
    echo "Malformed ticket returned HTTP ${response} instead of 400"
    exit 1
fi
echo "Testing CAS 2.0 - proxyValidate without ticket..."
response=$(curl --silent --write-out '%{http_code}' --output /dev/null "${keycloak_cas_url}/proxyValidate?service=http://localhost")
if [ "$response" != "400" ]; then
    echo "Missing ticket returned HTTP ${response} instead of 400"
    exit 1
fi
# SAML 1.1
echo "Testing SAML 1.1..."
ticket=$(get_ticket SAML)
src/main/java/org/keycloak/protocol/cas/endpoints/AbstractValidateEndpoint.java
@@ -330,7 +330,12 @@
    }
    private String hexDecode(String hex) {
        byte[] bytes = HexFormat.of().parseHex(hex);
        return new String(bytes, StandardCharsets.US_ASCII);
        try {
            byte[] bytes = HexFormat.of().parseHex(hex);
            return new String(bytes, StandardCharsets.US_ASCII);
        } catch (IllegalArgumentException e) {
            event.error(Errors.INVALID_CODE);
            throw new CASValidationException(CASErrorCode.INVALID_TICKET_SPEC, "Invalid format of the code", Response.Status.BAD_REQUEST);
        }
    }
}