fix(cli,web): команды аккаунтов в CLI и повтор запросов при 429

- deploy/glchat-cli.sh: reset-password/make-admin/remove-admin больше не
  заглушки «появится в фазе 1» (AGENT.md 10.7), добавлены totp-setup,
  totp-reset и delete-user; подкоманды обслуживания идут через общий app_cli
- cmd/glchat: команда delete-user (мягкое удаление как в админ-панели,
  защита от удаления инстанс-админа и подтверждение --yes), исправлен
  потерянный комментарий cliCleanup
- deploy/install.sh: убраны устаревшие формулировки про фазу 1
- web: политика повторов запросов — 429 повторяется с паузой retry_after_ms
  (до двух раз, не дольше 5 с), 4xx не повторяются; тесты web/tests/queryRetry.test.ts
- scripts/test-install.sh: проверка, что заглушек в CLI не осталось
This commit is contained in:
2026-09-26 18:32:51 +03:00
parent e7c9c93443
commit b9d458e133
7 changed files with 265 additions and 22 deletions
+29 -14
View File
@@ -36,9 +36,12 @@ glchat — управление инстансом
glchat restore <файл> восстановление из бэкапа
glchat verify-backup <файл> проверить бэкап, не трогая данные
glchat update [--channel X] обновление (бэкап → pull → up → smoke)
glchat reset-password <email> сброс пароля пользователя (фаза 1)
glchat make-admin <email> выдать права инстанс-админа (фаза 1)
glchat remove-admin <email> снять права инстанс-админа (фаза 1)
glchat reset-password <email> сброс пароля пользователя; --password <пароль>
glchat make-admin <email> выдать права инстанс-админа
glchat remove-admin <email> снять права инстанс-админа
glchat totp-setup <email> включить 2FA и напечатать секрет с резервными кодами
glchat totp-reset <email> удалить секрет 2FA (потеря устройства и кодов)
glchat delete-user <email> мягко удалить аккаунт (нужен --yes)
glchat unban <ip> снять бан fail2ban (jail'ы этого хоста;
на внешнем прокси — fail2ban-client там)
glchat fail2ban-status статус jails и забаненных IP
@@ -223,32 +226,43 @@ cmd_verify_backup() {
GLCHAT_ETC_DIR="${GLCHAT_ETC_DIR}" bash "${GLCHAT_ETC_DIR}/verify-backup.sh" "$@"
}
cmd_reindex() {
# app_cli выполняет подкоманду обслуживания внутри контейнера приложения
# (AGENT.md 10.7): команды, которым нужна БД, живут в Go-бинарнике, а shell-обёртка
# доставляет их с хоста.
app_cli() {
require_stack
${COMPOSE} exec -T app glchat reindex
${COMPOSE} exec -T app glchat "$@"
}
# cmd_reindex пересобирает индекс полнотекстового поиска (AGENT.md 10.7).
cmd_reindex() {
app_cli reindex
}
# cmd_vapid_keys печатает новую пару VAPID-ключей (Фаза 7): строки из вывода
# добавляются в .env инстанса вручную — смена ключа отзывает все подписки,
# поэтому автоматически её никто не делает.
cmd_vapid_keys() {
require_stack
${COMPOSE} exec -T app glchat vapid-keys "$@"
app_cli vapid-keys "$@"
}
# cmd_cleanup запускает чистку данных вручную: те же правила, что у
# периодического обслуживания (AGENT.md 6.4).
cmd_cleanup() {
require_stack
${COMPOSE} exec -T app glchat cleanup "$@"
app_cli cleanup "$@"
}
# cmd_create_user создаёт аккаунты командой обслуживания: регистрация может
# быть выключена, а для нагрузочного теста нужны десятки пользователей
# (AGENT.md 10.7, 11.4). Флаг --sessions сразу выдаёт сессии для генератора.
cmd_create_user() {
require_stack
${COMPOSE} exec -T app glchat create-user "$@"
app_cli create-user "$@"
}
# cmd_account обслуживает аккаунт: сброс пароля, права инстанс-админа, 2FA и
# мягкое удаление (AGENT.md 10.7) — тонкая обёртка над подкомандами бинарника.
cmd_account() {
app_cli "$@"
}
main() {
@@ -261,9 +275,10 @@ main() {
backup) cmd_backup "$@" ;;
restore) cmd_restore "$@" ;;
update) cmd_update "$@" ;;
reset-password | make-admin | remove-admin)
echo "glchat ${cmd}: команда появится в фазе 1 (аккаунты и инстанс)." >&2
exit 1
reset-password | make-admin | remove-admin | totp-setup | totp-reset | delete-user)
# Команды аккаунтов живут в Go-бинарнике (AGENT.md 10.7): обёртка
# только доставляет их в контейнер приложения.
cmd_account "$cmd" "$@"
;;
unban) cmd_unban "$@" ;;
fail2ban-status) cmd_fail2ban_status "$@" ;;