feat: initialize microservice architecture with auth, api, realtime, copernicus, ml, and console modules

This commit is contained in:
Giuseppe Raffa
2026-03-28 15:29:34 +01:00
commit bcfce32adb
89 changed files with 12025 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
const express = require('express');
const db = require('../helper/authdb');
const tokenStore = require('../helper/tokenStore');
const redis = require('../helper/redis');
const router = express.Router();
/**
* POST /connect
* Il sensore invia il suo codice segreto (token) e metadati opzionali.
* Se autentica, riceve un token effimero per la connessione WebSocket.
*/
router.post('/', async (req, res) => {
try {
const { token, metadata } = req.body;
if (!token) {
return res.status(400).send({ error: 'Token is required' });
}
const sensor = await db.getSensor(token);
if (!sensor) {
return res.status(401).send({ error: 'token not valid' });
}
if (!sensor.is_active) {
return res.status(403).send({ error: 'token not valid' });
}
// Genera il token effimero valido per max 5 secondi
const socketToken = await tokenStore.setToken(sensor.id, metadata, 5);
return res.status(200).send({
socketToken,
sensorId: sensor.id,
expiresIn: 5
});
} catch (error) {
return res.status(500).send({ error: `${error}` });
}
});
/**
* DELETE /connect/:sensorId
* Disconnette forzatamente un sensore rimuovendo la sua sessione da Redis.
*/
router.delete('/:sensorId', async (req, res) => {
const { sensorId } = req.params;
try {
await redis.deleteSession(sensorId);
return res.status(200).send({ result: 'disconnected' });
} catch (error) {
return res.status(500).send({ error: `${error}` });
}
});
/**
* POST /connect/new
* Crea un nuovo sensore nel database.
*/
router.post('/new', async (req, res) => {
const { name, code } = req.body;
if (!name || !code) {
return res.status(400).send({ error: 'Name and code are required' });
}
try {
await db.createSensor(name, code);
return res.status(200).send({ result: 'created' });
} catch (error) {
return res.status(500).send({ error: `${error}` });
}
});
module.exports = router;