# ===========================================================================
#  Nginx reverse proxy for WA-Sender
#  Place at /etc/nginx/sites-available/wa-sender then symlink to sites-enabled.
#  Certbot will inject the SSL lines automatically (see README step 7).
# ===========================================================================

# Redirect all HTTP -> HTTPS
server {
    listen 80;
    server_name wa.yourdomain.com;
    # Allow Certbot's ACME challenge through, redirect everything else.
    location /.well-known/acme-challenge/ { root /var/www/html; }
    location / { return 301 https://$host$request_uri; }
}

server {
    listen 443 ssl http2;
    server_name wa.yourdomain.com;

    # --- TLS (managed by Certbot; these paths are filled in automatically) ---
    # ssl_certificate     /etc/letsencrypt/live/wa.yourdomain.com/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/wa.yourdomain.com/privkey.pem;
    # include /etc/letsencrypt/options-ssl-nginx.conf;
    # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Hardening headers (helmet sets app-level ones too; these are belt & braces)
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    client_max_body_size 64M; # match the media upload limit

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        # WebSocket upgrade (Socket.IO for live QR / progress)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Pass the real client info so express 'trust proxy' + rate-limit work
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_read_timeout 600s; # long-lived websockets
    }
}
