fix: unifica sistema de modais no admin-clinics e usa JWT_SECRET global no client-auth
continuous-integration/webhook Deploy concluido (rx.scoreodonto.com)
continuous-integration/webhook Deploy concluido (rx.scoreodonto.com)
This commit is contained in:
+2
-2
@@ -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`
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user