#!/bin/bash
# 실습 #12 ④ — SSL Termination + HTTP→HTTPS redirect
set -e

CFG="$(dirname "$0")/configs/04_haproxy_ssl.cfg"
CERT_DIR=/etc/haproxy/certs

# 1) 백엔드 준비
docker rm -f be1 be2 2>/dev/null || true
docker run -d --name be1 -p 8001:80 nginx
docker run -d --name be2 -p 8002:80 nginx

# 2) 자가서명 인증서 생성 + cert+key 결합 (HAProxy 형식)
sudo mkdir -p "$CERT_DIR"
if [ ! -f "$CERT_DIR/api.pem" ]; then
    sudo openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
        -keyout /tmp/api.key -out /tmp/api.crt \
        -subj "/CN=api.lab.local"
    # HAProxy 는 cert + key 를 한 파일에 — cat 으로 결합
    sudo sh -c "cat /tmp/api.crt /tmp/api.key > $CERT_DIR/api.pem"
    sudo chmod 600 "$CERT_DIR/api.pem"
    rm -f /tmp/api.key /tmp/api.crt
fi

# 3) 설정 배포
sudo cp "$CFG" /etc/haproxy/haproxy.cfg
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy

# 4) 검증
echo
echo "=== SSL 검증 ==="
echo "→ HTTP → HTTPS redirect (301)"
curl -sI http://localhost/ | head -3
echo
echo "→ HTTPS 응답 (-k = 자가서명 무시)"
curl -ksI https://localhost/ | head -3
echo
echo "→ TLS 버전 확인"
curl -ksv https://localhost/ 2>&1 | grep -E "SSL connection|TLSv|ALPN" | head -5
