Browse Source

Merge remote-tracking branch 'origin' into private-param-235

pull/241/head
Diana Shkolnikov 9 years ago
parent
commit
a3b0a090e2
  1. 8
      helper/adminFields.js
  2. 21
      helper/geojsonify.js
  3. 32
      sanitiser/_details.js
  4. 12
      sanitiser/_id.js
  5. 5
      sanitiser/_source.js
  6. 96
      test/unit/helper/geojsonify.js
  7. 2
      test/unit/sanitiser/reverse.js

8
helper/adminFields.js

@ -1,5 +1,7 @@
var peliasSchema = require('pelias-schema');
var peliasLogger = require( 'pelias-logger' ).get( 'api' ); var _ = require('lodash'),
peliasSchema = require('pelias-schema'),
peliasLogger = require( 'pelias-logger' ).get( 'api' );
var ADMIN_FIELDS = [ var ADMIN_FIELDS = [
'admin0', 'admin0',
@ -29,7 +31,7 @@ function getAvailableAdminFields(schema, expectedFields, logger) {
// check if expected fields are actually in current schema // check if expected fields are actually in current schema
var available = expectedFields.filter(function (field) { var available = expectedFields.filter(function (field) {
return (actualFields.indexOf(field) !== -1); return _.contains( actualFields, field );
}); });
if (available.length === 0) { if (available.length === 0) {

21
helper/geojsonify.js

@ -1,9 +1,8 @@
var GeoJSON = require('geojson'); var GeoJSON = require('geojson'),
var extent = require('geojson-extent'); extent = require('geojson-extent'),
var outputGenerator = require('./outputGenerator'); outputGenerator = require('./outputGenerator'),
var logger = require('pelias-logger').get('api'); logger = require('pelias-logger').get('api');
// Properties to be copied // Properties to be copied
var DETAILS_PROPS = [ var DETAILS_PROPS = [
@ -104,15 +103,13 @@ function geojsonifyPlace(place) {
return warning('No doc or center_point property'); return warning('No doc or center_point property');
} }
var geocoding = {}; var output = {};
addMetaData(place, geocoding); addMetaData(place, output);
addDetails(place, geocoding); addDetails(place, output);
addLabel(place, geocoding); addLabel(place, output);
var output = {};
output.geocoding = geocoding;
// map center_point for GeoJSON to work properly // map center_point for GeoJSON to work properly
// these should not show up in the final feature properties // these should not show up in the final feature properties
output.lat = parseFloat(place.center_point.lat); output.lat = parseFloat(place.center_point.lat);
@ -204,4 +201,4 @@ function warning( doc ) {
} }
module.exports.search = geojsonifyPlaces; module.exports.search = geojsonifyPlaces;

32
sanitiser/_details.js

@ -0,0 +1,32 @@
var _ = require('lodash'),
check = require('check-types');
var DEFAULT_DETAILS_BOOL = true;
// validate inputs, convert types and apply defaults
function sanitize( raw, clean ){
// error & warning messages
var messages = { errors: [], warnings: [] };
if( !check.undefined( raw.details ) ){
clean.details = isTruthy( raw.details );
} else {
clean.details = DEFAULT_DETAILS_BOOL;
}
return messages;
}
// be lenient with 'truthy' values
function isTruthy(val) {
if( check.string( val ) ){
return _.contains( ['true', '1'], val );
}
return val === 1 || val === true;
}
// export function
module.exports = sanitize;

12
sanitiser/_id.js

@ -1,5 +1,6 @@
var check = require('check-types'), var _ = require('lodash'),
check = require('check-types'),
types = require('../query/types'); types = require('../query/types');
var ID_DELIM = ':'; var ID_DELIM = ':';
@ -18,12 +19,7 @@ function sanitize( raw, clean ){
var messages = { errors: [], warnings: [] }; var messages = { errors: [], warnings: [] };
// 'raw.id' can be an array!? // 'raw.id' can be an array!?
var rawIds = check.array( raw.id ) ? raw.id : [ raw.id ]; var rawIds = check.array( raw.id ) ? _.unique( raw.id ) : [ raw.id ];
// de-dupe ids
rawIds = rawIds.filter(function(item, pos) {
return rawIds.indexOf( item ) === pos;
});
// ensure all elements are valid non-empty strings // ensure all elements are valid non-empty strings
rawIds = rawIds.filter( function( uc ){ rawIds = rawIds.filter( function( uc ){
@ -60,7 +56,7 @@ function sanitize( raw, clean ){
messages.errors.push( errorMessage( rawId ) ); messages.errors.push( errorMessage( rawId ) );
} }
// type text must be one of the types // type text must be one of the types
if( types.indexOf( type ) === -1 ){ if( !_.contains( types, type ) ){
messages.errors.push( messages.errors.push(
errorMessage('type', type + ' is invalid. It must be one of these values - [' + types.join(', ') + ']') errorMessage('type', type + ' is invalid. It must be one of these values - [' + types.join(', ') + ']')
); );

5
sanitiser/_source.js

@ -1,5 +1,6 @@
var check = require('check-types'), var _ = require('lodash'),
check = require('check-types'),
sources_map = require( '../query/sources' ); sources_map = require( '../query/sources' );
var ALL_SOURCES = Object.keys(sources_map), var ALL_SOURCES = Object.keys(sources_map),
@ -20,7 +21,7 @@ function sanitize( raw, clean ) {
var sources = raw.source.split(','); var sources = raw.source.split(',');
var invalid_sources = sources.filter(function(source) { var invalid_sources = sources.filter(function(source) {
return ALL_SOURCES.indexOf(source) === -1; return !_.contains( ALL_SOURCES, source );
}); });
if( invalid_sources.length > 0 ){ if( invalid_sources.length > 0 ){

96
test/unit/helper/geojsonify.js

@ -140,25 +140,23 @@ module.exports.tests.search = function(test, common) {
] ]
}, },
'properties': { 'properties': {
'geocoding': { 'id': 'id1',
'id': 'id1', 'layer': 'type1',
'layer': 'type1', 'source': 'type1',
'source': 'type1', 'label': '\'Round Midnight Jazz and Blues Bar, test3, Angel',
'label': '\'Round Midnight Jazz and Blues Bar, test3, Angel', 'name': '\'Round Midnight Jazz and Blues Bar',
'name': '\'Round Midnight Jazz and Blues Bar', 'country_a': 'GBR',
'country_a': 'GBR', 'country': 'United Kingdom',
'country': 'United Kingdom', 'region': 'Islington',
'region': 'Islington', 'region_a': 'ISL',
'region_a': 'ISL', 'county': 'Angel',
'county': 'Angel', 'localadmin': 'test1',
'localadmin': 'test1', 'locality': 'test2',
'locality': 'test2', 'neighbourhood': 'test3',
'neighbourhood': 'test3', 'category': ['food', 'nightlife'],
'category': ['food', 'nightlife'], 'housenumber': '13',
'housenumber': '13', 'street': 'Liverpool Road',
'street': 'Liverpool Road', 'postalcode': 'N1 0RW'
'postalcode': 'N1 0RW'
}
} }
}, },
{ {
@ -171,21 +169,19 @@ module.exports.tests.search = function(test, common) {
] ]
}, },
'properties': { 'properties': {
'geocoding': { 'id': 'id2',
'id': 'id2', 'layer': 'type2',
'layer': 'type2', 'source': 'type2',
'source': 'type2', 'label': 'Blues Cafe, test3, Smithfield',
'label': 'Blues Cafe, test3, Smithfield', 'name': 'Blues Cafe',
'name': 'Blues Cafe', 'country_a': 'GBR',
'country_a': 'GBR', 'country': 'United Kingdom',
'country': 'United Kingdom', 'region': 'City And County Of The City Of London',
'region': 'City And County Of The City Of London', 'region_a': 'COL',
'region_a': 'COL', 'county': 'Smithfield',
'county': 'Smithfield', 'localadmin': 'test1',
'localadmin': 'test1', 'locality': 'test2',
'locality': 'test2', 'neighbourhood': 'test3'
'neighbourhood': 'test3'
}
} }
}, },
{ {
@ -198,22 +194,20 @@ module.exports.tests.search = function(test, common) {
] ]
}, },
'properties': { 'properties': {
'geocoding': { 'id': '34633854',
'id': '34633854', 'layer': 'venue',
'layer': 'venue', 'source': 'osm',
'source': 'osm', 'label': 'Empire State Building, Manhattan, NY',
'label': 'Empire State Building, Manhattan, NY', 'name': 'Empire State Building',
'name': 'Empire State Building', 'country_a': 'USA',
'country_a': 'USA', 'country': 'United States',
'country': 'United States', 'region': 'New York',
'region': 'New York', 'region_a': 'NY',
'region_a': 'NY', 'county': 'New York',
'county': 'New York', 'localadmin': 'Manhattan',
'localadmin': 'Manhattan', 'locality': 'New York',
'locality': 'New York', 'neighbourhood': 'Koreatown',
'neighbourhood': 'Koreatown', 'category': ['tourism', 'transport']
'category': ['tourism', 'transport']
}
} }
} }
] ]
@ -235,4 +229,4 @@ module.exports.all = function (tape, common) {
for( var testCase in module.exports.tests ){ for( var testCase in module.exports.tests ){
module.exports.tests[testCase](test, common); module.exports.tests[testCase](test, common);
} }
}; };

2
test/unit/sanitiser/reverse.js

@ -133,7 +133,7 @@ module.exports.tests.sanitize_private = function(test, common) {
}); });
}); });
var valid_values = ['true', true, 1]; var valid_values = ['true', true, 1, '1'];
valid_values.forEach(function(value) { valid_values.forEach(function(value) {
test('valid private param ' + value, function(t) { test('valid private param ' + value, function(t) {
sanitize({ 'point.lat': 0, 'point.lon': 0, 'private': value }, function( err, clean ){ sanitize({ 'point.lat': 0, 'point.lon': 0, 'private': value }, function( err, clean ){

Loading…
Cancel
Save