From e22985cc8b1999460c859d5051d9b67f52bd6ef0 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Mon, 29 Dec 2025 14:25:00 -0500 Subject: [PATCH] Make prettier --- .../io/heckel/ntfy/ui/CustomHeaderFragment.kt | 47 +++++++++++++------ app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values/strings.xml | 5 +- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/io/heckel/ntfy/ui/CustomHeaderFragment.kt b/app/src/main/java/io/heckel/ntfy/ui/CustomHeaderFragment.kt index e18edfcd..78ca57d4 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/CustomHeaderFragment.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/CustomHeaderFragment.kt @@ -167,6 +167,8 @@ class CustomHeaderFragment : DialogFragment() { // Validate header name and check if a user already exists for this server CoroutineScope(Dispatchers.Main).launch { var isValid = true + val targetBaseUrl = if (header != null) header!!.baseUrl else baseUrl + if (headerName.isNotEmpty()) { if (!validateHeaderName(headerName)) { headerNameLayout.error = getString(R.string.custom_headers_dialog_error_invalid_name) @@ -174,20 +176,12 @@ class CustomHeaderFragment : DialogFragment() { } else if (isReservedHeader(headerName)) { headerNameLayout.error = getString(R.string.custom_headers_dialog_error_reserved_name) isValid = false - } else if (headerName.equals("Authorization", ignoreCase = true)) { - // Check if a user exists for this server (async) - val targetBaseUrl = if (header != null) header!!.baseUrl else baseUrl - val userExists = if (this@CustomHeaderFragment::repository.isInitialized && validUrl(targetBaseUrl)) { - withContext(Dispatchers.IO) { - repository.getUser(targetBaseUrl) != null - } - } else { - false - } - if (userExists) { - headerNameLayout.error = getString(R.string.custom_headers_dialog_error_user_exists) - isValid = false - } + } else if (isDuplicateHeader(targetBaseUrl, headerName)) { + headerNameLayout.error = getString(R.string.custom_headers_dialog_error_duplicate) + isValid = false + } else if (headerName.equals("Authorization", ignoreCase = true) && hasUserForServer(targetBaseUrl)) { + headerNameLayout.error = getString(R.string.custom_headers_dialog_error_user_exists) + isValid = false } } if (header == null) { @@ -228,6 +222,31 @@ class CustomHeaderFragment : DialogFragment() { return reservedHeaders.contains(nameLower) || nameLower.startsWith("sec-websocket-") } + private suspend fun isDuplicateHeader(baseUrl: String, headerName: String): Boolean { + if (!this::repository.isInitialized || !validUrl(baseUrl)) { + return false + } + val existingHeaders = withContext(Dispatchers.IO) { + repository.getCustomHeadersForServer(baseUrl) + } + return existingHeaders.any { existingHeader -> + // When editing, exclude the current header being edited + val isCurrentHeader = header != null && + existingHeader.baseUrl == header!!.baseUrl && + existingHeader.name == header!!.name + !isCurrentHeader && existingHeader.name.equals(headerName, ignoreCase = true) + } + } + + private suspend fun hasUserForServer(baseUrl: String): Boolean { + if (!this::repository.isInitialized || !validUrl(baseUrl)) { + return false + } + return withContext(Dispatchers.IO) { + repository.getUser(baseUrl) != null + } + } + companion object { const val TAG = "NtfyCustomHeaderFragment" private const val BUNDLE_BASE_URL = "baseUrl" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4f0e4cea..ba4212d2 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -360,6 +360,7 @@ Ungültige Zeichen im Header-Namen Dieser Header ist reserviert und wird von ntfy gesetzt Authorization-Header kann nicht hinzugefügt werden, wenn ein Benutzer für diesen Server konfiguriert ist + Ein Header mit diesem Namen existiert bereits für diesen Server Header-Name (z.B. CF-Access-Client-Id) Wert (z.B. 9f3c2e4a1b2d4e) Einen benutzerdefinierten HTTP-Header hinzufügen, der mit jeder Anfrage an den angegebenen Server gesendet wird. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e7f4b874..0531fe03 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -467,8 +467,8 @@ Save - Add Custom Header - Edit Custom Header + Add custom header + Edit custom header Service URL Header name (e.g. CF-Access-Client-Id) Value (e.g. 9f3c2e4a1b2d4e) @@ -477,6 +477,7 @@ Header name contains invalid characters This header is reserved and set by ntfy Cannot add Authorization header if a user is configured for this server + A header with this name already exists for this server Add Save Delete