Files
tdc114plus/scripts/manual-postlogin-run.sh
T

141 lines
4.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
LOCAL_ENV_FILE="${TDC114_SMOKE_ENV_FILE:-$ROOT_DIR/scripts/.env.android-device.local}"
if [ -f "$LOCAL_ENV_FILE" ]; then
# shellcheck disable=SC1090
source "$LOCAL_ENV_FILE"
fi
APP_API_BASE="${TDC114_API_BASE:-}"
if [ -z "$APP_API_BASE" ]; then
echo "TDC114_API_BASE is required." >&2
exit 64
fi
if [ -z "${TDC114_ADB_CONNECT_ADDRESS:-}" ] && [ -z "${ADB_SERVER_SOCKET:-}" ]; then
echo "Either ADB_SERVER_SOCKET or TDC114_ADB_CONNECT_ADDRESS is required." >&2
echo "Example: ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 TDC114_FLUTTER_DEVICE_ID=ce091719b0a418620d7e $0" >&2
exit 64
fi
if [ -n "${ADB_SERVER_SOCKET:-}" ] && [ -z "${TDC114_ADB_CONNECT_ADDRESS:-}" ] && [ -z "${TDC114_FLUTTER_DEVICE_ID:-}" ]; then
echo "TDC114_FLUTTER_DEVICE_ID is required when using ADB_SERVER_SOCKET." >&2
echo "Example: TDC114_FLUTTER_DEVICE_ID=ce091719b0a418620d7e" >&2
exit 64
fi
SMOKE_PHONE="${TDC114_SMOKE_PHONE:-01091365338}"
BOOTSTRAP_API_BASE="${TDC114_SESSION_BOOTSTRAP_API_BASE:-$APP_API_BASE}"
BOOTSTRAP_API_BASE="${BOOTSTRAP_API_BASE//10.0.2.2/127.0.0.1}"
BOOTSTRAP_API_BASE="${BOOTSTRAP_API_BASE//localhost/127.0.0.1}"
DEVICE_ID="${TDC114_FLUTTER_DEVICE_ID:-$TDC114_ADB_CONNECT_ADDRESS}"
SKIP_SESSION_BOOTSTRAP="${TDC114_SKIP_SESSION_BOOTSTRAP:-false}"
tmp_body="$(mktemp)"
tmp_err="$(mktemp)"
trap 'rm -f "$tmp_body" "$tmp_err"' EXIT
DEFINE_ARGS=(
"--dart-define=TDC114_API_BASE=${APP_API_BASE}"
)
append_optional_define() {
local key="$1"
local value="${!key:-}"
if [ -n "$value" ]; then
DEFINE_ARGS+=("--dart-define=${key}=${value}")
fi
}
append_optional_define "SSO_BASE_URL"
append_optional_define "TDC114_AUTH_API_BASE"
append_optional_define "TDC114_DIRECTORY_API_BASE"
append_optional_define "TDC114_ORGANIZATION_API_BASE"
append_optional_define "TDC114_ORG_CONTEXT_API_BASE"
append_optional_define "TDC114_ORG_CONTEXT_TENANT_SLUG"
if [ "$SKIP_SESSION_BOOTSTRAP" = "1" ] || [ "$SKIP_SESSION_BOOTSTRAP" = "true" ]; then
echo "Skipping session bootstrap; app will open its normal login flow." >&2
else
login_payload="$(printf '{"phoneNumber":"%s","device":{"platform":"android","appVersion":"manual-smoke","deviceName":"android-manual"}}' "$SMOKE_PHONE")"
set +e
http_code="$(
curl -sS \
-o "$tmp_body" \
-w '%{http_code}' \
-H 'content-type: application/json' \
-d "$login_payload" \
"${BOOTSTRAP_API_BASE%/}/api/v1/tdc114plus/auth/phone-login" 2>"$tmp_err"
)"
curl_status=$?
set -e
if [ "$curl_status" -eq 0 ] && [ "$http_code" = "200" ]; then
mapfile -t exported < <(
python3 - "$tmp_body" <<'PY'
import json
import sys
with open(sys.argv[1], 'r', encoding='utf-8') as fh:
data = json.load(fh)
user = data.get("user") or {}
fields = {
"TDC114_PREAUTH_TOKEN": data.get("token", ""),
"TDC114_PREAUTH_EXPIRES_AT": data.get("expiresAt", ""),
"TDC114_PREAUTH_USER_ID": user.get("id", ""),
"TDC114_PREAUTH_USER_NAME": user.get("name", ""),
"TDC114_PREAUTH_USER_PHONE": user.get("phoneNumber", ""),
"TDC114_PREAUTH_TENANT_ID": user.get("tenantId", ""),
"TDC114_PREAUTH_TENANT_NAME": user.get("tenantName", ""),
"TDC114_PREAUTH_TENANT_SLUG": user.get("tenantSlug", ""),
"TDC114_PREAUTH_DEPARTMENT": user.get("department", "") or "",
"TDC114_PREAUTH_GRADE": user.get("grade", "") or "",
"TDC114_PREAUTH_POSITION": user.get("position", "") or "",
"TDC114_PREAUTH_JOB_TITLE": user.get("jobTitle", "") or "",
}
for key, value in fields.items():
print(f"{key}={value}")
PY
)
for entry in "${exported[@]}"; do
DEFINE_ARGS+=("--dart-define=${entry}")
done
echo "Using real local phone-login bootstrap for manual post-login run." >&2
else
echo "WARN local phone-login bootstrap failed; using mock directory fallback." >&2
if [ -s "$tmp_err" ]; then
cat "$tmp_err" >&2
fi
if [ -s "$tmp_body" ]; then
cat "$tmp_body" >&2
fi
DEFINE_ARGS+=(
"--dart-define=TDC114_SMOKE_USE_MOCK_DIRECTORY=true"
"--dart-define=TDC114_PREAUTH_TOKEN=mock-session-token"
"--dart-define=TDC114_PREAUTH_EXPIRES_AT=2099-12-31T23:59:59Z"
"--dart-define=TDC114_PREAUTH_USER_ID=user-001"
"--dart-define=TDC114_PREAUTH_USER_NAME=김하늘"
"--dart-define=TDC114_PREAUTH_USER_PHONE=+821012345678"
"--dart-define=TDC114_PREAUTH_TENANT_ID=tenant-hanmac"
"--dart-define=TDC114_PREAUTH_TENANT_NAME=한맥"
"--dart-define=TDC114_PREAUTH_TENANT_SLUG=hanmac"
"--dart-define=TDC114_PREAUTH_DEPARTMENT=기술연구소"
"--dart-define=TDC114_PREAUTH_GRADE=책임"
"--dart-define=TDC114_PREAUTH_POSITION=팀장"
"--dart-define=TDC114_PREAUTH_JOB_TITLE=Flutter 개발"
)
fi
fi
echo "Launching app on device ${DEVICE_ID} with post-login seed..." >&2
exec "$ROOT_DIR/scripts/flutter-docker.sh" \
run \
-d "$DEVICE_ID" \
"${DEFINE_ARGS[@]}"