fix(Server): fixes temporary disable input visibility, adds reason text
Build & Deploy / build (push) Successful in 1m43s

This commit is contained in:
2026-07-29 20:18:35 +02:00
parent 9d01eb5311
commit 0c136f86cb
2 changed files with 20 additions and 11 deletions
+8 -4
View File
@@ -373,9 +373,13 @@ internal static class ReverseProxyEndpoint
private static string GetClientDisabledMessage(string clientId, ClientAccess access) private static string GetClientDisabledMessage(string clientId, ClientAccess access)
{ {
var reason = string.IsNullOrWhiteSpace(access.DisabledReason)
? ""
: $" Reason: {access.DisabledReason.Trim()}.";
if (access.DisabledManually) if (access.DisabledManually)
{ {
return $"Tunnel client '{clientId}' is disabled until it is enabled manually."; return $"Tunnel client '{clientId}' is disabled until it is enabled manually.{reason}";
} }
if (access.DisabledUntilUtc is { } disabledUntil) if (access.DisabledUntilUtc is { } disabledUntil)
@@ -383,12 +387,12 @@ internal static class ReverseProxyEndpoint
var from = access.DisabledFromUtc is { } fromUtc var from = access.DisabledFromUtc is { } fromUtc
? $" (scheduled from {fromUtc:O})" ? $" (scheduled from {fromUtc:O})"
: ""; : "";
return $"Tunnel client '{clientId}' is disabled until {disabledUntil:O}.{from}"; return $"Tunnel client '{clientId}' is disabled until {disabledUntil:O}.{from}{reason}";
} }
return access.DisabledFromUtc is { } fromUtc2 return access.DisabledFromUtc is { } fromUtc2
? $"Tunnel client '{clientId}' is disabled (scheduled from {fromUtc2:O})." ? $"Tunnel client '{clientId}' is disabled (scheduled from {fromUtc2:O}).{reason}"
: $"Tunnel client '{clientId}' is disabled."; : $"Tunnel client '{clientId}' is disabled.{reason}";
} }
private static async Task<string?> GetRequestedModelAsync(HttpRequest request, PathString proxyPath) private static async Task<string?> GetRequestedModelAsync(HttpRequest request, PathString proxyPath)
+12 -7
View File
@@ -1665,16 +1665,20 @@ function emptyState(text) {
} }
function disabledText(client) { function disabledText(client) {
var text = "";
if (client.disabledManually) { if (client.disabledManually) {
return "Until enabled manually"; text = "Until enabled manually";
} else if (client.disabledUntilUtc) {
text = `Until ${formatDate(client.disabledUntilUtc)}`;
} else if (isScheduled(client)) {
text = `Scheduled from ${formatDate(client.disabledFromUtc)}`;
} else {
text = "Disabled";
} }
if (client.disabledUntilUtc) { if (client.disabledReason) {
return `Until ${formatDate(client.disabledUntilUtc)}`; text += ` ${escapeHtml(client.disabledReason)}`;
} }
if (isScheduled(client)) { return text;
return `Scheduled from ${formatDate(client.disabledFromUtc)}`;
}
return "Disabled";
} }
function isScheduled(client) { function isScheduled(client) {
@@ -1793,6 +1797,7 @@ function showDisableModal(clientId) {
function updateWhen() { function updateWhen() {
const val = overlay.querySelector('input[name="d-when"]:checked').value; const val = overlay.querySelector('input[name="d-when"]:checked').value;
fromInput.style.display = val === "later" ? "" : "none";
fromInput.disabled = val !== "later"; fromInput.disabled = val !== "later";
if (val === "now") fromInput.value = ""; if (val === "now") fromInput.value = "";
} }