mirror of https://github.com/pelias/api.git
Harish Krishna
10 years ago
4 changed files with 111 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||||||
|
|
||||||
|
var geojsonify = require('../helper/geojsonify').search; |
||||||
|
|
||||||
|
function setup( backend ){ |
||||||
|
|
||||||
|
// allow overriding of dependencies
|
||||||
|
backend = backend || require('../src/backend'); |
||||||
|
|
||||||
|
function controller( req, res, next ){ |
||||||
|
|
||||||
|
// backend command
|
||||||
|
var cmd = { |
||||||
|
index: 'pelias', |
||||||
|
type: req.clean.type, |
||||||
|
id: req.clean.id |
||||||
|
}; |
||||||
|
|
||||||
|
// query backend
|
||||||
|
backend().client.get( cmd, function( err, data ){ |
||||||
|
|
||||||
|
var docs = []; |
||||||
|
// handle backend errors
|
||||||
|
if( err ){ return next( err ); } |
||||||
|
|
||||||
|
if( data && data.found && data._source ){ |
||||||
|
docs.push(data._source); |
||||||
|
} |
||||||
|
|
||||||
|
// convert docs to geojson
|
||||||
|
var geojson = geojsonify( docs ); |
||||||
|
|
||||||
|
// response envelope
|
||||||
|
geojson.date = new Date().getTime(); |
||||||
|
|
||||||
|
// respond
|
||||||
|
return res.status(200).json( geojson ); |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
return controller; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = setup; |
@ -0,0 +1,39 @@ |
|||||||
|
// validate inputs, convert types and apply defaults
|
||||||
|
// id generally looks like 'geoname/4163334' (type/id)
|
||||||
|
// so, both type and id are required fields.
|
||||||
|
|
||||||
|
function sanitize( req ){ |
||||||
|
|
||||||
|
req.clean = req.clean || {}; |
||||||
|
var params= req.query; |
||||||
|
|
||||||
|
// ensure params is a valid object
|
||||||
|
if( Object.prototype.toString.call( params ) !== '[object Object]' ){ |
||||||
|
params = {}; |
||||||
|
} |
||||||
|
|
||||||
|
var errormessage = function(fieldname) { |
||||||
|
return { |
||||||
|
'error': true, |
||||||
|
'message': 'invalid param \''+ fieldname + '\': text length, must be >0' |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
// id text
|
||||||
|
if('string' !== typeof params.id || !params.id.length){ |
||||||
|
return errormessage('id'); |
||||||
|
} |
||||||
|
req.clean.id = params.id; |
||||||
|
|
||||||
|
// type text
|
||||||
|
if('string' !== typeof params.type || !params.type.length){ |
||||||
|
return errormessage('type'); |
||||||
|
} |
||||||
|
req.clean.type = params.type; |
||||||
|
|
||||||
|
return { 'error': false }; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// export function
|
||||||
|
module.exports = sanitize; |
@ -0,0 +1,23 @@ |
|||||||
|
|
||||||
|
var logger = require('../src/logger'), |
||||||
|
_sanitize = require('../sanitiser/_sanitize'), |
||||||
|
sanitizers = { |
||||||
|
id: require('../sanitiser/_id') |
||||||
|
}; |
||||||
|
|
||||||
|
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