viabiliza/service/authService.js
gabriel.pereira 67a0a83a99 FEAT: configurar sessão, rotas de autenticação e processamento de CSV
- Adiciona/ativa express-session antes das rotas para permitir uso de req.session
- Registra rotas de autenticação (/login, /auth/callback) e middleware de proteção
- Serve assets estáticos em /public
- Implementa upload/processing CSV (ViaCEP -> Google geocoding, consulta Geogrid, cache de coordenadas)
- Adiciona endpoints de status/download e tratamento de retries/backoff para chamadas externas
- Melhora logs e handling de erros
2025-10-17 14:12:27 -03:00

43 lines
1.3 KiB
JavaScript

const axios = require("axios");
require("dotenv").config();
const tenantId = process.env.OAUTH_TENANT_ID;
const clientId = process.env.OAUTH_CLIENT_ID;
const clientSecret = process.env.OAUTH_CLIENT_SECRET;
const redirectUri = process.env.OAUTH_REDIRECT_URI;
// Função que gera o link de login para o usuário
function getAuthUrl() {
const params = new URLSearchParams({
client_id: clientId,
response_type: "code",
redirect_uri: redirectUri,
response_mode: "query",
scope: "offline_access https://graph.microsoft.com/.default",
state: "12345",
});
return `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize?${params.toString()}`;
}
// Troca o "authorization code" por tokens
async function getTokenFromCode(authCode) {
const url = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;
const params = new URLSearchParams({
client_id: clientId,
scope: "https://graph.microsoft.com/.default",
code: authCode,
redirect_uri: redirectUri,
grant_type: "authorization_code",
client_secret: clientSecret,
});
const response = await axios.post(url, params.toString(), {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
return response.data;
}
module.exports = { getAuthUrl, getTokenFromCode };