feat(instance): админ-панель с лимитами медиа и действиями над пользователями

- лимиты медиа живут в настройках инстанса (миграция 00016): аватары,
  оформление сервера, эмодзи, звуки и галерея; все загрузки берут предел
  оттуда, значения по умолчанию — из AGENT.md 7.7
- действия администратора: временный пароль (показывается один раз, сессии
  отзываются), выход со всех устройств, мягкое удаление пользователя
  (сообщения и аудит остаются), переименование и удаление любого сервера
- админ-панель разбита на вкладки: обзор и здоровье, лимиты, пользователи,
  серверы, аудит; смена администраторов подтверждается личностью (step-up)
- тесты: Go (действия администратора, лимит эмодзи из настроек) и Vitest
  (вкладки, сброс пароля, выход, удаление, переименование сервера)
This commit is contained in:
2026-09-21 22:37:47 +03:00
parent dd4432452c
commit ef871bcd96
20 changed files with 1617 additions and 204 deletions
+41
View File
@@ -832,6 +832,47 @@
"gateway": "Gateway",
"metrics": "Metrics"
}
},
"tabs": {
"label": "Admin panel sections",
"overview": "Overview",
"limits": "Limits",
"users": "Users ({{count}})",
"guilds": "Servers ({{count}})",
"audit": "Audit"
},
"limits": {
"title": "Limits and registration",
"description": "Limits apply to the whole instance: media sizes are checked on every upload.",
"registration": "Registration is open",
"creation": "Users may create servers",
"guilds": "Servers per user",
"members": "Members per server",
"message": "Message length",
"avatar": "Avatar, MB",
"guildImage": "Server artwork, MB",
"cosmetic": "Frames and icons, MB",
"emoji": "Emoji, MB",
"sound": "Sounds, MB",
"invalidSize": "Sizes must be positive numbers in megabytes",
"invalidNumber": "Limits must be numbers",
"saved": "Limits saved."
},
"usersTitle": "Instance users",
"guildsTitle": "Instance servers",
"actions": {
"makeAdmin": "Make admin",
"removeAdmin": "Revoke admin",
"resetPassword": "Reset password",
"logout": "Log out everywhere",
"delete": "Delete",
"deleteConfirm": "Delete user {{name}}? They leave all servers, message history stays.",
"loggedOut": "User sessions revoked.",
"passwordOnce": "Temporary password (shown once)",
"openSettings": "Settings",
"rename": "Rename",
"newName": "New server name",
"deleteGuildConfirm": "Delete server “{{name}}” with all its channels?"
}
},
"servers": {