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