blackcoffee2 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/.env.example +67 -0
  2. package/CHANGELOG.md +167 -0
  3. package/README.md +1 -3
  4. package/config/database.json +11 -0
  5. package/controllers/admin/AuthController.js +2 -1
  6. package/core/ViewHelper.js +75 -0
  7. package/core/hotReload.js +1 -1
  8. package/data/blackcoffee_admin.db-shm +0 -0
  9. package/data/blackcoffee_admin.db-wal +0 -0
  10. package/includes/adminAuth.js +5 -3
  11. package/includes/sessions.js +1 -1
  12. package/otrack.tar.gz +0 -0
  13. package/package.json +4 -2
  14. package/programatically/initFlow.js +2 -2
  15. package/test-aplicacion.con-logisession/BlackCoffee.js +0 -226
  16. package/test-aplicacion.con-logisession/SSL_SETUP.md +0 -53
  17. package/test-aplicacion.con-logisession/certs/ca-certificate.pem +0 -32
  18. package/test-aplicacion.con-logisession/certs/ca-private-key.pem +0 -52
  19. package/test-aplicacion.con-logisession/certs/certificate-2048.pem +0 -22
  20. package/test-aplicacion.con-logisession/certs/certificate.pem +0 -32
  21. package/test-aplicacion.con-logisession/certs/private-key-2048.pem +0 -28
  22. package/test-aplicacion.con-logisession/certs/private-key.pem +0 -52
  23. package/test-aplicacion.con-logisession/config/iaQueueSetup.js +0 -84
  24. package/test-aplicacion.con-logisession/config/qwen-rules.json +0 -39
  25. package/test-aplicacion.con-logisession/controllers/analyticsController.js +0 -117
  26. package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +0 -142
  27. package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +0 -439
  28. package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +0 -223
  29. package/test-aplicacion.con-logisession/controllers/endpointController.js +0 -66
  30. package/test-aplicacion.con-logisession/controllers/example.js +0 -183
  31. package/test-aplicacion.con-logisession/controllers/iaQueueController.js +0 -367
  32. package/test-aplicacion.con-logisession/controllers/queueController.js +0 -206
  33. package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +0 -197
  34. package/test-aplicacion.con-logisession/controllers/test.js +0 -0
  35. package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +0 -78
  36. package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +0 -412
  37. package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +0 -437
  38. package/test-aplicacion.con-logisession/hooks/admin-hooks.js +0 -20
  39. package/test-aplicacion.con-logisession/hooks/general-hooks.js +0 -97
  40. package/test-aplicacion.con-logisession/hooks/queue-hooks.js +0 -64
  41. package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +0 -38
  42. package/test-aplicacion.con-logisession/hooks/security-hooks.js +0 -24
  43. package/test-aplicacion.con-logisession/insitu-admin-client/README.md +0 -69
  44. package/test-aplicacion.con-logisession/insitu-admin-client/package.json +0 -23
  45. package/test-aplicacion.con-logisession/insitu-admin-client.js +0 -257
  46. package/test-aplicacion.con-logisession/models/ExampleModel.js +0 -88
  47. package/test-aplicacion.con-logisession/models/QueueJobModel.js +0 -263
  48. package/test-aplicacion.con-logisession/models/TokenModel.js +0 -207
  49. package/test-aplicacion.con-logisession/models/auth/AuthModel.js +0 -66
  50. package/test-aplicacion.con-logisession/models/auth/UserModel.js +0 -189
  51. package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +0 -213
  52. package/test-aplicacion.con-logisession/models/tracking/EventModel.js +0 -366
  53. package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +0 -131
  54. package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +0 -360
  55. package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +0 -286
  56. package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +0 -207
  57. package/test-aplicacion.con-logisession/package-lock.json +0 -3313
  58. package/test-aplicacion.con-logisession/package.json +0 -32
  59. package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +0 -1339
  60. package/test-aplicacion.con-logisession/public/css/style.css +0 -64
  61. package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +0 -18
  62. package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +0 -16
  63. package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +0 -43
  64. package/test-aplicacion.con-logisession/public/images/logo.svg +0 -7
  65. package/test-aplicacion.con-logisession/public/js/main.js +0 -67
  66. package/test-aplicacion.con-logisession/routes/analytics-routes.json +0 -8
  67. package/test-aplicacion.con-logisession/routes/auth-routes.json +0 -98
  68. package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +0 -20
  69. package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +0 -16
  70. package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +0 -11
  71. package/test-aplicacion.con-logisession/routes/endpoints-routes.json +0 -8
  72. package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +0 -26
  73. package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +0 -20
  74. package/test-aplicacion.con-logisession/routes/queue-routes.json +0 -32
  75. package/test-aplicacion.con-logisession/routes/qwen-routes.json +0 -14
  76. package/test-aplicacion.con-logisession/routes/static-routes.json +0 -29
  77. package/test-aplicacion.con-logisession/routes/tracking-routes.json +0 -58
  78. package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +0 -51
  79. package/test-aplicacion.con-logisession/utils/dbAdapter.js +0 -88
  80. package/test-aplicacion.con-logisession/utils/qbWrapper.js +0 -4
  81. package/test-aplicacion.con-logisession/utils/queueProcessor.js +0 -305
  82. package/test-aplicacion.con-logisession/utils/qwenRulesService.js +0 -131
  83. package/test-aplicacion.con-logisession/utils/tokenHelper.js +0 -22
  84. package/test-aplicacion.con-logisession/views/auth/dashboard.html +0 -443
  85. package/test-aplicacion.con-logisession/views/auth/forgot-password.html +0 -200
  86. package/test-aplicacion.con-logisession/views/auth/login.html +0 -213
  87. package/test-aplicacion.con-logisession/views/auth/register.html +0 -294
  88. package/test-aplicacion.con-logisession/views/contact/form.html +0 -47
  89. package/test-aplicacion.con-logisession/views/products/index.html +0 -39
