From da44b444689e3ba6fca99491279e3afb6f16c002 Mon Sep 17 00:00:00 2001 From: Jakub Dorfman Date: Mon, 27 Apr 2026 12:14:12 +0200 Subject: [PATCH] fix: enhance caddy reload logic to use admin API and improve validation checks --- panel/panelctl.sh | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/panel/panelctl.sh b/panel/panelctl.sh index d65b5c8..9b5c0bd 100644 --- a/panel/panelctl.sh +++ b/panel/panelctl.sh @@ -330,25 +330,49 @@ cmd_render_route() { } maybe_reload_caddy() { + # Try Caddy admin API first (no root required) + if curl -sf -X POST http://localhost:2019/config/ >/dev/null 2>&1; then + echo "reloaded caddy via admin API" + return + fi + + # Validate config if caddy binary is available if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then - /run/current-system/sw/bin/caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile || echo "warning: caddy validation failed" >&2 + /run/current-system/sw/bin/caddy validate \ + --config /etc/caddy/Caddyfile --adapter caddyfile \ + || echo "warning: caddy validation failed" >&2 fi + # Fall back to systemctl (sudo if needed) if [[ "${EUID}" -eq 0 ]]; then - systemctl reload caddy - echo "reloaded caddy" - return - fi - - if command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then - sudo -n /run/current-system/sw/bin/systemctl reload caddy + systemctl reload caddy && echo "reloaded caddy" + elif sudo -n /run/current-system/sw/bin/systemctl reload caddy 2>/dev/null; then echo "reloaded caddy via sudo" - return + else + echo "caddy reload requires root; run: sudo systemctl reload caddy" fi - - echo "caddy reload requires root; run: sudo systemctl reload caddy" } +# maybe_reload_caddy() { +# if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then +# /run/current-system/sw/bin/caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile || echo "warning: caddy validation failed" >&2 +# fi + +# if [[ "${EUID}" -eq 0 ]]; then +# systemctl reload caddy +# echo "reloaded caddy" +# return +# fi + +# if command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then +# sudo -n /run/current-system/sw/bin/systemctl reload caddy +# echo "reloaded caddy via sudo" +# return +# fi + +# echo "caddy reload requires root; run: sudo systemctl reload caddy" +# } + cmd_deploy() { local name="$1" validate_name "${name}"