Skip to content

Authorization - #51

Merged
ryangwalchmei merged 17 commits into
mainfrom
authorization
Jul 14, 2026
Merged

Authorization#51
ryangwalchmei merged 17 commits into
mainfrom
authorization

Conversation

@ryangwalchmei

Copy link
Copy Markdown
Owner

No description provided.

Faltou um `return` no final do handler do endpoint de status que não
Padroniza o uso do caractere ` para envolver nomes de campos ou outros
…gin}`

Após a introdução do `webserver` com o `origin` do serviço web, vários
Estes dois módulos estavam listados como dependência para rodar o
…ookie()`

Estes dois métodos do componente `controller.js` estavam declarados como
Este commit conserta o formato da data que utilizei em um dos testes
…s/[username]`

Depois de aplicar o filtro de saída que agora faz não devolver mais a propriedade `email` do `user`,
eu simplesmente removi a expectativa deste valor ser retornado na resposta da API de todos os
testes. E apesar de que isto continua válido, no teste de atualização de email ficou faltando a
cobertura se a propriedade `email` foi atualizada de forma persistende no banco de dados. Então este
commit busca o usuário no banco e verifica se de fato a informação foi alterada como deveria.
Antes estava sendo criado o objeto de router do `next-connect` e contra este objeto é que estava
sendo "anexado" os métodos disponíveis para um certo endpoint na API (incluindo o `handler`) onde,
depois disso, esse objeto de router era exportado como `default` do arquivo do controller. Mas agora
com a refatoração deste commit, todo o export e encadeamento de métodos e handler acontece de uma só
vez, pois fica mais limpo e direto de se ler o código. Isto é um tipo de refatoração que é muito bom
de se fazer quando você tem uma cobertua boa de testes `E2E` 🙏
Aqui eu faço o método `orchestrator.createSession()` aceitar um objeto de `user` por inteiro (ao
invés só do `id`) para ficar com a mesma interface pública de `orchestrator.activateUser()`.
… tests

Os testes de `GET` do endpoint de status utiliza um usuário privilegiado e era um teste que estava
passando mesmo sem ter as migrations executadas. Isto estava funcionando, pois numa bateria completa
de `npm test`, algum outro teste já teria feito o trabalho de criar as tabelas, sendo que quando o
teste era executado de forma isolada, naturalmente quebrava por não ter a tabela `user` (necessária
para criar um usuário privilegiado). Então foi só questão de padronizar o hook principal para limpar
o banco de dados e rodar as migrations igual ao restante dos outros testes.
Esta modificação tem impacto real apenas para navegadores mais antigos, antes de 2020
aproximadamente, porque os navegadores modernos já adotam `SameSite=Lax` por padrão. O
`SameSite=Lax` faz o navegador ser mais criterioso na hora de enviar o cookie de sessão (ou qualquer
outro cookie), principalmente quando a navegação ou a requisição foi iniciada a partir de outro
site, por exemplo, algum hacker tentando interferir em um site que você esteja logado através de um
outro site que ele tenha algum controle. De qualquer forma, mesmo o `SameSite=Lax` sendo o padrão em
navegadores modernos, ainda assim faz sentido declarar ele no código de forma explícita porque deixa
a intenção de segurança documentada, evita depender de comportamento implícito do navegador e abre
as portas para decidirmos mais para frente adotar o valor `Strict` e entender as diferenças. Fora
tudo isso, o impacto da mudança é mínimo e o ganho de clareza e previsibilidade compensa.
Nos testes sobre criar uma sessão válida, a propriedade `expires_at` do objeto de sessão é calculada
na camada da aplicação, antes da persistência. Já a propriedade `created_at` é calculada depois, lá
na camada do banco de dados, o que faz uma sessão não ter exatamente 30 dias de expiração em
milissegundos que seriam `2592000000` e ficando então com valores muito próximos como `2591999991`,
por exemplo, que são 30 dias menos 9 milissegundos. Os testes atuais já tentavam compensar esta
diferença ao zerar os segundos das datas envolvidas, mas é uma alternativa que possui um furo
dependendo de algumas condições como o virar do minuto. Tentei pegar este comportamento para mostrar
em uma aula, mas não consegui e isto estava me agoniando ao pensar que algum aluno poderia ver o seu
CI quebrando e não entender o motivo. Então para já evitar esta situação daqui para frente e depois
de sugestões de vários alunos, optei por adicionar uma margem de erro de 5 segundos entre o que é
esperado (30 dias exatos de expiração) e o que o objeto de sessão de fato possui de tempo de
expiração.
@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clone-tabnews Ready Ready Preview, Comment Jul 14, 2026 6:27pm

@ryangwalchmei
ryangwalchmei merged commit 8152424 into main Jul 14, 2026
6 checks passed
@ryangwalchmei
ryangwalchmei deleted the authorization branch July 14, 2026 18:28
@ryangwalchmei ryangwalchmei linked an issue Jul 14, 2026 that may be closed by this pull request
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sistema de Autorização

1 participant