Skip to content

fix(integrations): resolve BYO OAuth connect chain (tenant, envelope, redirect_uri)#28

Merged
DavidsonGomes merged 1 commit into
developfrom
feat/oauth-byo-tenant-and-envelope
Jul 11, 2026
Merged

fix(integrations): resolve BYO OAuth connect chain (tenant, envelope, redirect_uri)#28
DavidsonGomes merged 1 commit into
developfrom
feat/oauth-byo-tenant-and-envelope

Conversation

@DavidsonGomes

Copy link
Copy Markdown
Member

Problema

Conectar ferramentas BYO OAuth (Google Calendar, GitHub, e os demais providers MCP) no editor de agente falhava. Eram bugs empilhados, cada fix desmascarando o próximo.

Bugs corrigidos

  1. redirect_uri null → 500: o CRM não guarda redirect_uri; o processor exige os 3 campos. Passa a derivar automaticamente <Origin>/<slug>/callback do header Origin da request do browser (a rota de callback é fixa, só o host do front muda) — sem env. Novo src/api/oauth_redirect.py + wiring nos 11 route files. Google usa hífen (google-calendar).

  2. Envelope não desaninhado → 500: global_config_service lia os campos na raiz, mas o CRM responde {success, data:{...}, meta} (success_response), então client_id/secret/redirect vinham todos None. Helper _unwrap_envelope (defensivo: só desaninha quando o shape é o envelope) nos 13 fetchers.

  3. NameError mascarando 503: get_configuration_endpoint chamava error_response(request=request) sem request no escopo → NameError, que o EvoAuth middleware (catch-all) relabelava como 503 "Authentication service error", escondendo o erro real. error_response.request agora é opcional (path/method = None quando ausente).

  4. 403 do core-service: o middleware enterprise de tenant no core-service é fail-closed em X-Evo-Tenant-Id ausente. O http_client interno do MCPOAuthService só mandava Authorization: Bearer, sem o tenant, então toda leitura/escrita de integração (PKCE store, load credentials) levava 403 forbidden. Threada o tenant_id (já resolvido no dep via current_context_id) até o http_client como X-Evo-Tenant-Id, em MCPOAuthService + as 10 subclasses e seus deps.

Notas

  • O header X-Evo-Tenant-Id só é anexado quando há tenant (no-op em community/standalone).
  • Só community (processor). Sem gem, sem env, sem mudança de contrato no CRM.
  • Provado server-side: authorize do Calendar retorna URL com redirect_uri=<origin>/google-calendar/callback; credenciais resolvem via método real; http_client carrega o tenant header quando bindado.

Teste

python3 -m py_compile OK em todos os arquivos. Falta o teste E2E de "Conectar" no browser (redirect ao provider) — depende do OAuth app do usuário ter <front-origin>/<slug>/callback registrado.

… redirect_uri)

Corrige a conexao de ferramentas BYO OAuth (Google Calendar, GitHub e os
demais providers MCP) no editor de agente. Eram bugs empilhados, cada um
mascarando o proximo:

1. redirect_uri null -> 500: o CRM nao guarda redirect_uri e o processor
   exige os 3 campos. Deriva `<Origin>/<slug>/callback` do header Origin da
   request do browser (rota fixa, so o host do front muda), sem env. Novo
   src/api/oauth_redirect.py + wiring nos 11 route files.

2. Envelope nao desaninhado: global_config_service lia os campos de
   credencial na RAIZ, mas o CRM responde `{success, data:{...}, meta}`.
   Todos os campos vinham None -> 500. Helper `_unwrap_envelope` (defensivo)
   nos 13 fetchers.

3. NameError mascarando 503: get_configuration_endpoint chamava
   error_response(request=request) sem request no escopo -> NameError, que o
   EvoAuth middleware relabelava como 503. error_response.request agora e
   opcional (path/method None quando ausente).

4. 403 do core-service: o middleware enterprise de tenant e fail-closed em
   X-Evo-Tenant-Id ausente. O http_client interno do MCPOAuthService so
   mandava Authorization Bearer, sem o tenant, entao toda leitura/escrita de
   integracao (PKCE store, load credentials) levava 403 forbidden. Threada o
   tenant_id (ja resolvido no dep via current_context_id) ate o http_client
   como X-Evo-Tenant-Id, em MCPOAuthService e nas 10 subclasses + deps.

Header so e anexado quando ha tenant (no-op community/standalone).

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Sorry @DavidsonGomes, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@DavidsonGomes DavidsonGomes merged commit f47e8af into develop Jul 11, 2026
4 checks passed
@DavidsonGomes DavidsonGomes deleted the feat/oauth-byo-tenant-and-envelope branch July 11, 2026 14:22
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.

1 participant