|
|
|
const request = require('request');
|
|
|
|
const bl = require('bl');
|
|
|
|
const _ = require('lodash');
|
|
|
|
|
|
|
|
const logger = require( 'pelias-logger' ).get( 'placeholder' );
|
|
|
|
|
|
|
|
module.exports = function setup(url) {
|
|
|
|
if (_.isEmpty(url)) {
|
|
|
|
logger.warn('placeholder service disabled');
|
|
|
|
|
|
|
|
return {
|
|
|
|
search: (text, lang, do_not_track, callback) => {
|
|
|
|
callback(`placeholder service disabled`);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
logger.info(`using placeholder service at ${url}`);
|
|
|
|
return {
|
|
|
|
search: (text, lang, do_not_track, callback) => {
|
|
|
|
const requestUrl = `${url}/search`;
|
|
|
|
|
|
|
|
const options = {
|
|
|
|
method: 'GET',
|
|
|
|
url: requestUrl,
|
|
|
|
qs: {
|
|
|
|
text: text,
|
|
|
|
lang: lang
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
if (do_not_track) {
|
|
|
|
options.headers = {
|
|
|
|
dnt: '1'
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
request(options).on('response', (response) => {
|
|
|
|
// pipe the response thru bl which will accumulate the entire body
|
|
|
|
response.pipe(bl((err, data) => {
|
|
|
|
if (response.statusCode === 200) {
|
|
|
|
// parse and return w/o error unless response wasn't JSON
|
|
|
|
try {
|
|
|
|
const parsed = JSON.parse(data);
|
|
|
|
return callback(null, parsed);
|
|
|
|
|
|
|
|
}
|
|
|
|
catch (err) {
|
|
|
|
if (do_not_track) {
|
|
|
|
logger.error(`${requestUrl} could not parse response: ${data}`);
|
|
|
|
return callback(`${requestUrl} could not parse response: ${data}`);
|
|
|
|
} else {
|
|
|
|
logger.error(`${response.request.href} could not parse response: ${data}`);
|
|
|
|
return callback(`${response.request.href} could not parse response: ${data}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// otherwise there was a non-200 status so handle generically
|
|
|
|
if (do_not_track) {
|
|
|
|
logger.error(`${requestUrl} returned status ${response.statusCode}: ${data}`);
|
|
|
|
return callback(`${requestUrl} returned status ${response.statusCode}: ${data}`);
|
|
|
|
} else {
|
|
|
|
logger.error(`${response.request.href} returned status ${response.statusCode}: ${data}`);
|
|
|
|
return callback(`${response.request.href} returned status ${response.statusCode}: ${data}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
})
|
|
|
|
.on('error', (err) => {
|
|
|
|
logger.error(`${requestUrl}: ${JSON.stringify(err)}`);
|
|
|
|
callback(err);
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|