Files
sicabe-core/deploy/scripts/print-keycloak-requirements.sh
T

82 lines
4.3 KiB
Bash
Raw Normal View History

2026-10-09 02:35:14 +07:00
#!/usr/bin/env bash
# =============================================================================
# eBdesk SiCABE — print-keycloak-requirements.sh
# -----------------------------------------------------------------------------
# Mencetak KEBUTUHAN Keycloak (nilai konkret dari .env) untuk diserahkan ke
# administrator Keycloak — pasangan dari docs/keycloak-existing-requirements.md.
#
# Read-only: tidak mengubah apa pun; hanya menampilkan.
#
# Usage:
# ./scripts/print-keycloak-requirements.sh
# ./scripts/print-keycloak-requirements.sh --env-file generated/host-control/.env
# ./scripts/print-keycloak-requirements.sh --mask # sembunyikan client secret
#
# Keluaran bisa disalin ke tiket/email ke pengelola Keycloak.
# =============================================================================
set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=../lib/common.sh
source "${SCRIPT_DIR}/lib/common.sh"
# shellcheck source=../config/environment.defaults.sh
source "${SCRIPT_DIR}/config/environment.defaults.sh"
MASK=0
ARGS=()
for _a in "$@"; do
case "${_a}" in
--mask) MASK=1 ;;
*) ARGS+=("${_a}") ;;
esac
done
sicabe_load_env "${SCRIPT_DIR}" "${ARGS[@]}"
REALM="${SICABE_REALM:-sicabe}"
KC_PUB="${KEYCLOAK_PUBLIC_URL:-http://localhost:${KEYCLOAK_PORT:-12080}}"
SSL_REQ="${KEYCLOAK_SSL_REQUIRED:-external}"
SR_HTTP_PORT="${STARROCKS_HTTP_PORT:-12030}"
# Tampilkan secret: nilai asli, atau '********' bila --mask.
show_secret() { # <value> <dev-default>
local v="${1:-}" d="${2:-}"
if [[ -z "${v}" ]]; then echo "(KOSONG!)"; return; fi
if [[ "${MASK}" == "1" ]]; then echo "********"; return; fi
if [[ "${v}" == "${d}" ]]; then echo "${v} ← DEFAULT DEV, ganti di produksi"; else echo "${v}"; fi
}
printf '%s\n' "================================================================================"
printf '%s\n' " KEBUTUHAN KEYCLOAK (existing) — dari: ${SICABE_ENV_FILE:-${SCRIPT_DIR}/.env}"
printf '%s\n' "================================================================================"
printf ' Realm : %s\n' "${REALM}"
printf ' Issuer : %s/realms/%s\n' "${KC_PUB}" "${REALM}"
printf ' sslRequired : %s (external bila ada TLS; none utk http lokal)\n' "${SSL_REQ}"
printf '\n'
printf '%s\n' " Realm roles : admin engineer analyst viewer"
printf '%s\n' " Users (opsional) : admin engineer analyst viewer"
printf '%s\n' " (atau petakan user organisasi ke 4 role di atas)"
printf '\n'
printf '%s\n' " OIDC clients — SEMUA: type=OpenID Connect, client authentication ON,"
printf '%s\n' " Standard flow ON, Service accounts ON (publicClient=false)"
printf '\n'
printf ' %-13s %-34s %s\n' "clientId" "client secret (harus sama)" "redirect URI"
printf ' %-13s %-34s %s\n' "------------" "---------------------------" "--------------------------"
printf ' %-13s %-34s %s/*\n' "trino" "$(show_secret "${TRINO_CLIENT_SECRET:-}" "trino-secret")" "${TRINO_PUBLIC_URL:-}"
printf ' %-13s %-34s %s\n' "starrocks" "$(show_secret "${STARROCKS_CLIENT_SECRET:-}" "starrocks-secret")" "http://<host-starrocks>:${SR_HTTP_PORT}/api/oauth2"
printf ' %-13s %-34s %s/*\n' "airflow" "$(show_secret "${AIRFLOW_CLIENT_SECRET:-}" "airflow-secret")" "${AIRFLOW_PUBLIC_URL:-}"
printf ' %-13s %-34s %s/*\n' "openmetadata" "$(show_secret "${OPENMETADATA_CLIENT_SECRET:-}" "om-secret")" "${OPENMETADATA_PUBLIC_URL:-}"
printf ' %-13s %-34s %s/*\n' "grafana" "$(show_secret "${GRAFANA_CLIENT_SECRET:-}" "grafana-secret")" "${GRAFANA_PUBLIC_URL:-}"
printf '\n'
printf '%s\n' " Semua client juga sertakan: http://localhost:* dan https://localhost:*"
printf '\n'
printf '%s\n' " Protocol mapper (WAJIB tiap client): Audience 'account' (oidc-audience-mapper)"
printf '%s\n' " → Tanpa ini Trino MENOLAK token (Trino memverifikasi aud=account)."
printf '%s\n' " StarRocks: tambahan audience 'starrocks' (required_audience=starrocks)."
printf '\n'
printf '%s\n' " Kembalikan ke SiCABE: nama realm, issuer URL, dan 5 client secret di atas."
if [[ "${MASK}" == "0" ]]; then
printf '\n'
printf '%s\n' " ⚠ KELUARAN MEMUAT SECRET — kirim lewat kanal aman; jangan tempel di tiket publik."
fi
printf '%s\n' "================================================================================"