fix(admin): dominio trocado ao criar, apelidos escondidos e quota a zero
Criar "lucas@cienciaembarcada.com.br" criava "lucas@lucasrguerra.dev.br". O formulario partia o endereco e deitava fora a metade do dominio, e nao enviava domain_id nenhum -- o servidor caia entao no dominio do admin com sessao iniciada. Passa a ser parte local mais um dominio escolhido de uma lista: a metade que decide o endereco deixa de poder ser descartada em silencio. Apelidos de outros dominios estavam escondidos, e a culpa era minha: procurava so no dominio onde a morada do proprio utilizador vive. Uma caixa recebe postmaster, abuse, dmarc e tlsrpt de varios dominios ao mesmo tempo, por isso o painel mostrava quatro onde entregavam oito. Ha um teste que falha com a consulta antiga. Os apelidos passam a poder ser criados e removidos dentro do modal. O dominio sai do endereco escrito, para nao repetir a armadilha do formulario de cima. USER, DOMAIN_ADMIN e SUPER_ADMIN eram constantes impressas no ecra, logo ficavam em ingles em qualquer idioma. Um papel desconhecido continua a ser mostrado tal como esta guardado, porque quem o ve precisa de saber o que a base de dados tem. A quota estava certa e mal mostrada. used_bytes vale 140771 -- os 137,5 KB reais -- mas a pagina arredondava para megabytes inteiros, portanto qualquer coisa abaixo de 512 KB lia-se "0 / 2 MB" e a barra ficava vazia, calculada sobre os megabytes ja arredondados. Passa a formatar a partir dos bytes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f801894f53
commit
bb12e603a3
9 files changed
+308
-35
No files matched your search
@@ -826,6 +826,26 @@ describeDb("auth API against a real database", () => {
|
||||
expect(res.status).toBe(404);
|
||||
});
|
||||
|
||||
// One mailbox commonly receives postmaster, abuse, dmarc and tlsrpt for
|
||||
// several domains at once. Scoping the lookup to the domain the user's own
|
||||
// address sits in hid every alias belonging to the others.
|
||||
it("lists aliases from every domain, not only the user's own", async () => {
|
||||
const mine = `cross-domain-alias@pagedtest-${PAGED_DOMAIN}.invalid`;
|
||||
await query(
|
||||
`INSERT INTO aliases (domain_id, source_address, destination_addresses)
|
||||
VALUES ($1, $2, ARRAY[$3]) ON CONFLICT DO NOTHING`,
|
||||
[PAGED_DOMAIN, mine, userEmail()],
|
||||
);
|
||||
|
||||
const res = await get(`/api/v1/admin/mailboxes/${USER_ID}/aliases`, admin);
|
||||
expect(res.status).toBe(200);
|
||||
const sources = (res.body as unknown as { source_address: string }[]).map((a) => a.source_address);
|
||||
|
||||
// USER_ID lives in DOMAIN_ID; this alias lives in PAGED_DOMAIN and
|
||||
// delivers to them all the same.
|
||||
expect(sources).toContain(mine);
|
||||
});
|
||||
|
||||
it("answers 404 for a user that does not exist rather than leaking the difference", async () => {
|
||||
const res = await get(`/api/v1/admin/mailboxes/44444444-4444-4444-4444-444444444444/aliases`, admin);
|
||||
expect(res.status).toBe(404);
|
||||
|
||||
Reference in new issue
Block a user