Fix jwt-token

This commit is contained in:
2025-08-28 06:40:25 +02:00
parent d76a6bf8a7
commit 74d5114da6

View File

@@ -30,64 +30,36 @@ droneTracker.on('movement_alert', (alertData) => {
} }
}); });
// Unified schema that accepts both heartbeat and detection payloads // Simplified unified schema - validate based on payload type
const detectorSchema = Joi.object({ const detectorSchema = Joi.alternatives().try(
// Heartbeat fields // Heartbeat schema
type: Joi.string().valid('heartbeat').when('device_id', { Joi.object({
not: Joi.exist(), type: Joi.string().valid('heartbeat').required(),
then: Joi.required() key: Joi.string().required(),
}), // Optional heartbeat fields
key: Joi.string().when('type', { device_id: Joi.number().integer().optional(),
is: 'heartbeat',
then: Joi.required()
}),
// Optional heartbeat fields (from original heartbeat route)
signal_strength: Joi.number().integer().optional(), signal_strength: Joi.number().integer().optional(),
battery_level: Joi.number().integer().min(0).max(100).optional(), battery_level: Joi.number().integer().min(0).max(100).optional(),
temperature: Joi.number().optional(), temperature: Joi.number().optional(),
uptime: Joi.number().integer().min(0).optional(), uptime: Joi.number().integer().min(0).optional(),
memory_usage: Joi.number().integer().min(0).max(100).optional(), memory_usage: Joi.number().integer().min(0).max(100).optional(),
firmware_version: Joi.string().optional(), firmware_version: Joi.string().optional()
// Detection fields
device_id: Joi.number().integer().when('type', {
not: 'heartbeat',
then: Joi.required()
}), }),
geo_lat: Joi.number().min(-90).max(90).when('device_id', { // Detection schema
is: Joi.exist(), Joi.object({
then: Joi.required() device_id: Joi.number().integer().required(),
}), geo_lat: Joi.number().min(-90).max(90).required(),
geo_lon: Joi.number().min(-180).max(180).when('device_id', { geo_lon: Joi.number().min(-180).max(180).required(),
is: Joi.exist(), device_timestamp: Joi.number().integer().min(0).required(),
then: Joi.required() drone_type: Joi.number().integer().min(0).required(),
}), rssi: Joi.number().required(),
device_timestamp: Joi.number().integer().min(0).when('device_id', { freq: Joi.number().required(),
is: Joi.exist(), drone_id: Joi.number().integer().required(),
then: Joi.required()
}),
drone_type: Joi.number().integer().min(0).when('device_id', {
is: Joi.exist(),
then: Joi.required()
}),
rssi: Joi.number().when('device_id', {
is: Joi.exist(),
then: Joi.required()
}),
freq: Joi.number().when('device_id', {
is: Joi.exist(),
then: Joi.required()
}),
drone_id: Joi.number().integer().when('device_id', {
is: Joi.exist(),
then: Joi.required()
}),
// Optional detection fields // Optional detection fields
confidence_level: Joi.number().min(0).max(1).optional(), confidence_level: Joi.number().min(0).max(1).optional(),
signal_duration: Joi.number().integer().min(0).optional() signal_duration: Joi.number().integer().min(0).optional()
}).or('type', 'device_id'); // Must have either type (heartbeat) or device_id (detection) })
);
// POST /api/detectors - Unified endpoint for heartbeats and detections // POST /api/detectors - Unified endpoint for heartbeats and detections
router.post('/', validateRequest(detectorSchema), async (req, res) => { router.post('/', validateRequest(detectorSchema), async (req, res) => {