mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	add joy validation to client input data
This commit is contained in:
		
							parent
							
								
									a84289fb95
								
							
						
					
					
						commit
						c3dfd81eea
					
				@ -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