Compare commits

...

2 Commits

Author SHA1 Message Date
Crowdin Bot 793ad699b6 New Crowdin translations by GitHub Action
Lint / Linting Checks (push) Has been cancelled
Tests / vitest (1) (push) Has been cancelled
Tests / vitest (2) (push) Has been cancelled
Tests / vitest (3) (push) Has been cancelled
Tests / vitest (4) (push) Has been cancelled
2026-08-29 00:46:45 +00:00
shamoon e6ad43a76c Tweak: improve nextauth error logging for easier debugging (#7070)
Docker CI / Docker Build & Push (push) Has been cancelled
Lint / Linting Checks (push) Has been cancelled
Release Drafter / Update Release Draft (push) Has been cancelled
Release Drafter / Auto Label PR (push) Has been cancelled
Tests / vitest (1) (push) Has been cancelled
Tests / vitest (2) (push) Has been cancelled
Tests / vitest (3) (push) Has been cancelled
Tests / vitest (4) (push) Has been cancelled
2026-08-28 12:23:55 -07:00
44 changed files with 141 additions and 46 deletions
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Wag asseblief" "wait": "Wag asseblief"
}, },
"search": { "search": {
"placeholder": "Soek…" "placeholder": "Soek…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "SVE", "cpu": "SVE",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "الرجاء الإنتظار" "wait": "الرجاء الإنتظار"
}, },
"search": { "search": {
"placeholder": "بحث …" "placeholder": "بحث …",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "المعالج", "cpu": "المعالج",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Моля изчакайте" "wait": "Моля изчакайте"
}, },
"search": { "search": {
"placeholder": "Търсене…" "placeholder": "Търсене…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Процесор", "cpu": "Процесор",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Si us plau, espereu" "wait": "Si us plau, espereu"
}, },
"search": { "search": {
"placeholder": "Cerca…" "placeholder": "Cerca…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Počkejte prosím" "wait": "Počkejte prosím"
}, },
"search": { "search": {
"placeholder": "Hledat…" "placeholder": "Hledat…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Využití procesoru", "cpu": "Využití procesoru",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Vent venligst" "wait": "Vent venligst"
}, },
"search": { "search": {
"placeholder": "Søg…" "placeholder": "Søg…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Bitte warten" "wait": "Bitte warten"
}, },
"search": { "search": {
"placeholder": "Suche…" "placeholder": "Suche…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Παρακαλώ περιμένετε" "wait": "Παρακαλώ περιμένετε"
}, },
"search": { "search": {
"placeholder": "Αναζήτηση…" "placeholder": "Αναζήτηση…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Επεξεργαστής", "cpu": "Επεξεργαστής",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Bonvolu atendi" "wait": "Bonvolu atendi"
}, },
"search": { "search": {
"placeholder": "Serĉi…" "placeholder": "Serĉi…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Ĉefprocesoro", "cpu": "Ĉefprocesoro",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Espera, por favor" "wait": "Espera, por favor"
}, },
"search": { "search": {
"placeholder": "Buscar…" "placeholder": "Buscar…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Itxaron mesedez" "wait": "Itxaron mesedez"
}, },
"search": { "search": {
"placeholder": "Bilatu…" "placeholder": "Bilatu…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Odota, ole hyvä" "wait": "Odota, ole hyvä"
}, },
"search": { "search": {
"placeholder": "Hae…" "placeholder": "Hae…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Veuillez patienter" "wait": "Veuillez patienter"
}, },
"search": { "search": {
"placeholder": "Recherche…" "placeholder": "Recherche…",
"provider": "Moteur de recherche : {{name}}",
"select_provider": "Sélectionnez un moteur de recherche"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "המתן בבקשה" "wait": "המתן בבקשה"
}, },
"search": { "search": {
"placeholder": "חיפוש…" "placeholder": "חיפוש…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "מעבד", "cpu": "מעבד",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Please wait" "wait": "Please wait"
}, },
"search": { "search": {
"placeholder": "Search…" "placeholder": "Search…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Pričekaj" "wait": "Pričekaj"
}, },
"search": { "search": {
"placeholder": "Traži …" "placeholder": "Traži …",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Kérjük várjon" "wait": "Kérjük várjon"
}, },
"search": { "search": {
"placeholder": "Keresés…" "placeholder": "Keresés…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Processzor", "cpu": "Processzor",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Harap tunggu" "wait": "Harap tunggu"
}, },
"search": { "search": {
"placeholder": "Telusuri…" "placeholder": "Telusuri…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Attendi per favore" "wait": "Attendi per favore"
}, },
"search": { "search": {
"placeholder": "Cerca…" "placeholder": "Cerca…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "お待ちください" "wait": "お待ちください"
}, },
"search": { "search": {
"placeholder": "検索…" "placeholder": "検索…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+4 -2
View File
@@ -39,7 +39,9 @@
"wait": "잠시만 기다리세요" "wait": "잠시만 기다리세요"
}, },
"search": { "search": {
"placeholder": "검색…" "placeholder": "검색…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
@@ -472,7 +474,7 @@
"users": "사용자", "users": "사용자",
"loginsLast24H": "로그인 (24시간)", "loginsLast24H": "로그인 (24시간)",
"failedLoginsLast24H": "실패한 로그인 (24시간)", "failedLoginsLast24H": "실패한 로그인 (24시간)",
"authorizationsLast24H": "Auths (24h)" "authorizationsLast24H": "인증(24시간)"
}, },
"proxmox": { "proxmox": {
"mem": "메모리", "mem": "메모리",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Lūdzu, uzgaidiet" "wait": "Lūdzu, uzgaidiet"
}, },
"search": { "search": {
"placeholder": "Meklēt…" "placeholder": "Meklēt…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Sila tunggu" "wait": "Sila tunggu"
}, },
"search": { "search": {
"placeholder": "Carian…" "placeholder": "Carian…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Even geduld" "wait": "Even geduld"
}, },
"search": { "search": {
"placeholder": "Zoeken…" "placeholder": "Zoeken…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Vennligst vent" "wait": "Vennligst vent"
}, },
"search": { "search": {
"placeholder": "Søk…" "placeholder": "Søk…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+4 -2
View File
@@ -39,7 +39,9 @@
"wait": "Proszę czekać" "wait": "Proszę czekać"
}, },
"search": { "search": {
"placeholder": "Szukaj…" "placeholder": "Szukaj…",
"provider": "Wyszukiwarka: {{name}}",
"select_provider": "Wybierz wyszukiwarkę"
}, },
"resources": { "resources": {
"cpu": "Procesor", "cpu": "Procesor",
@@ -472,7 +474,7 @@
"users": "Użytkownicy", "users": "Użytkownicy",
"loginsLast24H": "Logowania (24h)", "loginsLast24H": "Logowania (24h)",
"failedLoginsLast24H": "Nieudane logowania (24h)", "failedLoginsLast24H": "Nieudane logowania (24h)",
"authorizationsLast24H": "Auths (24h)" "authorizationsLast24H": "Uwierzytelnienia (24h)"
}, },
"proxmox": { "proxmox": {
"mem": "RAM", "mem": "RAM",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Por favor aguarde" "wait": "Por favor aguarde"
}, },
"search": { "search": {
"placeholder": "Pesquisar…" "placeholder": "Pesquisar…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Por favor, aguarde" "wait": "Por favor, aguarde"
}, },
"search": { "search": {
"placeholder": "Pesquisar…" "placeholder": "Pesquisar…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Va rugăm așteptați" "wait": "Va rugăm așteptați"
}, },
"search": { "search": {
"placeholder": "Caută…" "placeholder": "Caută…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Procesor", "cpu": "Procesor",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Пожалуйста, подождите" "wait": "Пожалуйста, подождите"
}, },
"search": { "search": {
"placeholder": "Поиск…" "placeholder": "Поиск…",
"provider": "Поисковая система: {{name}}",
"select_provider": "Выберите поисковую систему"
}, },
"resources": { "resources": {
"cpu": "ЦП", "cpu": "ЦП",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Počkajte prosím" "wait": "Počkajte prosím"
}, },
"search": { "search": {
"placeholder": "Hľadať…" "placeholder": "Hľadať…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Prosimo počakajte" "wait": "Prosimo počakajte"
}, },
"search": { "search": {
"placeholder": "Iskanje…" "placeholder": "Iskanje…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Молим сачекајте" "wait": "Молим сачекајте"
}, },
"search": { "search": {
"placeholder": "Претражи…" "placeholder": "Претражи…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "Процесор", "cpu": "Процесор",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Vänligen vänta" "wait": "Vänligen vänta"
}, },
"search": { "search": {
"placeholder": "Sök…" "placeholder": "Sök…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "దయచేసి వేచి ఉండండి" "wait": "దయచేసి వేచి ఉండండి"
}, },
"search": { "search": {
"placeholder": "వెతకండి…" "placeholder": "వెతకండి…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "సీపియూ", "cpu": "సీపియూ",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "โปรดรอ" "wait": "โปรดรอ"
}, },
"search": { "search": {
"placeholder": "ค้นหา…" "placeholder": "ค้นหา…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "ซีพียู", "cpu": "ซีพียู",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Lütfen bekleyin" "wait": "Lütfen bekleyin"
}, },
"search": { "search": {
"placeholder": "Ara…" "placeholder": "Ara…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "İşlemci", "cpu": "İşlemci",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Будь ласка, зачекайте" "wait": "Будь ласка, зачекайте"
}, },
"search": { "search": {
"placeholder": "Пошук…" "placeholder": "Пошук…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "ЦП", "cpu": "ЦП",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "Vui lòng chờ" "wait": "Vui lòng chờ"
}, },
"search": { "search": {
"placeholder": "Tìm kiếm…" "placeholder": "Tìm kiếm…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "請稍後" "wait": "請稍後"
}, },
"search": { "search": {
"placeholder": "搜索緊…" "placeholder": "搜索緊…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "请稍候" "wait": "请稍候"
}, },
"search": { "search": {
"placeholder": "搜索…" "placeholder": "搜索…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
+3 -1
View File
@@ -39,7 +39,9 @@
"wait": "請稍候" "wait": "請稍候"
}, },
"search": { "search": {
"placeholder": "搜尋…" "placeholder": "搜尋…",
"provider": "Search engine: {{name}}",
"select_provider": "Select search engine"
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
@@ -73,6 +73,7 @@ describe("pages/api/auth/[...nextauth]", () => {
it("routes sanitized NextAuth logs through the Homepage logger", async () => { it("routes sanitized NextAuth logs through the Homepage logger", async () => {
const mod = await import("pages/api/auth/[...nextauth]"); const mod = await import("pages/api/auth/[...nextauth]");
const sensitiveMetadata = { const sensitiveMetadata = {
error: Object.assign(new Error("State cookie was missing."), { access_token: "sensitive-access-token" }),
clientSecret: "sensitive-client-secret", clientSecret: "sensitive-client-secret",
access_token: "sensitive-access-token", access_token: "sensitive-access-token",
id_token: "sensitive-id-token", id_token: "sensitive-id-token",
@@ -82,7 +83,7 @@ describe("pages/api/auth/[...nextauth]", () => {
mod.authOptions.logger.warn("NEXTAUTH_URL", sensitiveMetadata); mod.authOptions.logger.warn("NEXTAUTH_URL", sensitiveMetadata);
mod.authOptions.logger.debug("OAUTH_CALLBACK_RESPONSE", sensitiveMetadata); mod.authOptions.logger.debug("OAUTH_CALLBACK_RESPONSE", sensitiveMetadata);
expect(errorMock).toHaveBeenCalledWith("%s", "OAUTH_CALLBACK_ERROR"); expect(errorMock).toHaveBeenCalledWith("%s: %s", "OAUTH_CALLBACK_ERROR", "State cookie was missing.");
expect(warnMock).toHaveBeenCalledWith("%s", "NEXTAUTH_URL"); expect(warnMock).toHaveBeenCalledWith("%s", "NEXTAUTH_URL");
expect(debugMock).toHaveBeenCalledWith("%s", "OAUTH_CALLBACK_RESPONSE"); expect(debugMock).toHaveBeenCalledWith("%s", "OAUTH_CALLBACK_RESPONSE");
expect(JSON.stringify([...errorMock.mock.calls, ...warnMock.mock.calls, ...debugMock.mock.calls])).not.toContain( expect(JSON.stringify([...errorMock.mock.calls, ...warnMock.mock.calls, ...debugMock.mock.calls])).not.toContain(
+11 -1
View File
@@ -71,6 +71,16 @@ function logFailedPasswordSignIn() {
createLogger("nextauth").warn("Failed password sign-in attempt"); createLogger("nextauth").warn("Failed password sign-in attempt");
} }
function logNextAuthError(code, metadata) {
const error = metadata instanceof Error ? metadata : metadata?.error;
if (error?.message) {
createLogger("nextauth").error("%s: %s", code, error.message);
} else {
createLogger("nextauth").error("%s", code);
}
}
let providers = []; let providers = [];
if (authEnabled) { if (authEnabled) {
if (hasOidcConfig) { if (hasOidcConfig) {
@@ -140,7 +150,7 @@ export const authOptions = {
signIn: "/auth/signin", signIn: "/auth/signin",
}, },
logger: { logger: {
error: (code) => createLogger("nextauth").error("%s", code), error: logNextAuthError,
warn: (code) => createLogger("nextauth").warn("%s", code), warn: (code) => createLogger("nextauth").warn("%s", code),
debug: (code) => createLogger("nextauth").debug("%s", code), debug: (code) => createLogger("nextauth").debug("%s", code),
}, },