Substitui o portal Vite+Vue puro por Nuxt 3 com BFF embutido (Nitro server
routes) e fluxo de autenticação Keycloak via token-handler pattern.
Server (BFF):
- server/api/auth/{login,callback,refresh,logout,me}.ts — Keycloak PKCE
- server/api/proxy/[...path].ts — proxy autenticado pro core-api com tenant
- server/utils/{session,keycloak,pkce,redis,tenant,prefeitura}.ts
- server/middleware/csrf.ts — Origin check + header X-Requested-With
Auth (token-handler pattern):
- JWT vive só server-side em Redis; cliente recebe cookie session-id opaco
- Refresh transparente quando access_token expira
- Multi-tenant via hostname → X-Municipio/X-Dominio injetados no proxy
- Realm dedicado: modumfiscal-portal-{env}
Frontend (Nuxt):
- src/pages/** (file-based routing) substitui src/views/
- Plugins SSR: prefeitura (bootstrap pré-hidratação) + auth (hidrata user via /api/auth/me)
- Composables useAuth, useApi, useLoginModal, useFocusLoginInput
- Modal global de login quando middleware /portal/** bloqueia
- Splash overlay no boot esconde flash do preset inicial pro tema dinâmico
- DocumentoInput bloqueia campo quando user autenticado (pré-preenche em certidão/IPTU)
Removidos:
- index.html, vite.config.js, src/main.js, src/router/
- src/config/apiClient.js (substituído por \$fetch via /api/proxy)
- src/services/{auth,prefeitura}Service.js (lógica migrada pra composables/plugins)
- src/mocks/ (não mais usado)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
27 lines
1.7 KiB
Plaintext
27 lines
1.7 KiB
Plaintext
# Copie este arquivo para .env e preencha os valores.
|
|
# .env é ignorado pelo git — nunca commitar credenciais reais neste arquivo de exemplo.
|
|
#
|
|
# Em produção, popule essas variáveis via secret manager do orquestrador (Docker, K8s, etc.).
|
|
|
|
# ─── Core API ────────────────────────────────────────────────────────────────
|
|
# URL base da API REST consumida pelo BFF (server-side apenas).
|
|
NUXT_CORE_API_URL=https://sistema.modumfiscal.com.br
|
|
|
|
# ─── Keycloak (realm dedicado do portal público) ─────────────────────────────
|
|
NUXT_KEYCLOAK_URL=https://keycloakprod.modumfiscal.com.br
|
|
NUXT_KEYCLOAK_REALM=modumfiscal-portal-dev
|
|
NUXT_KEYCLOAK_CLIENT_ID=portal-modumfiscal-bff
|
|
# Client confidential — gere no Keycloak (Clients → Credentials → Client secret).
|
|
NUXT_KEYCLOAK_CLIENT_SECRET=SUBSTITUIR_PELO_VALOR_REAL_NO_ENV_LOCAL
|
|
|
|
# ─── Sessão (Token-handler pattern) ──────────────────────────────────────────
|
|
# Redis para armazenar tokens server-side e PKCE state.
|
|
NUXT_REDIS_URL=redis://localhost:6379
|
|
# Segredo para derivar o cookie de sessão (mín. 32 chars; rotacionar em incidente).
|
|
# Gere com: openssl rand -base64 32 OU node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
|
NUXT_COOKIE_SECRET=GERE_LOCALMENTE_NUNCA_COMMITAR_SECRET_REAL
|
|
# TTL da sessão em segundos (default: 8h = 28800).
|
|
NUXT_SESSION_TTL_SECONDS=28800
|
|
# TTL do PKCE state em segundos (default: 5min = 300).
|
|
NUXT_PKCE_TTL_SECONDS=300
|