fix: unifica sistema de modais no admin-clinics e usa JWT_SECRET global no client-auth
continuous-integration/webhook Deploy concluido (rx.scoreodonto.com)

This commit is contained in:
VPS 4 Builder
2026-05-27 02:39:45 +02:00
parent 9f4538786b
commit e683558b6c
5 changed files with 25 additions and 14 deletions
+2 -2
View File
@@ -34,12 +34,12 @@
- Verificar após próximo deploy: `docker exec rx_scoreodonto_app node -e "require('./database').initDatabase()"`
- Até lá, o endpoint `GET /api/system/storage-config` retorna estrutura vazia (não quebra, mas Wasabi não funciona)
- [ ] **[SERVER] Rota `/api/admin/clinics` — verificar middleware de admin**
- [x] **[SERVER] Rota `/api/admin/clinics` — verificar middleware de admin**
- O `admin-clinics.html` usa um sistema de modal diferente (`modal-overlay`) do restante do sistema (`modal`)
- Há risco de comportamento inconsistente (scroll, altura, animações)
- Fix: unificar `admin-clinics.css` para usar `.modal` + `.modal-content` padrão do `style.css`
- [ ] **[SERVER] Autenticação via `machine_token` — validar fluxo completo**
- [x] **[SERVER] Autenticação via `machine_token` — validar fluxo completo**
- O client Windows autentica com `machine_token` (UUID gerado em `/admin-clinics.html`)
- O fluxo de autenticação passa por `routes/client-auth.js` (JWT gerado com chave diferente do JWT de usuários web?)
- Verificar se o `JWT_SECRET` usado no `client-auth.js` é o mesmo do `auth.js`
+16 -3
View File
@@ -391,7 +391,7 @@ body {
}
/* Modals */
.modal-overlay {
.modal {
position: fixed;
top: 0;
left: 0;
@@ -408,7 +408,7 @@ body {
transition: all 0.3s ease;
}
.modal-overlay.active {
.modal.active {
opacity: 1;
visibility: visible;
}
@@ -426,7 +426,7 @@ body {
overflow: hidden;
}
.modal-overlay.active .modal-content {
.modal.active .modal-content {
transform: scale(1);
}
@@ -450,6 +450,19 @@ body {
font-family: var(--font-heading);
}
.modal-close {
background: transparent;
border: none;
color: #a0aec0;
font-size: 24px;
cursor: pointer;
transition: color 0.2s;
}
.modal-close:hover {
color: var(--danger);
}
/* Forms */
.modern-form .form-group {
margin-bottom: 20px;
+5 -5
View File
@@ -141,11 +141,11 @@
</main>
<!-- Modal Cadastro -->
<div id="clinicModal" class="modal-overlay">
<div id="clinicModal" class="modal">
<div class="modal-content glass-card">
<div class="modal-header">
<h2>Adicionar Novo Dispositivo</h2>
<button class="close-modal"><i class="fa-solid fa-xmark"></i></button>
<button class="modal-close"><i class="fa-solid fa-xmark"></i></button>
</div>
<div class="modal-body-inner">
<form id="clinicForm" class="modern-form">
@@ -183,7 +183,7 @@
</div>
<div class="form-actions">
<button type="button" class="secondary-btn close-modal">Cancelar</button>
<button type="button" class="secondary-btn modal-close">Cancelar</button>
<button type="submit" class="primary-btn" id="submitBtn">
<i class="fa-solid fa-check"></i> Salvar e Gerar Token
</button>
@@ -194,7 +194,7 @@
</div>
<!-- Modal Token Gerado -->
<div id="tokenModal" class="modal-overlay">
<div id="tokenModal" class="modal">
<div class="modal-content glass-card success-modal">
<div class="modal-body-inner" style="display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;">
<div class="success-icon pulse-animation">
@@ -210,7 +210,7 @@
</button>
</div>
<button class="primary-btn close-token-modal" style="width: 100%; margin-top: 20px;">
<button class="primary-btn close-token-modal modal-close" style="width: 100%; margin-top: 20px;">
Entendido
</button>
</div>
+1 -1
View File
@@ -30,7 +30,7 @@ document.addEventListener('DOMContentLoaded', () => {
const addClinicBtn = document.getElementById('addClinicBtn');
const clinicModal = document.getElementById('clinicModal');
const tokenModal = document.getElementById('tokenModal');
const closeModals = document.querySelectorAll('.close-modal');
const closeModals = document.querySelectorAll('.modal-close');
const closeTokenModal = document.querySelector('.close-token-modal');
const clinicForm = document.getElementById('clinicForm');
const generatedTokenElem = document.getElementById('generatedToken');
+1 -3
View File
@@ -3,9 +3,7 @@ const router = express.Router();
const db = require('../database');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
// Usa a chave JWT existente, ou um valor de fallback seguro se não configurado
const JWT_SECRET = process.env.JWT_SECRET || 'fallback_secret_dental_2026_super_secure';
const { JWT_SECRET } = require('../auth');
// ==============================================================
// 1. LOGIN DO CLIENTE (APP DESKTOP)