mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-22 19:07:54 +01:00
add joy validation to client input data
This commit is contained in:
parent
484f7dcd9d
commit
70d596d0af
@ -3,6 +3,7 @@
|
||||
const logger = require('../logger');
|
||||
const ClientMetrics = require('../client-metrics');
|
||||
const ClientMetricsService = require('../client-metrics/service');
|
||||
const joi = require('joi');
|
||||
|
||||
module.exports = function (app, config) {
|
||||
const {
|
||||
@ -27,27 +28,60 @@ module.exports = function (app, config) {
|
||||
res.json(metrics.getTogglesMetrics());
|
||||
});
|
||||
|
||||
const clientMetricsSchema = joi.object().keys({
|
||||
appName: joi.string().required(),
|
||||
instanceId: joi.string().required(),
|
||||
bucket: joi.object().required()
|
||||
.keys({
|
||||
start: joi.date().required(),
|
||||
stop: joi.date().required(),
|
||||
toggles: joi.object()
|
||||
.required()
|
||||
.unknown()
|
||||
.min(1)
|
||||
.max(1000),
|
||||
}),
|
||||
});
|
||||
|
||||
app.post('/client/metrics', (req, res) => {
|
||||
try {
|
||||
const data = typeof req.body === 'string' ? JSON.parse(req.body) : req.body;
|
||||
const result = joi.validate(data, clientMetricsSchema);
|
||||
if (result.error) {
|
||||
throw result.error;
|
||||
}
|
||||
service
|
||||
.insert(data)
|
||||
.insert(result.value)
|
||||
.catch(e => logger.error('Error inserting metrics data', e));
|
||||
} catch (e) {
|
||||
logger.error('Error receiving metrics', e);
|
||||
}
|
||||
|
||||
res.end();
|
||||
});
|
||||
|
||||
const clientRegisterSchema = joi.object().keys({
|
||||
appName: joi.string().required(),
|
||||
instanceId: joi.string().required(),
|
||||
strategies: joi.array()
|
||||
.required()
|
||||
.items(joi.string(), joi.any().strip()),
|
||||
started: joi.date().required(),
|
||||
interval: joi.number().required(),
|
||||
});
|
||||
|
||||
app.post('/client/register', (req, res) => {
|
||||
const data = req.body;
|
||||
const clientIp = req.ip;
|
||||
console.log(data);
|
||||
clientStrategyStore.insert(data.appName, data.strategies)
|
||||
|
||||
joi.validate(data, clientRegisterSchema, (err, cleaned) => {
|
||||
if (err) {
|
||||
return res.json(400, err);
|
||||
}
|
||||
|
||||
clientStrategyStore.insert(cleaned.appName, cleaned.strategies)
|
||||
.then(() => clientInstanceStore.insert({
|
||||
appName: data.appName,
|
||||
instanceId: data.instanceId,
|
||||
appName: cleaned.appName,
|
||||
instanceId: cleaned.instanceId,
|
||||
clientIp,
|
||||
}))
|
||||
.then(() => console.log('new client registerd'))
|
||||
@ -55,6 +89,7 @@ module.exports = function (app, config) {
|
||||
|
||||
res.end();
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/client/strategies', (req, res) => {
|
||||
clientStrategyStore.getAll().then(data => res.json(data));
|
||||
|
@ -57,6 +57,7 @@
|
||||
"express": "4.14.0",
|
||||
"express-validator": "2.20.8",
|
||||
"install": "^0.8.1",
|
||||
"joi": "^9.2.0",
|
||||
"knex": "^0.12.6",
|
||||
"log4js": "^0.6.38",
|
||||
"moment": "^2.15.2",
|
||||
|
Loading…
Reference in New Issue
Block a user