gabrielb 5a7f4ba07a feat: scaffold inicial do portal público de autoatendimento fiscal
- Vue 3.5 + Vite 8 + PrimeVue 4 (Aura) + TailwindCSS 4 + DM Sans
- Sistema de tenant multi-prefeitura: bootstrap, prefeituraStore, getTenant
- Tema dinâmico por município via applyTemplate (9 paletas)
- Logo e foto de fundo resolvidos a partir do VITE_API_URL + path relativo
- HomeView: hero split com foto/gradiente, carousel de avisos, cards de serviços
- LoginView: fluxo 2 etapas (documento na home → senha em /login)
- Roteamento completo: público (/), serviços (/servicos/*), portal autenticado (/portal/*)
- authStore + authService estruturados para Keycloak PKCE (integração pendente)
- Placeholders para todas as telas da área logada

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:20:07 -03:00

35 lines
1.3 KiB
JavaScript

/**
* Serviço de autenticação — Keycloak PKCE
*
* Fluxo:
* 1. Home coleta o documento (CPF/CNPJ)
* 2. Redireciona para /login?doc=XXX
* 3. LoginView exibe o documento e solicita a senha
* 4. Ao submeter, este serviço inicia o PKCE e redireciona ao Keycloak
* 5. Keycloak devolve ao callback com o code
* 6. handleCallback troca o code pelo token e salva na authStore
*/
const KEYCLOAK_BASE = import.meta.env.VITE_KEYCLOAK_URL ?? 'https://sso.modumfiscal.com.br/realms/modumfiscal-dev'
const CLIENT_ID = import.meta.env.VITE_KEYCLOAK_CLIENT_ID ?? 'portal-modumfiscal'
const REDIRECT_URI = `${window.location.origin}/callback`
export const authService = {
async iniciarLogin(documento) {
// Implementar PKCE com pkce-challenge quando integrar com Keycloak
// Por ora redireciona para /login com o documento
return { documento }
},
async handleCallback(code) {
// Trocar code por token via Keycloak
// A ser implementado na fase de integração
throw new Error('Keycloak callback não implementado nesta fase')
},
logout() {
const logoutUrl = `${KEYCLOAK_BASE}/protocol/openid-connect/logout?redirect_uri=${encodeURIComponent(window.location.origin)}`
window.location.href = logoutUrl
},
}