P1-P3 admin cleanup: rank guard, SSRF guard, count caching, dead code removal, pagination rewrite
CI / check (push) Canceled after 0s
CI / tests-unit (push) Canceled after 0s
CI / tests-integration (push) Canceled after 0s
CI / tests-ui (push) Canceled after 0s
CI / preflight (push) Canceled after 0s
CI / deploy (push) Canceled after 0s
Gitea Runner Clean Test / test-job (push) Canceled after 0s
Gitea Actions Runner Test / test-job (push) Canceled after 0s

- P1: new src/lib/admin/rank-guard.ts with tryGuardRank/guardRank + RankGuardTarget/Result; extracted from users.ts; applied to admin-bans (create/lift + rank redirect) and admin-badges (caps + rank guard + error surfacing); import-url-safety.ts SSRF guard wired into clone save+icon fetch; logAudit await in help-tickets; antiddos mutations SETTINGS_EDIT; markAllAlertsRead NOTIFICATIONS_EDIT; rankError/saveError in all 25 message files; tests rew/new for bans/badges/rank-guard/import-url-safety

- P2: ticket-inbox merged pagination reworked to single UNION ALL SQL with LIMIT/OFFSET (avoids O(offset) materialization); getCachedAdminCount with cacheFiltered option applied to devops/errors/photos/items/guilds/help-tickets/moderation pages; admin-theme catches→?error=1+banner+25 locales; logger in silent catches (rare-values/writeable-boxes); catalog-items-loader CAST→plain equality; count caching helper extended with opt-in cacheFiltered

- P3: removed dead modules is-staff/notice/recent-furni-resync/log-filters plus load-user-sanctions/user-sanction-timeline; removed orphaned CATALOG_PAGE_COLUMNS re-export; removed getFurniIconUrl from studio-furni-icons

Build: lint 0, typecheck 0, 3480 tests pass, i18n:check exit 0, colors exit 0. Circular chunk warning (9452/10535/66463) is webpack code-splitting artifact; build succeeds.
This commit is contained in:
openhands committed 2026-10-12 17:42:19 +02:00
1 parent 57529fd1ea
commit 7b249a7222
71 files changed
+1031 -1078

No files matched your search

+4 -2
View File
@@ -1915,7 +1915,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP Management",
@@ -3771,7 +3772,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Media Library",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP управление",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Медийна библиотека",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "Správa IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Knihovna médií",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Du kan ikke udføre handling på en bruger med samme eller højere rang."
},
"ip": {
"title": "IP Management",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Temaændringen kunne ikke gemmes."
},
"media": {
"title": "Mediebibliotek",
+4 -2
View File
@@ -1603,7 +1603,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Sie können keine Aktion an einem Benutzer mit gleichem oder höherem Rang ausführen."
},
"ip": {
"title": "IP-Verwaltung",
@@ -3818,7 +3819,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Die Design-Änderung konnte nicht gespeichert werden."
},
"media": {
"title": "Medienbibliothek",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "Διαχείριση IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Βιβλιοθήκη πολυμέσων",
+4 -2
View File
@@ -1982,7 +1982,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP Management",
@@ -4620,7 +4621,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Media Library",
+4 -2
View File
@@ -1603,7 +1603,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "No puedes actuar sobre un usuario con un rango igual o superior."
},
"ip": {
"title": "Gestión de IP",
@@ -3818,7 +3819,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "No se pudo guardar el cambio de tema."
},
"media": {
"title": "Biblioteca multimedia",
+4 -2
View File
@@ -1915,7 +1915,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP Management",
@@ -3771,7 +3772,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Media Library",
+4 -2
View File
@@ -1603,7 +1603,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Vous ne pouvez pas agir sur un utilisateur ayant un rang égal ou supérieur."
},
"ip": {
"title": "Gestion IP",
@@ -3818,7 +3819,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "La modification du thème n’a pas pu être enregistrée."
},
"media": {
"title": "Médiathèque",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP upravljanje",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Mediateka",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP-kezelés",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Médiatár",
+4 -2
View File
@@ -1951,7 +1951,8 @@
"reasonPlaceholder": "Motivo del ban",
"ban": "Banna utente",
"colUserId": "ID utente",
"lift": "Revoca ban"
"lift": "Revoca ban",
"rankError": "Non puoi agire su un utente con un rango pari o superiore."
},
"ip": {
"title": "Gestione IP",
@@ -4346,7 +4347,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Non è stato possibile salvare la modifica del tema."
},
"media": {
"title": "Libreria media",
+4 -2
View File
@@ -1915,7 +1915,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP Management",
@@ -3771,7 +3772,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Media Library",
+4 -2
View File
@@ -1982,7 +1982,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "U kunt geen actie uitvoeren op een gebruiker met een gelijke of hogere rang."
},
"ip": {
"title": "IP-beheer",
@@ -4349,7 +4350,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "De themawijziging kon niet worden opgeslagen."
},
"media": {
"title": "Mediabibliotheek",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP-administrasjon",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Mediebibliotek",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Nie możesz działać na użytkownika z rangą równą lub wyższą."
},
"ip": {
"title": "Zarządzanie IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Nie udało się zapisać zmiany motywu."
},
"media": {
"title": "Biblioteka multimediów",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Não pode agir sobre um utilizador com um posto igual ou superior."
},
"ip": {
"title": "Gerenciamento de IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Não foi possível guardar a alteração do tema."
},
"media": {
"title": "Biblioteca de mídia",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Nu poți acționa asupra unui utilizator cu un rang egal sau superior."
},
"ip": {
"title": "Managementul IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Modificarea temei nu a putut fi salvată."
},
"media": {
"title": "Biblioteca media",
+4 -2
View File
@@ -1631,7 +1631,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "Нельзя действовать на пользователя с рангом равным или выше вашего."
},
"ip": {
"title": "IP Management",
@@ -3846,7 +3847,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "Не удалось сохранить изменение темы."
},
"media": {
"title": "Media Library",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "Správa IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Knižnica médií",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "ИП менаџмент",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Медиа Либрари",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP-hantering",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Mediebibliotek",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "IP Yönetimi",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Medya Kitaplığı",
+4 -2
View File
@@ -1633,7 +1633,8 @@
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
"lift": "Lift ban",
"rankError": "You cannot act on a user with an equal or higher rank."
},
"ip": {
"title": "Управління IP",
@@ -3848,7 +3849,8 @@
"border2pxsolidred": "border: 2px solid red;",
"CustomHTML": "Custom HTML",
"AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks."
}
},
"saveError": "The theme change could not be saved."
},
"media": {
"title": "Медіатека",