From 0e01f2149cf815e267b132a3137770c933e0422d Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Thu, 5 Nov 2026 23:36:30 +0100 Subject: [PATCH] fix(sentinel): send Retry-After for unreachable servers and invalid tokens - Send Retry-After: 300 when the server is not functional - Send Retry-After: 3600 when the push token cannot be decrypted Co-Authored-By: Claude Opus 5.5 --- app/Http/Controllers/Api/SentinelController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/SentinelController.php b/app/Http/Controllers/Api/SentinelController.php index 1e1ca6292d..4150fe17c3 100644 --- a/app/Http/Controllers/Api/SentinelController.php +++ b/app/Http/Controllers/Api/SentinelController.php @@ -39,7 +39,8 @@ class SentinelController extends Controller } catch (Exception $e) { auditLogWebhookFailure('sentinel', 'decrypt_failed'); - return response()->json(['message' => 'Invalid token'], 401); + // Usually a Sentinel of another instance or of an old APP_KEY: it cannot recover, so it waits one hour. + return response()->json(['message' => 'Invalid token'], 401, ['Retry-After' => 3600]); } $server_uuid = data_get($decrypted_token, 'server_uuid'); if (! $server_uuid) { @@ -78,7 +79,8 @@ class SentinelController extends Controller ]); $server->rememberSentinelPushProblem('Coolify rejected the push: the server is marked unreachable, not usable, or disabled. Validate the server connection.'); - return response()->json(['message' => 'Server is not functional'], 401); + // SSH checks mark the server reachable again, so pushes can wait 5 minutes. + return response()->json(['message' => 'Server is not functional'], 401, ['Retry-After' => 300]); } if ($server->settings->sentinel_token !== $naked_token) {