Fix jwt-token

This commit is contained in:
2025-09-16 22:19:26 +02:00
parent d9997c456d
commit c2c18821dd
2 changed files with 27 additions and 21 deletions

View File

@@ -1,12 +1,20 @@
const express = require('express');
const router = express.Router();
const Joi = require('joi');
const { Device, DroneDetection, Heartbeat, Tenant } = require('../models');
const { validateRequest } = require('../middleware/validation');
const { authenticateToken } = require('../middleware/auth');
const MultiTenantAuth = require('../middleware/multi-tenant-auth');
const { Op } = require('sequelize');
// Dynamic model injection for testing
function getModels() {
if (global.__TEST_MODELS__) {
console.log('🔧 DEBUG: Using global test models from models/index.js');
return global.__TEST_MODELS__;
}
return require('../models');
}
// Initialize multi-tenant auth
const multiAuth = new MultiTenantAuth();
@@ -38,6 +46,8 @@ const updateDeviceSchema = Joi.object({
// GET /api/devices - Get all devices
router.get('/', authenticateToken, async (req, res) => {
try {
const { Device, DroneDetection, Heartbeat, Tenant } = getModels();
// Determine tenant from request
const tenantId = await multiAuth.determineTenant(req);
if (!tenantId) {
@@ -159,6 +169,8 @@ router.get('/', authenticateToken, async (req, res) => {
// GET /api/devices/map - Get devices with location data for map display
router.get('/map', authenticateToken, async (req, res) => {
try {
const { Device, DroneDetection, Heartbeat, Tenant } = getModels();
// Determine tenant from request
const tenantId = await multiAuth.determineTenant(req);
if (!tenantId) {
@@ -240,6 +252,8 @@ router.get('/map', authenticateToken, async (req, res) => {
// GET /api/devices/:id - Get specific device
router.get('/:id', authenticateToken, async (req, res) => {
try {
const { Device, DroneDetection, Heartbeat, Tenant } = getModels();
// Determine tenant from request
const tenantId = await multiAuth.determineTenant(req);
if (!tenantId) {

View File

@@ -4,39 +4,31 @@ const sinon = require('sinon');
const request = require('supertest');
const express = require('express');
const { setupTestEnvironment, teardownTestEnvironment, cleanDatabase, createTestUser, createTestTenant, createTestDevice, generateTestToken } = require('../setup');
const { authenticateToken, setModels } = require('../../middleware/auth');
describe('Device Routes', () => {
let app, models, sequelize;
let app, models, sequelize, deviceRoutes;
before(async () => {
({ models, sequelize } = await setupTestEnvironment());
// Inject models globally for routes and into auth middleware for testing
global.__TEST_MODELS__ = models;
setModels(models);
// Require device routes AFTER setting up global models
deviceRoutes = require('../../routes/device');
// Setup express app for testing
app = express();
app.use(express.json());
// Mock authentication middleware
app.use((req, res, next) => {
if (req.headers.authorization) {
const token = req.headers.authorization.replace('Bearer ', '');
try {
const jwt = require('jsonwebtoken');
const decoded = jwt.verify(token, process.env.JWT_SECRET || 'test-secret');
req.user = { id: decoded.userId, tenant_id: decoded.tenantId };
req.tenant = { id: decoded.tenantId };
} catch (error) {
return res.status(401).json({ success: false, message: 'Invalid token' });
}
}
next();
});
// Setup device routes
const deviceRoutes = require('../../routes/device');
app.use(authenticateToken);
app.use('/devices', deviceRoutes);
});
after(async () => {
// Clean up global test models
delete global.__TEST_MODELS__;
await teardownTestEnvironment();
});