From de3bbc956469b05df6f7323fed460f5314dea8b6 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Thu, 28 May 2026 04:05:05 +0200 Subject: [PATCH] feat: adiciona rota verify-client-credentials para o client --- dental-server/routes/auth.js | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/dental-server/routes/auth.js b/dental-server/routes/auth.js index b3062e9..59c42c8 100644 --- a/dental-server/routes/auth.js +++ b/dental-server/routes/auth.js @@ -61,6 +61,54 @@ router.post('/login', async (req, res) => { } }); +// ================================================================ +// POST /api/auth/verify-client-credentials - Verificar credenciais do client +// ================================================================ + +router.post('/verify-client-credentials', async (req, res) => { + try { + const { email, password, token } = req.body; + + // Obter a API KEY do ambiente ou usar uma padrão (fallback local temporário) + const serverApiKey = process.env.CLIENT_API_KEY || 'rf-dental-secure-key-2026'; + + // Se o usuário mandou apenas o Token/API Key (fluxo do Client Windows) + if (token) { + if (token === serverApiKey) { + return res.json({ success: true, message: 'API Key válida' }); + } + + // Se não for a API Key padrão, tentamos verificar se é um JWT + try { + const jwt = require('jsonwebtoken'); + const { JWT_SECRET } = require('../auth'); + const decoded = jwt.verify(token, JWT_SECRET); + if (decoded) { + return res.json({ success: true, message: 'JWT válido' }); + } + } catch (e) { + return res.status(401).json({ error: 'Token ou API Key inválidos' }); + } + } + + // Fallback se não mandou token mas mandou email/senha (Não é o padrão atual do client, mas por segurança) + if (email && password) { + const user = await db.get('SELECT * FROM users WHERE email = $1 OR username = $2', [email, email]); + if (user) { + const validPassword = await verifyPassword(password, user.password_hash); + if (validPassword) { + return res.json({ success: true, message: 'Credenciais válidas' }); + } + } + } + + res.status(401).json({ error: 'Credenciais inválidas ou ausentes' }); + } catch (error) { + console.error('Erro na validação do client:', error); + res.status(500).json({ error: 'Erro interno do servidor' }); + } +}); + // ================================================================ // GET /api/auth/verify - Verificar token // ================================================================