#!/usr/bin/env bash
# onx-terminal-proxy-auth-sync — terminal.secret'ten Apache WS-proxy auth header
# include dosyasını üretir + (panel httpd ise) reload.
#
# Neden: ttyd '-c onox:<secret>' ile basic-auth ister; tarayıcı WebSocket upgrade'ine
# Authorization header EKLEYEMEZ. Bu yüzden Apache, /admin/terminal/ws proxy'sine
# 'Authorization: Basic base64(onox:<secret>)' header'ını enjekte eder (yola özel expr=).
# Asıl güvenlik kapısı ttyd'nin ilk WS mesajındaki AuthToken kontrolüdür (yanlışsa 1008);
# AuthToken'ı yalnız admin Laravel connect ucundan alır.
#
# install + günlük rotate bunu çağırır → secret değişince Apache header'ı senkron kalır.
set -uo pipefail
F=/etc/onoxsoft/terminal.secret
INC=/etc/onoxsoft/terminal-proxy-auth.conf
[[ -s "$F" ]] || exit 0
B64="$(printf 'onox:%s' "$(cat "$F")" | base64 -w0)"
umask 077
printf '<IfModule mod_headers.c>\nRequestHeader set Authorization "Basic %s" "expr=%%{REQUEST_URI} == '\''/admin/terminal/ws'\''"\n</IfModule>\n' "$B64" > "$INC.tmp"
chmod 0600 "$INC.tmp"; mv -f "$INC.tmp" "$INC"
# Panel httpd üzerindeyse: config test geçerse graceful reload (kırılırsa eski durumu koru).
if systemctl is-active --quiet httpd 2>/dev/null; then
  httpd -t >/dev/null 2>&1 && systemctl reload httpd >/dev/null 2>&1 || true
fi
exit 0
