feat: add local provider account connector

This commit is contained in:
thanhnv
2026-07-10 23:05:24 +09:00
parent adce7717f7
commit 7cb592a32f
9 changed files with 380 additions and 3 deletions
@@ -14,9 +14,18 @@ INFRA="$SCRIPT_DIR/infra-lab.sh"
CP_COMPOSE="$ROOT/docker-compose.control-panel.local.yml"
LOCAL_ENV="$ROOT/infra/local-prod/casan.local.env"
TLS_DIR="$ROOT/tmp/control-panel-local/tls"
AUTH_BRIDGE_DIR="$ROOT/tmp/control-panel-local/auth-bridge"
AUTH_BRIDGE_TOKEN_FILE="$AUTH_BRIDGE_DIR/token"
AUTH_BRIDGE_PID_FILE="$AUTH_BRIDGE_DIR/bridge.pid"
AUTH_BRIDGE_LOG="$AUTH_BRIDGE_DIR/bridge.log"
AUTH_BRIDGE="$ROOT/packages/casan-control-panel/scripts/provider-auth-bridge.py"
CMD="${1:-status}"
cp_compose() {
if [[ -f "$AUTH_BRIDGE_TOKEN_FILE" ]]; then
export CASAN_AUTH_BRIDGE_TOKEN
CASAN_AUTH_BRIDGE_TOKEN="$(tr -d '\r\n' < "$AUTH_BRIDGE_TOKEN_FILE")"
fi
if [[ -f "$LOCAL_ENV" ]]; then
docker compose --env-file "$LOCAL_ENV" -f "$CP_COMPOSE" "$@"
else
@@ -24,6 +33,31 @@ cp_compose() {
fi
}
start_auth_bridge() {
mkdir -p "$AUTH_BRIDGE_DIR"
if [[ ! -s "$AUTH_BRIDGE_TOKEN_FILE" ]]; then
openssl rand -hex 32 > "$AUTH_BRIDGE_TOKEN_FILE"
chmod 600 "$AUTH_BRIDGE_TOKEN_FILE"
fi
if [[ -f "$AUTH_BRIDGE_PID_FILE" ]] && kill -0 "$(cat "$AUTH_BRIDGE_PID_FILE")" 2>/dev/null; then
return 0
fi
[[ -f "$AUTH_BRIDGE" ]] || { echo "CASAN_AUTH_BRIDGE_MISSING" >&2; return 1; }
nohup python3 "$AUTH_BRIDGE" --bind 0.0.0.0 --port 20130 --token-file "$AUTH_BRIDGE_TOKEN_FILE" > "$AUTH_BRIDGE_LOG" 2>&1 &
echo "$!" > "$AUTH_BRIDGE_PID_FILE"
chmod 600 "$AUTH_BRIDGE_PID_FILE" "$AUTH_BRIDGE_LOG" 2>/dev/null || true
wait_url "http://127.0.0.1:20130/healthz"
}
stop_auth_bridge() {
if [[ -f "$AUTH_BRIDGE_PID_FILE" ]]; then
local pid
pid="$(cat "$AUTH_BRIDGE_PID_FILE")"
kill "$pid" 2>/dev/null || true
rm -f "$AUTH_BRIDGE_PID_FILE"
fi
}
need_docker() {
command -v docker >/dev/null 2>&1 || { echo "CASAN_LOCAL_DOCKER_MISSING" >&2; exit 1; }
docker compose version >/dev/null 2>&1 || { echo "CASAN_LOCAL_COMPOSE_MISSING" >&2; exit 1; }
@@ -53,6 +87,7 @@ case "$CMD" in
need_docker
bash "$INFRA" start
ensure_tls
start_auth_bridge
cp_compose up -d --build
wait_url "http://127.0.0.1:18082/healthz"
# The unauthenticated console intentionally redirects, so test the OIDC IdP
@@ -65,6 +100,7 @@ case "$CMD" in
stop)
need_docker
cp_compose down --remove-orphans
stop_auth_bridge
bash "$INFRA" stop
echo "CASAN_LOCAL_FULL_STOPPED"
;;
@@ -74,12 +110,18 @@ case "$CMD" in
bash "$INFRA" status
echo "=== control panel ==="
cp_compose ps
if [[ -f "$AUTH_BRIDGE_PID_FILE" ]] && kill -0 "$(cat "$AUTH_BRIDGE_PID_FILE")" 2>/dev/null; then
echo "provider_auth_bridge=running pid=$(cat "$AUTH_BRIDGE_PID_FILE")"
else
echo "provider_auth_bridge=stopped"
fi
;;
verify)
need_docker
bash "$INFRA" verify
cp_compose ps
wait_url "http://127.0.0.1:18082/healthz"
wait_url "http://127.0.0.1:20130/healthz"
echo "CASAN_LOCAL_FULL_VERIFY_PASS"
;;
smoke)