Skip to content

fix(auth): credenciais DPAPI sem BOM e API key aceita no modo headless - #43

Merged
ImPedro29 merged 2 commits into
verbeux-ai:mainfrom
graseeel:agents/issue-77-dpapi-bom-upstream
Aug 28, 2026
Merged

fix(auth): credenciais DPAPI sem BOM e API key aceita no modo headless#43
ImPedro29 merged 2 commits into
verbeux-ai:mainfrom
graseeel:agents/issue-77-dpapi-bom-upstream

Conversation

@graseeel

@graseeel graseeel commented Aug 26, 2026

Copy link
Copy Markdown

Dois ajustes de autenticação:

1. Windows: arquivo DPAPI sem BOM UTF-8

O update() de windowsCredentialStorage.ts gravava com Encoding.UTF8, que no PowerShell 5.1 emite BOM (EF BB BF). Passa a usar UTF8Encoding($false) e valida a escrita relendo os bytes e comparando com o base64 exato.

2. API key Verboo como sessão headless

O gate de inicialização aceitava apenas OAuth: uma API key vbk_ válida não autenticava o agente headless (o desktop injeta a chave, mas o gate não a consultava). A chave agora é aceita como fallback de sessão, validada com Bearer no /router/v1/models (o /api/me rejeita API keys — verificado). OAuth continua sendo o caminho primário; chave inválida gera "API key inválida ou expirada".

Nota para revisão: os fluxos de termos e entitlement usam endpoints que só aceitam OAuth; no caminho de API key eles são pulados. Se preferirem impor termos também para API keys, dá para criar uma checagem via router — fica a critério de vocês.

Testes

  • Testes do script DPAPI com prova por mutação; testes do gate headless (precedência, validação, mensagens).
  • Suíte completa: mesmas falhas pré-existentes da main; nenhuma nova.
  • Limites: DPAPI real (Windows) e chave vbk_ real ficam como verificação de campo.

O update() escrevia o arquivo .secure.dpapi com WriteAllText usando Encoding.UTF8, que no PowerShell 5.1 emite BOM (EF BB BF). Passa a usar UTF8Encoding($false) e valida a escrita relendo os bytes e comparando com o base64 exato.
O gate de inicialização só aceitava OAuth; uma API key vbk_ válida (já usada pelo desktop no router) não autenticava o agente headless. A chave passa a ser aceita como fallback: validada com Bearer no /router/v1/models (o /api/me não aceita API key), com OAuth continuando primário. Chave inválida gera erro específico. Termos e entitlement usam endpoints OAuth-only e são pulados nesse caminho (ver descrição do PR).
@graseeel graseeel changed the title fix(windows): grava credenciais DPAPI sem BOM UTF-8 fix(auth): credenciais DPAPI sem BOM e API key aceita no modo headless Aug 27, 2026
@graseeel
graseeel marked this pull request as ready for review August 27, 2026 15:26
@ImPedro29
ImPedro29 merged commit 4e25498 into verbeux-ai:main Aug 28, 2026
12 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.

2 participants