Files
Base-QR-Spring-Boot/run-local.sh
Alejandro Lara 59bd2d2d8a Integrar autenticación Cognito con Floci local y soporte AWS
- Añade servicios y configuración Cognito para login web (admins) y API (scanners)
- Soporta Floci cuando AWS_ENDPOINT_URL está definido; AWS real en caso contrario
- Incluye bootstrap Floci, docker-compose.local.yml y carga automática en run-local.sh
- Documenta arquitectura, flujos y arranque manual/IntelliJ en README
- Actualiza gitignore: excluye Flutter, H2 local y artefactos generados
2026-06-09 16:59:50 -06:00

156 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COGNITO_ENV_FILE="$SCRIPT_DIR/docker/floci/generated/cognito.local.env"
MIN_JAVA_VERSION=25
is_valid_jdk() {
[[ -n "${1:-}" && -x "$1/bin/java" ]]
}
java_major_version() {
"$1/bin/java" -version 2>&1 | awk -F '"' '/version/ { split($2, v, "."); print v[1]; exit }'
}
collect_jdk_candidates() {
local -a candidates=()
if [[ -n "${JAVA_HOME:-}" ]]; then
candidates+=("$JAVA_HOME")
fi
if compgen -G "/opt/jdk-*" > /dev/null; then
while IFS= read -r jdk_dir; do
candidates+=("$jdk_dir")
done < <(ls -d /opt/jdk-* 2>/dev/null | sort -rV)
fi
candidates+=(
/usr/lib/jvm/java-25-temurin-jdk
/usr/lib/jvm/java-21-temurin-jdk
/usr/lib/jvm/java-21-openjdk-amd64
)
printf '%s\n' "${candidates[@]}"
}
resolve_java_home() {
local candidate major_version
local -A seen=()
if [[ -n "${JAVA_HOME:-}" && ! -x "${JAVA_HOME}/bin/java" ]]; then
echo "JAVA_HOME actual ($JAVA_HOME) no es valido. Buscando otro JDK..." >&2
fi
while IFS= read -r candidate; do
[[ -n "$candidate" && -z "${seen[$candidate]+x}" ]] || continue
seen[$candidate]=1
if ! is_valid_jdk "$candidate"; then
continue
fi
major_version="$(java_major_version "$candidate")"
if (( major_version >= MIN_JAVA_VERSION )); then
echo "$candidate"
return 0
fi
done < <(collect_jdk_candidates)
while IFS= read -r candidate; do
[[ -n "$candidate" && -z "${seen[$candidate]+x}" ]] || continue
seen[$candidate]=1
if is_valid_jdk "$candidate"; then
major_version="$(java_major_version "$candidate")"
echo "Se encontro Java $major_version en $candidate, pero este proyecto requiere Java $MIN_JAVA_VERSION o superior." >&2
return 1
fi
done < <(collect_jdk_candidates)
echo "No se encontro un JDK valido. Instala Temurin $MIN_JAVA_VERSION+ o define JAVA_HOME." >&2
return 1
}
wait_for_cognito_env() {
local elapsed=0
local timeout=120
while [[ ! -f "$COGNITO_ENV_FILE" && $elapsed -lt $timeout ]]; do
sleep 2
elapsed=$((elapsed + 2))
if (( elapsed % 10 == 0 )); then
echo "Esperando bootstrap de Cognito en Floci..." >&2
fi
done
[[ -f "$COGNITO_ENV_FILE" ]]
}
load_cognito_local_env() {
if [[ -n "${AWS_ENDPOINT_URL:-}" ]]; then
echo "AWS_ENDPOINT_URL ya definido; omitiendo carga de cognito.local.env" >&2
return 0
fi
if [[ ! -f "$COGNITO_ENV_FILE" ]]; then
echo "No se encontro $COGNITO_ENV_FILE. Exporta las variables Cognito manualmente." >&2
return 1
fi
set -a
# shellcheck disable=SC1090
source "$COGNITO_ENV_FILE"
set +a
echo "Variables Cognito cargadas desde docker/floci/generated/cognito.local.env" >&2
}
JAVA_HOME="$(resolve_java_home)"
export JAVA_HOME
export PATH="$JAVA_HOME/bin:$PATH"
echo "Usando JAVA_HOME=$JAVA_HOME ($(java -version 2>&1 | head -1))" >&2
PROFILE="${SPRING_PROFILES_ACTIVE:-dev}"
echo "Perfil activo: $PROFILE" >&2
if [[ "$PROFILE" == *"postgres"* ]]; then
echo "Base de datos: PostgreSQL (${SPRING_DATASOURCE_URL:-jdbc:postgresql://localhost:5432/base_admin_web})" >&2
else
echo "Base de datos: H2 en archivo local (./data/h2/). Para PostgreSQL usa: SPRING_PROFILES_ACTIVE=postgres ./run-local.sh" >&2
fi
FLOCI_STARTED=false
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.local.yml"
mkdir -p "$SCRIPT_DIR/docker/floci/generated"
chmod 777 "$SCRIPT_DIR/docker/floci/generated" 2>/dev/null || true
if [[ "$PROFILE" == *"postgres"* ]]; then
echo "Levantando PostgreSQL y Floci (Cognito local)..." >&2
docker compose -f "$COMPOSE_FILE" up -d postgres floci
else
echo "Levantando Floci (Cognito local) en http://localhost:4566 ..." >&2
docker compose -f "$COMPOSE_FILE" up -d floci
fi
FLOCI_STARTED=true
elif [[ "$PROFILE" == *"postgres"* ]]; then
echo "Docker Compose no esta disponible. Instala Docker o levanta PostgreSQL manualmente." >&2
exit 1
fi
if [[ "$FLOCI_STARTED" == true ]]; then
if wait_for_cognito_env; then
load_cognito_local_env || true
else
echo "Advertencia: timeout esperando cognito.local.env. Revisa Floci o exporta las variables manualmente." >&2
fi
fi
cd "$SCRIPT_DIR"
mvn -pl base-admin-web-jar -am -DskipTests install
mvn -pl base-admin-web-jar spring-boot:run