public code v1
This commit is contained in:
Symlink
+1
@@ -0,0 +1 @@
|
||||
../core
|
||||
@@ -0,0 +1,116 @@
|
||||
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();
|
||||
Generated
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "manager",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "manager",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.0.3",
|
||||
"uuid4": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.0.3",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
|
||||
"integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/uuid4": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/uuid4/-/uuid4-2.0.3.tgz",
|
||||
"integrity": "sha512-CTpAkEVXMNJl2ojgtpLXHgz23dh8z81u6/HEPiQFOvBc/c2pde6TVHmH4uwY0d/GLF3tb7+VDAj4+2eJaQSdZQ=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "16.0.3",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
|
||||
"integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="
|
||||
},
|
||||
"uuid4": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/uuid4/-/uuid4-2.0.3.tgz",
|
||||
"integrity": "sha512-CTpAkEVXMNJl2ojgtpLXHgz23dh8z81u6/HEPiQFOvBc/c2pde6TVHmH4uwY0d/GLF3tb7+VDAj4+2eJaQSdZQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "manager",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.0.3",
|
||||
"uuid4": "^2.0.3"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user