71 lines
1.9 KiB
Bash
Executable File
71 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
if [ ! -f .env ]; then
|
|
echo "missing .env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -a
|
|
. ./.env
|
|
set +a
|
|
|
|
keycloak_url="${KEYCLOAK_URL:-http://localhost:8080}"
|
|
|
|
admin_token="$(
|
|
curl -fsS \
|
|
-d client_id=admin-cli \
|
|
-d grant_type=password \
|
|
-d "username=$KC_BOOTSTRAP_ADMIN_USERNAME" \
|
|
-d "password=$KC_BOOTSTRAP_ADMIN_PASSWORD" \
|
|
"$keycloak_url/realms/master/protocol/openid-connect/token" |
|
|
jq -er .access_token
|
|
)"
|
|
|
|
idp="$(
|
|
curl -fsS \
|
|
-H "Authorization: Bearer $admin_token" \
|
|
"$keycloak_url/admin/realms/keycloak-patterns/identity-provider/instances/mock-google"
|
|
)"
|
|
|
|
printf '%s' "$idp" | jq -e '
|
|
.providerId == "oidc" and
|
|
.enabled == true and
|
|
.trustEmail == false and
|
|
.config.clientId == "mock-google-broker" and
|
|
.config.defaultScope == "openid profile email" and
|
|
.config.syncMode == "IMPORT" and
|
|
.config.validateSignature == "true"
|
|
' >/dev/null
|
|
|
|
client="$(
|
|
curl -fsS \
|
|
-H "Authorization: Bearer $admin_token" \
|
|
"$keycloak_url/admin/realms/mock-google/clients?clientId=mock-google-broker"
|
|
)"
|
|
|
|
printf '%s' "$client" | jq -e '
|
|
length == 1 and
|
|
.[0].publicClient == false and
|
|
(.[0].redirectUris | index(
|
|
"http://localhost:8080/realms/keycloak-patterns/broker/mock-google/endpoint"
|
|
)) != null
|
|
' >/dev/null
|
|
|
|
location="$(
|
|
curl -sS -D - -o /dev/null \
|
|
"$keycloak_url/realms/keycloak-patterns/protocol/openid-connect/auth?client_id=spa-public&redirect_uri=http%3A%2F%2Flocalhost%3A8088%2F&response_type=code&scope=openid&code_challenge=K2qUEfBl-nQvF2gB4dNxC2zYVwZc1CVnZb5CsX2L7fI&code_challenge_method=S256&kc_idp_hint=mock-google" |
|
|
awk 'BEGIN { IGNORECASE=1 } /^Location:/ { print $2 }' |
|
|
tr -d '\r'
|
|
)"
|
|
|
|
case "$location" in
|
|
"$keycloak_url/realms/keycloak-patterns/broker/mock-google/login"*) ;;
|
|
*)
|
|
echo "broker did not redirect to the controllable OIDC provider: $location" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "Google broker contract verified with the local mock OIDC realm"
|