Repository navigation
fix(security): Move integração do Notion para Cloud Function e remove segredos do bundle do app - #262
Open
jpmcarrilho wants to merge 4 commits into
Open
jpmcarrilho wants to merge 4 commits into
jpmcarrilho wants to merge 4 commits into
Conversation
…rar Fale Conosco no Notion Move a criação de páginas no banco do Fale Conosco do Notion para uma Cloud Function callable, seguindo o padrão de discordIntegration, para que o token da integração deixe de ser embutido no app. - Exige autenticação, exceto para relatórios do tipo 'erro' - Usa request.auth.uid como senderId em vez de confiar no corpo da requisição - Valida tipo, mensagem e alvo da denúncia e trunca textos no limite do Notion - Gera o protocolo (reportId) no servidor e retorna apenas id/object/reportId - Runtime nodejs22 (nodejs20 é descomissionado em 2026-10-30) - config_all.sh passa somente NOTION_FALECONOSCO_KEY/ID para a função - Documenta as variáveis no .env.sample e no README Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ation
O app deixa de chamar a API do Notion diretamente com NOTION_FALECONOSCO_KEY
e passa a usar firebaseFunctions.httpsCallable('notionIntegration').
O remetente passa a ser identificado no servidor pelo token de autenticação,
então userId sai de NotionContactUsOptions e dos dois chamadores.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… do app SENTRY_AUTH_TOKEN, NOTION_FALECONOSCO_KEY/ID e NOTION_APPICONS_KEY/ID eram importados de @env e, por isso, embutidos pelo react-native-dotenv no bundle JS distribuído nas lojas e nas atualizações OTA. - SENTRY_AUTH_TOKEN só é necessário em tempo de build (upload de source maps) - NOTION_FALECONOSCO_* agora vivem apenas na função notionIntegration - NOTION_APPICONS_* não eram usados em nenhum lugar do app Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…RY_AUTH_TOKEN no EAS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Descrição
Continuação do #257: remove do bundle JS do app os últimos segredos importados de
@enve move a integração com o Notion para uma Cloud Function, no mesmo padrão dediscordIntegration/stripeApi.Servidor (
server-functions/notionIntegration)notionIntegration(southamerica-east1, runtimenodejs22) que cria a página no banco do Fale Conosco do Notion.type: 'erro'(relatórios anônimos do ErrorBoundary, igual aodiscordIntegration).senderIdvem derequest.auth.uid, não do corpo da requisição (antes qualquer usuário podia informar outrouserId).type/message, normalizareportedTargetdesconhecido paranonee trunca textos no limite de 2000 caracteres do Notion.reportId(protocolo) passa a ser gerado no servidor; o app recebe apenas{ id, object, reportId }.config_all.shganha o caso*notion*. Sem ele, a função receberia todas as variáveis do.env(incluindoSTRIPE_SECRET_KEY)..env.sample,server-functions/README.mdenotionIntegration/README.md.App
sendMessageToNotionContactUschamafirebaseFunctions.httpsCallable('notionIntegration');userIdsai deNotionContactUsOptionse dos dois chamadores (ContactUsInsertMessage e errorBoundaryHandler).environment/index.tseenv.d.ts:SENTRY_AUTH_TOKEN,NOTION_FALECONOSCO_KEY/ID,NOTION_APPICONS_KEY/ID(NOTION_APPICONS_*não era usado em nenhum lugar).SENTRY_AUTH_TOKENfica apenas como variável do EAS com visibilidadesecret(build time).app/README.mddocumenta quais variáveis podem ficar no.envdo app.Demais variáveis de
@envrevisadas. Todas são públicas por natureza (config do Firebase client, IDs OAuth,STRIPE_PUBLISHABLE_KEY,DSN_SENTRY), com duas verificações pendentes:ALGOLIA_KEYdo app precisa ser uma chave Search-Only (o app só fazsearch).Coordenação com
feat/upgrade-expo-sdk-57. Aquela branch ainda não foi integrada e não altera nenhum arquivo deste PR. UseifirebaseFunctions.httpsCallablecomo as demais chamadas emdev; a migração para a API modular (httpsCallable(getFunctions(getApp(), 'southamerica-east1'), 'notionIntegration')) entra junto com as outras na branch do Firebase.NOTION_FALECONOSCO_KEYeNOTION_FALECONOSCO_IDno.envdeserver-functions, depoisbash config_all.shecd notionIntegration && npm run deploy, antes de publicar este código no app.eas env:set --name SENTRY_AUTH_TOKEN --value <token> --environment production --visibility secret(edevelopment, se necessário).NOTION_*eSENTRY_AUTH_TOKENdo.envlocal de cada dev e da página de variáveis no Notion.Teste
server-functions/notionIntegration:npm run buildsem erros. Teste local do handler compilado (notionIntegration.run(...)), com a API do Notion mockada:erro→unauthenticatederro→ gravasenderId: anonymoussenderId= uid do token, ignorandouserIdenviado pelo clienteinvalid-argumentinternalconfig_all.shcom.envfictício:notionIntegrationrecebe somente as 2 variáveis do Notion; discord e stripe inalterados.react-native-dotenvsobreenvironment/index.tscom o.envreal. Emdev, os 5 valores aparecem no JS gerado; nesta branch, nenhum.tsce ESLint sem erros novos nos arquivos alterados. O conjunto de erros dotscé idêntico ao dedev.Referências
security/remove-secrets): Stripe e Discord movidos para o backend@envsão inlined no bundlesecretnodejs20descomissionado em 2026-10-30🤖 Generated with Claude Code