feat(admin): repor palavra-passe e remover segundo factor no modal

Duas operacoes que so existiam pela linha de comandos, e que sao precisamente
as que alguem pede ao telefone: esqueci-me da palavra-passe, perdi o
autenticador.

A reposicao termina todas as sessoes daquele utilizador, incluindo a que esta
aberta nesse momento. Um administrador a repor uma palavra-passe esta a fazer
uma passagem de conta ou a responder a um comprometimento, e nos dois casos as
sessoes abertas com a palavra-passe anterior nao podem sobreviver. Exige os
mesmos 12 caracteres que os outros caminhos, para a consola nao ser a maneira
de contornar a regra.

Remover o segundo factor apaga tambem os codigos de recuperacao: foram
gerados contra o segredo antigo, nao servem contra um novo, e deixa-los para
tras e um segundo conjunto de credenciais que ninguem esta a seguir.

A rota do /totp teve de ficar acima do DELETE generico de /mailboxes/. O
generico apanha qualquer caminho por baixo desse prefixo, por isso carregar em
"remover segundo factor" era encaminhado para apagar a caixa do utilizador --
so nao a apagou porque o id saia malformado e o Postgres recusou o uuid. Ha um
teste so para essa ordem.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Opus 5 committed 2026-08-24 11:43:53 -03:00
1 parent bb12e603a3
commit 1e7c6a118c
7 files changed
+309 -3

No files matched your search

+7 -1
View File
@@ -106,7 +106,13 @@
"runChecks": "Correr",
"checksRun": "{count} verificacoes",
"pickADomain": "Escolha um dominio.",
"aliasSource": "Endereco do apelido"
"aliasSource": "Endereco do apelido",
"setPassword": "Definir palavra-passe",
"atLeast12": "Pelo menos 12 caracteres",
"passwordReset": "Palavra-passe alterada. As sessoes deste utilizador foram terminadas.",
"passwordResetWarning": "Termina todas as sessoes deste utilizador, incluindo a que esteja aberta agora.",
"removeTotp": "Remover segundo factor",
"totpRemoved": "Segundo factor removido, com os codigos de recuperacao."
},
"auth": {
"adminLoginTitle": "Console de administração",