mirror of https://github.com/pelias/api.git
Harish Krishna
10 years ago
10 changed files with 221 additions and 94 deletions
@ -0,0 +1,26 @@ |
|||||||
|
// validate inputs, convert types and apply defaults
|
||||||
|
function sanitize( req ){ |
||||||
|
|
||||||
|
req.clean = req.clean || {}; |
||||||
|
var params= req.query; |
||||||
|
|
||||||
|
// ensure the input params are a valid object
|
||||||
|
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
||||||
|
params = {}; |
||||||
|
} |
||||||
|
|
||||||
|
// input text
|
||||||
|
if('string' !== typeof params.input || !params.input.length){ |
||||||
|
return {
|
||||||
|
'error': true, |
||||||
|
'message': 'invalid param \'input\': text length, must be >0' |
||||||
|
}; |
||||||
|
} |
||||||
|
req.clean.input = params.input; |
||||||
|
|
||||||
|
return { 'error': false }; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,47 @@ |
|||||||
|
// validate inputs, convert types and apply defaults
|
||||||
|
function sanitize( req ){ |
||||||
|
|
||||||
|
var clean = req.clean || {}; |
||||||
|
var params= req.query; |
||||||
|
|
||||||
|
// ensure the input params are a valid object
|
||||||
|
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
||||||
|
params = {}; |
||||||
|
} |
||||||
|
|
||||||
|
// lat
|
||||||
|
var lat = parseFloat( params.lat, 10 ); |
||||||
|
if( isNaN( lat ) || lat < 0 || lat > 90 ){ |
||||||
|
return { |
||||||
|
'error': true, |
||||||
|
'message': 'invalid param \'lat\': must be >0 and <90'
|
||||||
|
} |
||||||
|
} |
||||||
|
clean.lat = lat; |
||||||
|
|
||||||
|
// lon
|
||||||
|
var lon = parseFloat( params.lon, 10 ); |
||||||
|
if( isNaN( lon ) || lon < -180 || lon > 180 ){ |
||||||
|
return { |
||||||
|
'error': true, |
||||||
|
'message': 'invalid param \'lon\': must be >-180 and <180'
|
||||||
|
} |
||||||
|
} |
||||||
|
clean.lon = lon; |
||||||
|
|
||||||
|
// zoom level
|
||||||
|
var zoom = parseInt( params.zoom, 10 ); |
||||||
|
if( !isNaN( zoom ) ){ |
||||||
|
clean.zoom = Math.min( Math.max( zoom, 1 ), 18 ); // max
|
||||||
|
} else { |
||||||
|
clean.zoom = 10; // default
|
||||||
|
} |
||||||
|
|
||||||
|
req.clean = clean; |
||||||
|
|
||||||
|
return { 'error': false }; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,40 @@ |
|||||||
|
var indeces = require('../query/indeces'); |
||||||
|
|
||||||
|
// validate inputs, convert types and apply defaults
|
||||||
|
function sanitize( req ){ |
||||||
|
|
||||||
|
var clean = req.clean || {}; |
||||||
|
var params= req.query; |
||||||
|
|
||||||
|
// ensure the input params are a valid object
|
||||||
|
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
||||||
|
params = {}; |
||||||
|
} |
||||||
|
|
||||||
|
// which layers to query
|
||||||
|
if('string' === typeof params.layers && params.layers.length){ |
||||||
|
var layers = params.layers.split(',').map( function( layer ){ |
||||||
|
return layer.toLowerCase(); // lowercase inputs
|
||||||
|
}); |
||||||
|
for( var x=0; x<layers.length; x++ ){ |
||||||
|
if( -1 === indeces.indexOf( layers[x] ) ){ |
||||||
|
return { |
||||||
|
'error': true, |
||||||
|
'message': 'invalid param \'layer\': must be one or more of ' + indeces.join(',')
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
clean.layers = layers; |
||||||
|
} |
||||||
|
else { |
||||||
|
clean.layers = indeces; // default (all layers)
|
||||||
|
} |
||||||
|
|
||||||
|
req.clean = clean; |
||||||
|
|
||||||
|
return { 'error': false }; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,17 @@ |
|||||||
|
function sanitize( req, sanitiser, cb ){ |
||||||
|
|
||||||
|
req.clean = req.clean || {}; |
||||||
|
|
||||||
|
for (var s in sanitiser) {
|
||||||
|
var sanity = sanitiser[s](req); |
||||||
|
if (sanity.error) { |
||||||
|
return cb(sanity.message); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return cb( undefined, req.clean ); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,27 @@ |
|||||||
|
// validate inputs, convert types and apply defaults
|
||||||
|
function sanitize( req ){ |
||||||
|
|
||||||
|
var clean = req.clean || {}; |
||||||
|
var params= req.query; |
||||||
|
|
||||||
|
// ensure the input params are a valid object
|
||||||
|
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
||||||
|
params = {}; |
||||||
|
} |
||||||
|
|
||||||
|
// total results
|
||||||
|
var size = parseInt( params.size, 10 ); |
||||||
|
if( !isNaN( size ) ){ |
||||||
|
clean.size = Math.min( Math.max( size, 1 ), 40 ); // max
|
||||||
|
} else { |
||||||
|
clean.size = 10; // default
|
||||||
|
} |
||||||
|
|
||||||
|
req.clean = clean; |
||||||
|
|
||||||
|
return {'error':false}; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,23 @@ |
|||||||
|
|
||||||
|
var logger = require('../src/logger'), |
||||||
|
_sanitize = require('../sanitiser/_sanitize'), |
||||||
|
sanitiser = { |
||||||
|
latlonzoom: require('../sanitiser/_latlonzoom') |
||||||
|
}; |
||||||
|
|
||||||
|
var sanitize = function(req, cb) { _sanitize(req, sanitiser, cb); } |
||||||
|
|
||||||
|
// export sanitize for testing
|
||||||
|
module.exports.sanitize = sanitize; |
||||||
|
|
||||||
|
// middleware
|
||||||
|
module.exports.middleware = function( req, res, next ){ |
||||||
|
sanitize( req, function( err, clean ){ |
||||||
|
if( err ){ |
||||||
|
res.status(400); // 400 Bad Request
|
||||||
|
return next(err); |
||||||
|
} |
||||||
|
req.clean = clean; |
||||||
|
next(); |
||||||
|
}); |
||||||
|
}; |
@ -1,84 +0,0 @@ |
|||||||
|
|
||||||
var logger = require('../src/logger'), |
|
||||||
indeces = require('../query/indeces'); |
|
||||||
|
|
||||||
// validate inputs, convert types and apply defaults
|
|
||||||
function sanitize( params, cb ){ |
|
||||||
|
|
||||||
var clean = {}; |
|
||||||
|
|
||||||
// ensure the input params are a valid object
|
|
||||||
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
|
||||||
params = {}; |
|
||||||
} |
|
||||||
|
|
||||||
// input text
|
|
||||||
if('string' !== typeof params.input || !params.input.length){ |
|
||||||
return cb( 'invalid param \'input\': text length, must be >0' ); |
|
||||||
} |
|
||||||
clean.input = params.input; |
|
||||||
|
|
||||||
// total results
|
|
||||||
var size = parseInt( params.size, 10 ); |
|
||||||
if( !isNaN( size ) ){ |
|
||||||
clean.size = Math.min( Math.max( size, 1 ), 40 ); // max
|
|
||||||
} else { |
|
||||||
clean.size = 10; // default
|
|
||||||
} |
|
||||||
|
|
||||||
// which layers to query
|
|
||||||
if('string' === typeof params.layers && params.layers.length){ |
|
||||||
var layers = params.layers.split(',').map( function( layer ){ |
|
||||||
return layer.toLowerCase(); // lowercase inputs
|
|
||||||
}); |
|
||||||
for( var x=0; x<layers.length; x++ ){ |
|
||||||
if( -1 === indeces.indexOf( layers[x] ) ){ |
|
||||||
return cb( 'invalid param \'layer\': must be one or more of ' + indeces.join(',') ); |
|
||||||
} |
|
||||||
} |
|
||||||
clean.layers = layers; |
|
||||||
} |
|
||||||
else { |
|
||||||
clean.layers = indeces; // default (all layers)
|
|
||||||
} |
|
||||||
|
|
||||||
// lat
|
|
||||||
var lat = parseFloat( params.lat, 10 ); |
|
||||||
if( isNaN( lat ) || lat < 0 || lat > 90 ){ |
|
||||||
return cb( 'invalid param \'lat\': must be >0 and <90' ); |
|
||||||
} |
|
||||||
clean.lat = lat; |
|
||||||
|
|
||||||
// lon
|
|
||||||
var lon = parseFloat( params.lon, 10 ); |
|
||||||
if( isNaN( lon ) || lon < -180 || lon > 180 ){ |
|
||||||
return cb( 'invalid param \'lon\': must be >-180 and <180' ); |
|
||||||
} |
|
||||||
clean.lon = lon; |
|
||||||
|
|
||||||
// zoom level
|
|
||||||
var zoom = parseInt( params.zoom, 10 ); |
|
||||||
if( !isNaN( zoom ) ){ |
|
||||||
clean.zoom = Math.min( Math.max( zoom, 1 ), 18 ); // max
|
|
||||||
} else { |
|
||||||
clean.zoom = 10; // default
|
|
||||||
} |
|
||||||
|
|
||||||
return cb( undefined, clean ); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
// export function
|
|
||||||
module.exports = sanitize; |
|
||||||
|
|
||||||
// middleware
|
|
||||||
module.exports.middleware = function( req, res, next ){ |
|
||||||
sanitize( req.query, function( err, clean ){ |
|
||||||
if( err ){ |
|
||||||
res.status(400); // 400 Bad Request
|
|
||||||
return next(err); |
|
||||||
} |
|
||||||
req.clean = clean; |
|
||||||
next(); |
|
||||||
}); |
|
||||||
}; |
|
@ -0,0 +1,26 @@ |
|||||||
|
|
||||||
|
var logger = require('../src/logger'), |
||||||
|
_sanitize = require('../sanitiser/_sanitize'), |
||||||
|
sanitizers = { |
||||||
|
input: require('../sanitiser/_input'), |
||||||
|
size: require('../sanitiser/_size'), |
||||||
|
layers: require('../sanitiser/_layers'), |
||||||
|
latlonzoom: require('../sanitiser/_latlonzoom') |
||||||
|
}; |
||||||
|
|
||||||
|
var sanitize = function(req, cb) { _sanitize(req, sanitizers, cb); } |
||||||
|
|
||||||
|
// export sanitize for testing
|
||||||
|
module.exports.sanitize = sanitize; |
||||||
|
|
||||||
|
// middleware
|
||||||
|
module.exports.middleware = function( req, res, next ){ |
||||||
|
sanitize( req, function( err, clean ){ |
||||||
|
if( err ){ |
||||||
|
res.status(400); // 400 Bad Request
|
||||||
|
return next(err); |
||||||
|
} |
||||||
|
req.clean = clean; |
||||||
|
next(); |
||||||
|
}); |
||||||
|
}; |
Loading…
Reference in new issue