netgescon-day0/scripts/ops/netgescon-google-check.sh

88 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Quick checklist for Google OAuth readiness on current Laravel app.
# Usage:
# scripts/ops/netgescon-google-check.sh [--app-dir /var/www/netgescon]
# scripts/ops/netgescon-google-check.sh --base-url https://staging.netgescon.it --resolve-local
APP_DIR="${PWD}"
BASE_URL=""
RESOLVE_LOCAL=0
while [[ $# -gt 0 ]]; do
case "$1" in
--app-dir)
APP_DIR="$2"
shift 2
;;
--base-url)
BASE_URL="$2"
shift 2
;;
--resolve-local)
RESOLVE_LOCAL=1
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--app-dir <path>] [--base-url <url>] [--resolve-local]"
exit 1
;;
esac
done
if [[ ! -f "$APP_DIR/.env" ]]; then
echo "Error: .env not found in $APP_DIR"
exit 1
fi
echo "== Google OAuth Check =="
echo "App dir: $APP_DIR"
php -r '
$envPath = $argv[1] . "/.env";
$keys = ["APP_URL", "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET", "GOOGLE_REDIRECT_URI"];
$map = [];
foreach (file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
if ($line === "" || $line[0] === "#" || strpos($line, "=") === false) continue;
[$k, $v] = explode("=", $line, 2);
$map[$k] = trim($v);
}
foreach ($keys as $k) {
$v = $map[$k] ?? "";
$ok = ($v !== "" && strtolower($v) !== "null");
echo $k . ": " . ($ok ? "SET" : "MISSING") . PHP_EOL;
}
' "$APP_DIR"
if [[ -z "$BASE_URL" ]]; then
BASE_URL="$(php -r '$u=""; foreach(file("'"$APP_DIR"'/.env", FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) as $l){ if(strpos($l,"APP_URL=")===0){ $u=trim(substr($l,8)); break; }} echo rtrim($u,"/");')"
fi
if [[ -z "$BASE_URL" ]]; then
echo "Error: APP_URL is empty and --base-url was not provided"
exit 1
fi
HOST="$(php -r 'echo parse_url($argv[1], PHP_URL_HOST) ?: "";' "$BASE_URL")"
SCHEME="$(php -r 'echo parse_url($argv[1], PHP_URL_SCHEME) ?: "http";' "$BASE_URL")"
PORT="$(php -r '$u=$argv[1]; $p=parse_url($u, PHP_URL_PORT); if($p){echo $p; exit;} $s=parse_url($u, PHP_URL_SCHEME) ?: "http"; echo ($s === "https") ? "443" : "80";' "$BASE_URL")"
if [[ -n "$HOST" && "$HOST" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo
echo "Warning: BASE_URL host is an IP ($HOST)."
echo "If nginx uses server_name domains, direct IP checks can return 404 even when app is UP."
fi
echo
echo "Expected callback route: <APP_URL>/oauth/google/callback"
echo "Route test (auth required, should redirect to login if guest):"
TARGET_URL="${BASE_URL}/oauth/google/redirect"
if [[ "$RESOLVE_LOCAL" -eq 1 && -n "$HOST" ]]; then
echo "Route test mode: --resolve ${HOST}:${PORT}:127.0.0.1"
curl -kI --resolve "${HOST}:${PORT}:127.0.0.1" "$TARGET_URL" | head -n 12 || true
else
curl -kI "$TARGET_URL" | head -n 12 || true
fi