diff --git a/server.js b/server.js index 5269320..81e121b 100644 --- a/server.js +++ b/server.js @@ -3,8 +3,6 @@ require('dotenv').config(); // --- OAuth Office 365 --- const querystring = require('querystring'); -const session = require('express-session'); - const express = require('express'); const multer = require('multer'); @@ -433,102 +431,11 @@ app.get('/consulta-cep', async (req, res) => { return res.json({ endereco, latitude: lat, longitude: lon, distancia: '5km +' }); } catch (err) { console.error(err); - return res.status(500).json({ error: 'erro na consulta' }); + return res.status(500).json({ error: 'Erro na consulta' }); } }); - - -// Configura sessão (precisa vir antes das rotas) -app.use(session({ - secret: process.env.SESSION_SECRET, - resave: false, - saveUninitialized: false -})); - -// Middleware simples pra proteger rotas -function ensureAuthenticated(req, res, next) { - if (req.session.user) return next(); - return res.redirect('/login'); -} - -// === LOGIN COM OFFICE 365 === - -// Inicia o login (redireciona pro Microsoft) -app.get('/login', (req, res) => { - const authUrl = new URL(`https://login.microsoftonline.com/${process.env.OAUTH_TENANT_ID}/oauth2/v2.0/authorize`); - authUrl.search = new URLSearchParams({ - client_id: process.env.OAUTH_CLIENT_ID, - response_type: 'code', - redirect_uri: process.env.OAUTH_REDIRECT_URI, - response_mode: 'query', - scope: process.env.OAUTH_SCOPES, - state: '12345' - }).toString(); - - res.redirect(authUrl); +app.listen(PORT, () => { + console.log(`Servidor rodando na porta ${PORT}`); }); -// Callback chamado pela Microsoft após login -app.get('/auth/callback', async (req, res) => { - const code = req.query.code; - if (!code) return res.status(400).send('Código de autorização não encontrado.'); - - try { - // Troca o código pelo token - const tokenUrl = `https://login.microsoftonline.com/${process.env.OAUTH_TENANT_ID}/oauth2/v2.0/token`; - const body = querystring.stringify({ - client_id: process.env.OAUTH_CLIENT_ID, - scope: process.env.OAUTH_SCOPES, - code, - redirect_uri: process.env.OAUTH_REDIRECT_URI, - grant_type: 'authorization_code', - client_secret: process.env.OAUTH_CLIENT_SECRET - }); - - const tokenResponse = await axios.post(tokenUrl, body, { - headers: { 'Content-Type': 'application/x-www-form-urlencoded' } - }); - - const accessToken = tokenResponse.data.access_token; - - // Busca dados do usuário logado (Graph API) - const userResponse = await axios.get('https://graph.microsoft.com/v1.0/me', { - headers: { Authorization: `Bearer ${accessToken}` } - }); - - // Guarda usuário e token na sessão - req.session.user = userResponse.data; - req.session.accessToken = accessToken; - - console.log('Usuário logado:', userResponse.data); - - // Redireciona para a página principal autenticada - res.redirect('/home'); - } catch (error) { - console.error('Erro no login OAuth:', error.response?.data || error.message); - res.status(500).send('Erro ao autenticar com Office 365.'); - } -}); - -// Página protegida (somente logados) -app.get('/home', ensureAuthenticated, (req, res) => { - const user = req.session.user; - res.send(` -
Email: ${user.mail || user.userPrincipalName}
- Sair - `); -}); - -// Logout (remove sessão) -app.get('/logout', (req, res) => { - req.session.destroy(() => { - res.redirect('/'); - }); -}); -// Inicia o servidor - -app.listen(PORT, () => console.log(`Server running on http://localhost:${PORT}`)); - - \ No newline at end of file