blob: 768c7844a8b37e8cd781863d86ceda7a7c74629e [file] [log] [blame]
#!/bin/sh
set -eu
kca() {
/opt/keycloak/bin/kcadm.sh "$@"
}
kca_cred() {
kca config credentials \
--server http://keycloak:8080 \
--realm master \
--user ${KEYCLOAK_ADMIN} \
--password ${KEYCLOAK_ADMIN_PASSWORD}
}
secret() {
seed=$(cat /run/secrets/seed)
printf "%s:%40s" "${seed}" "$*" | sha256sum | sed 's/[[:space:]].*//'
}
i=15
sleep ${i} # give it a moment to come up
while kca_cred 2>&1 | grep -q 'Connection refused\|Bad Gateway'; do
if [ ${i} -eq 60 ]; then
echo "ERROR: Couldn't login to Keycloak after ${i}s."
exit 1
fi
echo Waiting...
sleep 1
i=$((i+1))
done
if ! kca_cred; then
echo "ERROR: Failed to login to Keycloak."
exit 2
fi
REALM=${SA_REALM:-sourcearcade}
if kca get realms/${REALM} --fields id >/dev/null 2>&1; then
echo Realm ${REALM} already set up.
else
kca create realms -f - <<EOF
{
"realm" : "${REALM}",
"enabled" : true,
"sslRequired" : "all",
"registrationAllowed" : true,
"resetPasswordAllowed" : true,
"rememberMe" : true,
"verifyEmail" : true,
"smtpServer" : {
"host" : "mail.${SA_PUBLIC_DOMAIN_NAME}",
"port" : "465",
"auth" : true,
"ssl" : true,
"user" : "keycloak@${SA_PUBLIC_DOMAIN_NAME}",
"password" : "$(secret mail:keycloak)",
"from" : "keycloak@${SA_PUBLIC_DOMAIN_NAME}",
"fromDisplayName" : "SourceArcade"
},
"identityProviders" : [ {
"alias" : "github",
"providerId" : "github",
"enabled" : true,
"config" : {
"clientId" : "${GITHUB_OAUTH_CLIENT_ID}",
"clientSecret" : "${GITHUB_OAUTH_CLIENT_SECRET}"
}
} ]
}
EOF
ac_id=$(kca get clients -r ${REALM} -q clientId=account-console --fields id \
| sed -n 's/.*"id" : "\(.*\)".*/\1/p')
kca update clients/${ac_id} -r ${REALM} -s webOrigins='[ "+" ]'
echo New realm ${REALM} set up.
fi
if kca get clients -r ${REALM} -q clientId=gerrit --fields clientId | grep -q gerrit; then
echo Gerrit client in realm ${REALM} already set up.
else
kca create clients -r ${REALM} -f - <<EOF
{
"clientId" : "gerrit",
"name" : "Gerrit",
"enabled" : true,
"description" : "SourceArcade review platform",
"rootUrl" : "https://review.${SA_PUBLIC_DOMAIN_NAME}",
"clientAuthenticatorType" : "client-secret",
"secret" : "$(secret kc:gerrit)",
"protocol" : "openid-connect",
"directAccessGrantsEnabled" : false
}
EOF
echo Gerrit client in realm ${REALM} set up.
fi