@@ -1,439 +0,0 @@
1
- /**
2
- * Controlador de autenticación para el framework JERK
3
- * AuthController.js
4
- */
5
-
6
- const { ControllerBase } = require('insitu-js');
7
- const AuthModel = require('../../models/auth/AuthModel');
8
- const { validateToken } = require('../../utils/tokenHelper');
9
- const jwt = require('jsonwebtoken');
10
-
11
- class AuthController extends ControllerBase {
12
- constructor(options = {}) {
13
- super(options);
14
- this.authModel = new AuthModel();
15
- }
16
-
17
- /**
18
- * Endpoint para login de usuarios
19
- * POST /api/auth/login
20
- */
21
- async login(req, res) {
22
- try {
23
- const { username, password } = req.body;
24
-
25
- if (!username || !password) {
26
- return this.json(res, {
27
- success: false,
28
- error: 'Username y password son requeridos'
29
- }, 400);
30
- }
31
-
32
- // Autenticar al usuario
33
- const user = await this.authModel.authenticateUser(username, password);
34
-
35
- if (!user) {
36
- return this.json(res, {
37
- success: false,
38
- error: 'Credenciales inválidas'
39
- }, 401);
40
- }
41
-
42
- // Crear sesión de usuario autenticado
43
- if (req.session) {
44
- req.session.create({
45
- authenticated: true,
46
- userId: user.id,
47
- username: user.username,
48
- email: user.email
49
- });
50
- }
51
-
52
- // Generar token JWT para el usuario autenticado
53
- const jwt = require('jsonwebtoken');
54
- const secret = process.env.JWT_SECRET || 'default_secret_key_for_dev';
55
-
56
- const tokenPayload = {
57
- userId: user.id,
58
- username: user.username,
59
- email: user.email
60
- };
61
-
62
- const token = jwt.sign(tokenPayload, secret, { expiresIn: '24h' });
63
-
64
- // Guardar el token en la base de datos
65
- const TokenModel = require('../../models/tracking/TokenModel');
66
- const tokenModel = new TokenModel();
67
-
68
- await tokenModel.createToken({
69
- token: token,
70
- user_id: user.id,
71
- store_id: 1 // ID del store predeterminado
72
- });
73
-
74
- // Obtener información del usuario
75
- const userInfo = await this.authModel.getUserById(user.id);
76
-
77
- this.json(res, {
78
- success: true,
79
- message: 'Inicio de sesión exitoso',
80
- token: token, // Incluir el token en la respuesta
81
- user: {
82
- id: user.id,
83
- username: user.username,
84
- email: user.email,
85
- roles: userInfo.roles || [],
86
- capabilities: userInfo.capabilities || []
87
- }
88
- });
89
- } catch (error) {
90
- console.error('Error en login:', error);
91
- this.json(res, {
92
- success: false,
93
- error: error.message
94
- }, 500);
95
- }
96
- }
97
-
98
- /**
99
- * Endpoint para registro de usuarios
100
- * POST /api/auth/register
101
- */
102
- async register(req, res) {
103
- try {
104
- const { username, password, email } = req.body;
105
-
106
- if (!username || !password || !email) {
107
- return this.json(res, {
108
- success: false,
109
- error: 'Username, password y email son requeridos'
110
- }, 400);
111
- }
112
-
113
- // Verificar si el usuario ya existe
114
- const existingUser = await this.authModel.userModel.getUserByIdentifier(username);
115
- if (existingUser) {
116
- return this.json(res, {
117
- success: false,
118
- error: 'El nombre de usuario ya existe'
119
- }, 409);
120
- }
121
-
122
- // Verificar si el email ya existe
123
- const existingEmail = await this.authModel.userModel.queryBuilder
124
- .reset()
125
- .select('*')
126
- .where('email', email)
127
- .first();
128
-
129
- if (existingEmail) {
130
- return this.json(res, {
131
- success: false,
132
- error: 'El email ya está registrado'
133
- }, 409);
134
- }
135
-
136
- // Registrar al nuevo usuario
137
- const newUser = await this.authModel.registerUser({
138
- username,
139
- password,
140
- email
141
- });
142
-
143
- // Obtener información del usuario
144
- const userInfo = await this.authModel.getUserById(newUser.id);
145
-
146
- this.json(res, {
147
- success: true,
148
- message: 'Usuario registrado exitosamente',
149
- user: {
150
- id: newUser.id,
151
- username: newUser.username,
152
- email: newUser.email,
153
- roles: userInfo.roles || [],
154
- capabilities: userInfo.capabilities || []
155
- }
156
- });
157
- } catch (error) {
158
- console.error('Error en registro:', error);
159
- this.json(res, {
160
- success: false,
161
- error: error.message
162
- }, 500);
163
- }
164
- }
165
-
166
- /**
167
- * Endpoint para obtener el perfil del usuario autenticado
168
- * GET /api/auth/profile
169
- */
170
- async profile(req, res) {
171
- try {
172
- // Verificar si el usuario está autenticado a través de la sesión
173
- if (!req.session || !req.session.data || !req.session.data.authenticated) {
174
- return this.json(res, {
175
- success: false,
176
- error: 'Usuario no autenticado'
177
- }, 401);
178
- }
179
-
180
- // Obtener información del usuario desde la sesión
181
- const sessionData = req.session.data;
182
- const userId = sessionData.userId;
183
-
184
- // Obtener información del usuario
185
- const user = await this.authModel.getUserById(userId);
186
-
187
- if (!user) {
188
- return this.json(res, {
189
- success: false,
190
- error: 'Usuario no encontrado'
191
- }, 404);
192
- }
193
-
194
- this.json(res, {
195
- success: true,
196
- user: {
197
- id: user.id,
198
- username: user.username,
199
- email: user.email,
200
- roles: user.roles,
201
- capabilities: user.capabilities
202
- }
203
- });
204
- } catch (error) {
205
- console.error('Error en profile:', error);
206
- this.json(res, {
207
- success: false,
208
- error: error.message
209
- }, 500);
210
- }
211
- }
212
-
213
- /**
214
- * Endpoint para verificar si un usuario tiene una capability específica
215
- * GET /api/auth/check-capability
216
- */
217
- async checkCapability(req, res) {
218
- try {
219
- // Verificar si el usuario está autenticado a través de la sesión
220
- if (!req.session || !req.session.data || !req.session.data.authenticated) {
221
- return this.json(res, {
222
- success: false,
223
- error: 'Usuario no autenticado'
224
- }, 401);
225
- }
226
-
227
- // Obtener información del usuario desde la sesión
228
- const sessionData = req.session.data;
229
- const userId = sessionData.userId;
230
-
231
- // Obtener el nombre de la capability de los parámetros de consulta
232
- const capabilityName = req.query.capability;
233
- if (!capabilityName) {
234
- return this.json(res, {
235
- success: false,
236
- error: 'Nombre de capability requerido'
237
- }, 400);
238
- }
239
-
240
- // Verificar si el usuario tiene la capability
241
- const hasCapability = await this.authModel.userHasCapability(userId, capabilityName);
242
-
243
- this.json(res, {
244
- success: true,
245
- hasCapability: hasCapability,
246
- capability: capabilityName,
247
- userId: userId
248
- });
249
- } catch (error) {
250
- console.error('Error en checkCapability:', error);
251
- this.json(res, {
252
- success: false,
253
- error: error.message
254
- }, 500);
255
- }
256
- }
257
-
258
- /**
259
- * Endpoint para logout de usuarios
260
- * POST /api/auth/logout
261
- */
262
- async logout(req, res) {
263
- try {
264
- // Destruir la sesión si existe
265
- if (req.session) {
266
- req.session.destroy();
267
- }
268
-
269
- // Si se proporciona un token en el header, revocarlo
270
- const authHeader = req.headers['authorization'];
271
- if (authHeader && authHeader.startsWith('Bearer ')) {
272
- const token = authHeader.substring(7); // Remover 'Bearer ' del principio
273
-
274
- // Revocar el token específico
275
- const TokenModel = require('../../models/tracking/TokenModel');
276
- const tokenModel = new TokenModel();
277
-
278
- try {
279
- await tokenModel.revokeToken(token);
280
- } catch (revokeError) {
281
- console.error('Error revocando token durante logout:', revokeError);
282
- // No lanzar error si falla la revocación del token, solo registrar
283
- }
284
- }
285
-
286
- this.json(res, {
287
- success: true,
288
- message: 'Cierre de sesión exitoso'
289
- });
290
- } catch (error) {
291
- console.error('Error en logout:', error);
292
- this.json(res, {
293
- success: false,
294
- error: error.message
295
- }, 500);
296
- }
297
- }
298
-
299
- /**
300
- * Método para validar token
301
- */
302
- async validateToken(token) {
303
- try {
304
- const isValid = await validateToken(token);
305
- return isValid;
306
- } catch (error) {
307
- console.error('Error validando token:', error);
308
- return false;
309
- }
310
- }
311
-
312
- /**
313
- * Endpoint para verificar si un usuario tiene un rol específico
314
- * GET /api/auth/check-role
315
- */
316
- async checkRole(req, res) {
317
- try {
318
- // Verificar si el usuario está autenticado a través de la sesión o token
319
- const isAuthenticated = await this.checkAuthentication(req);
320
-
321
- if (!isAuthenticated) {
322
- return this.json(res, {
323
- success: false,
324
- error: 'Usuario no autenticado'
325
- }, 401);
326
- }
327
-
328
- // Obtener el ID del usuario desde la sesión o token
329
- const userId = await this.getUserIdFromRequest(req);
330
-
331
- // Obtener el nombre del rol de los parámetros de consulta
332
- const roleName = req.query.role;
333
- if (!roleName) {
334
- return this.json(res, {
335
- success: false,
336
- error: 'Nombre de rol requerido'
337
- }, 400);
338
- }
339
-
340
- // Verificar si el usuario tiene el rol
341
- const UserRoleModel = require('../models/UserRoleModel');
342
- const userRoleModel = new UserRoleModel();
343
-
344
- const hasRole = await userRoleModel.userHasRoleByName(userId, roleName);
345
-
346
- this.json(res, {
347
- success: true,
348
- hasRole: hasRole,
349
- role: roleName,
350
- userId: userId
351
- });
352
- } catch (error) {
353
- console.error('Error en checkRole:', error);
354
- this.json(res, {
355
- success: false,
356
- error: error.message
357
- }, 500);
358
- }
359
- }
360
-
361
- /**
362
- * Método para verificar autenticación (token o sesión)
363
- */
364
- async checkAuthentication(req) {
365
- // Primero verificar si hay un token de autorización
366
- const authHeader = req.headers['authorization'];
367
- if (authHeader && authHeader.startsWith('Bearer ')) {
368
- const token = authHeader.substring(7); // Remover 'Bearer ' del principio
369
- const isValidToken = await this.validateToken(token);
370
- return isValidToken;
371
- }
372
-
373
- // Luego verificar si hay una sesión válida
374
- if (req.session && req.session.data && req.session.data.authenticated) {
375
- return true;
376
- }
377
-
378
- // Si no hay token ni sesión válidos
379
- return false;
380
- }
381
-
382
- /**
383
- * Método para obtener el ID del usuario desde la solicitud (token o sesión)
384
- */
385
- async getUserIdFromRequest(req) {
386
- // Primero intentar obtener de token
387
- const authHeader = req.headers['authorization'];
388
- if (authHeader && authHeader.startsWith('Bearer ')) {
389
- const token = authHeader.substring(7);
390
- const jwt = require('jsonwebtoken');
391
- const secret = process.env.JWT_SECRET || 'default_secret_key_for_dev';
392
-
393
- try {
394
- const decoded = jwt.verify(token, secret);
395
- return decoded.userId;
396
- } catch (error) {
397
- console.error('Error decodificando token:', error);
398
- return null;
399
- }
400
- }
401
-
402
- // Luego intentar obtener de sesión
403
- if (req.session && req.session.data && req.session.data.authenticated) {
404
- return req.session.data.userId;
405
- }
406
-
407
- return null;
408
- }
409
- }
410
-
411
- // Exportar métodos individualmente para que RouteLoader pueda acceder a ellos
412
- const controllerInstance = new AuthController();
413
-
414
- module.exports = {
415
- login: (req, res) => {
416
- controllerInstance.setRequestResponse(req, res);
417
- controllerInstance.login(req, res);
418
- },
419
- register: (req, res) => {
420
- controllerInstance.setRequestResponse(req, res);
421
- controllerInstance.register(req, res);
422
- },
423
- profile: (req, res) => {
424
- controllerInstance.setRequestResponse(req, res);
425
- controllerInstance.profile(req, res);
426
- },
427
- checkCapability: (req, res) => {
428
- controllerInstance.setRequestResponse(req, res);
429
- controllerInstance.checkCapability(req, res);
430
- },
431
- logout: (req, res) => {
432
- controllerInstance.setRequestResponse(req, res);
433
- controllerInstance.logout(req, res);
434
- },
435
- checkRole: (req, res) => {
436
- controllerInstance.setRequestResponse(req, res);
437
- controllerInstance.checkRole(req, res);
438
- }
439
- };
@@ -1,223 +0,0 @@
1
- /**
2
- * Controlador para vistas de autenticación
3
- * AuthViewController.js
4
- */
5
-
6
- const { ControllerBase } = require('insitu-js');
7
-
8
- class AuthViewController extends ControllerBase {
9
- constructor(options = {}) {
10
- super(options);
11
- }
12
-
13
- /**
14
- * Muestra la página de inicio de sesión
15
- * GET /login
16
- */
17
- async showLogin(req, res) {
18
- try {
19
- // Preparar datos para la vista
20
- this.set('title', 'Iniciar Sesión');
21
- this.set('message', 'Por favor, ingresa tus credenciales para continuar');
22
-
23
- // Renderizar la vista
24
- const html = this.view('auth/login', {
25
- title: 'Iniciar Sesión',
26
- message: 'Por favor, ingresa tus credenciales para continuar'
27
- });
28
-
29
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
30
- res.end(html);
31
- } catch (error) {
32
- console.error('Error en showLogin:', error);
33
- res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
34
- res.end(`
35
- <!DOCTYPE html>
36
- <html>
37
- <head>
38
- <title>Error</title>
39
- <meta charset="utf-8">
40
- </head>
41
- <body>
42
- <h1>Error al cargar la página de inicio de sesión</h1>
43
- <p>${error.message}</p>
44
- <a href="/">Volver al inicio</a>
45
- </body>
46
- </html>
47
- `);
48
- }
49
- }
50
-
51
- /**
52
- * Muestra la página de registro
53
- * GET /register
54
- */
55
- async showRegister(req, res) {
56
- try {
57
- // Preparar datos para la vista
58
- this.set('title', 'Registrarse');
59
- this.set('message', 'Crea una cuenta para comenzar');
60
-
61
- // Renderizar la vista
62
- const html = this.view('auth/register', {
63
- title: 'Registrarse',
64
- message: 'Crea una cuenta para comenzar'
65
- });
66
-
67
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
68
- res.end(html);
69
- } catch (error) {
70
- console.error('Error en showRegister:', error);
71
- res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
72
- res.end(`
73
- <!DOCTYPE html>
74
- <html>
75
- <head>
76
- <title>Error</title>
77
- <meta charset="utf-8">
78
- </head>
79
- <body>
80
- <h1>Error al cargar la página de registro</h1>
81
- <p>${error.message}</p>
82
- <a href="/">Volver al inicio</a>
83
- </body>
84
- </html>
85
- `);
86
- }
87
- }
88
-
89
- /**
90
- * Muestra la página de olvido de contraseña
91
- * GET /forgot-password
92
- */
93
- async showForgotPassword(req, res) {
94
- try {
95
- // Preparar datos para la vista
96
- this.set('title', 'Recuperar Contraseña');
97
- this.set('message', 'Ingresa tu email para recuperar tu contraseña');
98
-
99
- // Renderizar la vista
100
- const html = this.view('auth/forgot-password', {
101
- title: 'Recuperar Contraseña',
102
- message: 'Ingresa tu email para recuperar tu contraseña'
103
- });
104
-
105
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
106
- res.end(html);
107
- } catch (error) {
108
- console.error('Error en showForgotPassword:', error);
109
- res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
110
- res.end(`
111
- <!DOCTYPE html>
112
- <html>
113
- <head>
114
- <title>Error</title>
115
- <meta charset="utf-8">
116
- </head>
117
- <body>
118
- <h1>Error al cargar la página de recuperación de contraseña</h1>
119
- <p>${error.message}</p>
120
- <a href="/">Volver al inicio</a>
121
- </body>
122
- </html>
123
- `);
124
- }
125
- }
126
-
127
- /**
128
- * Muestra la página de dashboard (después del login)
129
- * GET /dashboard
130
- */
131
- async showDashboard(req, res) {
132
- try {
133
- // Mostrar información de depuración sobre la sesión
134
- console.log('[DEBUG] showDashboard - req.session:', req.session);
135
- console.log('[DEBUG] showDashboard - req.session.data:', req.session?.data);
136
- console.log('[DEBUG] showDashboard - req.session.data.authenticated:', req.session?.data?.authenticated);
137
-
138
- // Verificar si el usuario está autenticado a través de la sesión
139
- if (!req.session || !req.session.data || !req.session.data.authenticated) {
140
- // Redirigir al login si no está autenticado
141
- console.log('[DEBUG] showDashboard - No autenticado, redirigiendo a /login');
142
- res.writeHead(302, { 'Location': '/login' });
143
- res.end();
144
- return;
145
- }
146
-
147
- // Obtener información del usuario desde la sesión
148
- const sessionData = req.session.data;
149
- const userId = sessionData.userId;
150
-
151
- // Obtener información del usuario
152
- const AuthModel = require('../../models/auth/AuthModel');
153
- const authModel = new AuthModel();
154
- const user = await authModel.getUserById(userId);
155
-
156
- // Preparar datos para la vista
157
- this.set('title', 'Panel de Control');
158
- this.set('user', user);
159
-
160
- // Renderizar la vista
161
- const html = this.view('auth/dashboard', {
162
- title: 'Panel de Control',
163
- user: user
164
- });
165
-
166
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
167
- res.end(html);
168
- } catch (error) {
169
- console.error('Error en showDashboard:', error);
170
- res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
171
- res.end(`
172
- <!DOCTYPE html>
173
- <html>
174
- <head>
175
- <title>Error</title>
176
- <meta charset="utf-8">
177
- </head>
178
- <body>
179
- <h1>Error al cargar el panel de control</h1>
180
- <p>${error.message}</p>
181
- <a href="/login">Ir al inicio de sesión</a>
182
- </body>
183
- </html>
184
- `);
185
- }
186
- }
187
-
188
- /**
189
- * Método para validar token
190
- */
191
- async validateToken(token) {
192
- try {
193
- const { validateToken } = require('../../utils/tokenHelper');
194
- const isValid = await validateToken(token);
195
- return isValid;
196
- } catch (error) {
197
- console.error('Error validando token:', error);
198
- return false;
199
- }
200
- }
201
- }
202
-
203
- // Exportar métodos individualmente para que RouteLoader pueda acceder a ellos
204
- const controllerInstance = new AuthViewController();
205
-
206
- module.exports = {
207
- showLogin: (req, res) => {
208
- controllerInstance.setRequestResponse(req, res);
209
- controllerInstance.showLogin(req, res);
210
- },
211
- showRegister: (req, res) => {
212
- controllerInstance.setRequestResponse(req, res);
213
- controllerInstance.showRegister(req, res);
214
- },
215
- showForgotPassword: (req, res) => {
216
- controllerInstance.setRequestResponse(req, res);
217
- controllerInstance.showForgotPassword(req, res);
218
- },
219
- showDashboard: (req, res) => {
220
- controllerInstance.setRequestResponse(req, res);
221
- controllerInstance.showDashboard(req, res);
222
- }
223
- };