116 lines
3.6 KiB
JavaScript
116 lines
3.6 KiB
JavaScript
require('dotenv').config()
|
|
const { Express } = require("./core/Express");
|
|
const { promisePostRequest, promiseDeleteRequest } = require('./core/httpClient')
|
|
const { v4: uuidv4 } = require('uuid');
|
|
const { generateKeyPairSync, createHash } = require("node:crypto");
|
|
const toBytes = (string) => Array.from(Buffer.from(string, 'utf8'));
|
|
|
|
|
|
const express = new Express(process.env.PORT_MANAGER, "Manager")
|
|
express.get('/', async (_, res) => {
|
|
res.send('Service is alive')
|
|
});
|
|
|
|
express.post('/registerDevice', (req, res) => {
|
|
if (!req.body.token || req.body.token !== process.env.API_TOKEN_MANAGER) {
|
|
res.status(401).send('Not authorized');
|
|
} else {
|
|
let device = req.body.device;
|
|
let type = req.body.type;
|
|
let serialNumber = req.body.serialNumber;
|
|
let creationDatetime = req.body.creationDatetime;
|
|
|
|
if (device) {
|
|
console.log("New device received: " + device);
|
|
// send to storage
|
|
let message = {
|
|
key: device,
|
|
value: {
|
|
device: device,
|
|
type: type,
|
|
serialNumber: serialNumber,
|
|
creationDatetime: creationDatetime
|
|
}
|
|
};
|
|
|
|
let body = {
|
|
token: process.env.API_TOKEN_STORAGE,
|
|
message: message
|
|
};
|
|
|
|
promisePostRequest(process.env.INTERNAL_URL_STORAGE_DEVICES, body);
|
|
|
|
res.status(200).send("Successfully registered");
|
|
|
|
} else {
|
|
res.status(403).send("Bad request");
|
|
}
|
|
}
|
|
});
|
|
|
|
express.post('/newEvent',async (req, res) => {
|
|
if (!req.body.token || req.body.token !== process.env.API_TOKEN_MANAGER) {
|
|
res.status(401).send('Not authorized');
|
|
} else {
|
|
let type = req.body.type;
|
|
let value = req.body.value;
|
|
let device = req.body.device;
|
|
|
|
console.log("New event received: " + type + " // " + value + " // " + device);
|
|
|
|
let message = {
|
|
key: uuidv4(),
|
|
value: {
|
|
type: type,
|
|
value: value,
|
|
device: device,
|
|
creationDatetime: new Date().getTime()
|
|
}
|
|
};
|
|
|
|
message = signDataSource(message);
|
|
|
|
// Store event on Storage as Captured
|
|
let body = {
|
|
token: process.env.API_TOKEN_STORAGE,
|
|
message: message
|
|
};
|
|
|
|
let storedMessage = await promisePostRequest(process.env.INTERNAL_URL_STORAGE_EVENTS, body);
|
|
|
|
// Verify event
|
|
body.message = storedMessage;
|
|
body.token = process.env.API_TOKEN_VERIFIER;
|
|
|
|
let verifiedMessage = await promisePostRequest(process.env.INTERNAL_URL_VERIFIER_VERIFY, body);
|
|
|
|
// Store event on Storage as Verified
|
|
body.message = verifiedMessage;
|
|
body.token = process.env.API_TOKEN_STORAGE;
|
|
|
|
let storedVerifiedMessage = await promisePostRequest(process.env.INTERNAL_URL_STORAGE_EVENTS, body);
|
|
|
|
// Publish event
|
|
body.message = storedVerifiedMessage;
|
|
body.token = process.env.API_TOKEN_PUBLISHER;
|
|
let publishedMessage = await promisePostRequest(process.env.INTERNAL_URL_PUBLISHER_PUBLISH, body);
|
|
|
|
body.token = process.env.API_TOKEN_STORAGE;
|
|
|
|
// Delete event from Storage
|
|
promiseDeleteRequest(process.env.INTERNAL_URL_STORAGE_EVENTS + "/" + publishedMessage.key, body);
|
|
|
|
res.status(200).send('Event processed');
|
|
}
|
|
});
|
|
|
|
function signDataSource(message) {
|
|
|
|
const hash = createHash('sha256').update(message.value.device + 'Phonendo').digest('hex');
|
|
|
|
const bytes = toBytes(hash);
|
|
|
|
return message;
|
|
}
|
|
|
|
express.run(); |