Skip to content

Origem do CORS explícita e configurável, com aviso para '*' (#119)#125

Merged
leonelsanchesdasilva merged 2 commits into
DesignLiquido:principalfrom
oxbar:corrige-cors-gitignore-119
Jul 14, 2026
Merged

Origem do CORS explícita e configurável, com aviso para '*' (#119)#125
leonelsanchesdasilva merged 2 commits into
DesignLiquido:principalfrom
oxbar:corrige-cors-gitignore-119

Conversation

@oxbar

@oxbar oxbar commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Origem do CORS explícita e configurável em configuracao.delprops, com aviso para '*'

Fixes #119

Contexto

Atende diretamente à direção apontada no comentário da issue ("Estou querendo colocar isso explicitamente em configuracao.delprops"): a origem do CORS agora é uma propriedade declarada, visível e documentada — em vez de um cors() sem opções liberando '*' de forma invisível.

O que muda

Nova propriedade liquido.roteador.corsOrigem (padrão '*'):

liquido.roteador.cors = verdadeiro
// CORS liberado para qualquer origem ('*') é adequado apenas para desenvolvimento.
// Em produção, restrinja para o(s) domínio(s) da aplicação, separados por vírgula.
liquido.roteador.corsOrigem = '*'
  • Aceita origem única ('https://meusite.com.br') ou várias separadas por vírgula;
  • Encanada por ConfiguracaoRoteadorRoteadorInterfaceRoteador, com a validação natural do centro de configurações e entrada no esquema delprops (com detalhe em português);
  • Roteador.resolverOpcoesCors() traduz o valor para as opções do middleware: '*' mantém o comportamento liberado; qualquer outro valor vira { origin: [...] }. Espaços tolerados, itens vazios ignorados, valor vazio volta ao padrão.

Aviso explícito na inicialização quando CORS está habilitado com '*':

[Liquido] CORS habilitado para qualquer origem ('*'). Adequado apenas para
desenvolvimento; em produção, restrinja com
liquido.roteador.corsOrigem = 'https://seudominio.com.br' em configuracao.delprops.

Templates e documentação: os 4 templates do scaffold (Delégua/Pituguês × MVC/API REST) e o configuracao.delprops do próprio repositório declaram corsOrigem explicitamente com o comentário de aviso; README documenta a propriedade nos exemplos de configuração.

Sobre a segunda parte da issue (.gitignore)

Correção honesta ao relatório de origem: a geração de .gitignore já existe na principal e no pacote 1.4.0 publicado — gerarRepositorioGit escreve um .gitignore completo (node_modules, dist, .env*, coverage, logs, .DS_Store etc.) quando o Git é aceito. O achado B4 estava incorreto nesse ponto: nos testes do relatório, a pergunta de Git foi respondida com "não", e o caminho "sim" não foi validado. Nenhuma mudança foi necessária; fica o registro para fechar essa metade da issue como já resolvida.

Validação de ponta a ponta

Código compilado (tsc) sobreposto ao pacote liquido@1.4.0 instalado, projeto REST real:

Configuração Requisição Resultado
corsOrigem = 'https://meusite.com.br' Origin: https://meusite.com.br Access-Control-Allow-Origin: https://meusite.com.br
corsOrigem = 'https://meusite.com.br' Origin: https://malicioso.com sem header (origem bloqueada) ✓
corsOrigem = 'https://meusite.com.br' boot sem aviso ✓
corsOrigem = '*' Origin: https://qualquer.com Access-Control-Allow-Origin: * + aviso em português no boot ✓

Testes

Novo testes/infraestrutura/cors-origem.test.ts com 13 casos: parsing de origens (única, múltiplas com espaços, vazia), aviso condicional na inicialização (com '*', sem com origem restrita, sem com CORS desligado), repasse da configuração ao roteador, valor padrão, e presença da declaração explícita nos 4 templates. Mocks de centro-configuracoes.test.ts atualizados para o novo método da interface.

Suíte unitária completa: 240 testes passando
npx tsc --noEmit: sem erros

Compatibilidade

Sem quebra: corsOrigem tem padrão '*', preservando o comportamento atual de projetos existentes que só definem cors = verdadeiro — eles apenas passam a ver o aviso de desenvolvimento no boot, que é o objetivo da issue.

…quido#119)

O CORS era habilitado nos templates do scaffold com cors() sem opções,
liberando qualquer origem ('*') de forma invisível: nada no
configuracao.delprops indicava esse comportamento nem alertava que é
adequado apenas para desenvolvimento.

Mudanças:

- Nova propriedade liquido.roteador.corsOrigem (padrão '*'), aceitando
  uma origem única ou várias separadas por vírgula. Encanada por
  ConfiguracaoRoteador -> RoteadorInterface -> Roteador, com validação
  natural do centro de configurações (propriedade declarada existe na
  classe) e entrada no esquema delprops com explicação em português.

- Roteador.resolverOpcoesCors() traduz o valor para as opções do
  middleware cors: '*' mantém o comportamento liberado; qualquer outro
  valor vira lista de origens permitidas ({ origin: [...] }), com
  espaços tolerados e itens vazios ignorados. Valor vazio volta ao
  padrão.

- Aviso explícito na inicialização quando o CORS está habilitado com
  origem '*', orientando a restrição em produção via
  liquido.roteador.corsOrigem em configuracao.delprops.

- Templates do scaffold (Delégua e Pituguês, MVC e API REST) e o
  configuracao.delprops do próprio repositório agora declaram
  corsOrigem = '*' explicitamente, com comentário avisando que o valor
  é adequado apenas para desenvolvimento. README documenta a nova
  propriedade nos exemplos de configuração.

Sobre a segunda parte da issue (.gitignore): a geração já existe na
principal e no pacote 1.4.0 publicado (gerarRepositorioGit escreve um
.gitignore completo quando o Git é aceito) — o achado B4 do relatório
estava incorreto nesse ponto, pois o caminho 'sim' da pergunta de Git
não havia sido validado. Nenhuma mudança necessária.

Validação de ponta a ponta com o código compilado sobreposto ao pacote
liquido@1.4.0:
- corsOrigem = 'https://meusite.com.br': header
  Access-Control-Allow-Origin ecoa apenas a origem permitida; origem
  não listada não recebe o header; sem aviso no boot;
- corsOrigem = '*': header Access-Control-Allow-Origin: * e aviso em
  português na inicialização.

Testes: novo testes/infraestrutura/cors-origem.test.ts com 13 casos
(parsing de origens, aviso condicional na inicialização, repasse da
configuração e presença da declaração explícita nos 4 templates);
mocks de centro-configuracoes atualizados para o novo método. Suíte
unitária completa: 240 testes passando.

Fixes DesignLiquido#119
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown

Coverage report

St.
Category Percentage Covered / Total
🟢 Statements 84.91% 1193/1405
🟡 Branches 64.21% 470/732
🟢 Functions 89.55% 180/201
🟢 Lines 85.49% 1167/1365

Test suite run success

256 tests passing in 26 suites.

Report generated by 🧪jest coverage report action from 6cbbd3f

@leonelsanchesdasilva leonelsanchesdasilva left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Está ótimo. Só pensei em usar outro nome.

Comment thread fontes/delprops/roteador.ts Outdated
Atendendo à revisão do PR: a propriedade passa a se chamar
liquido.roteador.origensCors, nome mais fiel ao conteúdo (aceita uma
ou mais origens separadas por vírgula).

Renomeados em conjunto, por consistência: o campo origensCors em
ConfiguracaoRoteador e em Roteador, o método configurarOrigensCors na
interface e na implementação, a entrada do esquema delprops, os quatro
templates do scaffold, o configuracao.delprops do repositório, o
README, a mensagem de aviso na inicialização e os testes.

Sem mudança de comportamento; suíte completa com 240 testes passando.

@oxbar oxbar left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@leonelsanchesdasilva leonelsanchesdasilva left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obrigado!

@leonelsanchesdasilva
leonelsanchesdasilva merged commit fb2c447 into DesignLiquido:principal Jul 14, 2026
3 checks passed
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.

[BAIXA] CORS liberado por padrão e .gitignore não gerado no scaffold

2 participants