Re-introduce sqlapi.host directive, allowing DNS lookups drop

For backward compatibility, sqlapi.host is only used if domain
is also defined and has a different value (empty string allowed).

Closes #117
This commit is contained in:
Sandro Santilli 2014-01-30 16:09:13 +01:00
parent c0020fd75a
commit ca4f3d2025
7 changed files with 58 additions and 12 deletions

View File

@ -1,3 +1,10 @@
1.6.4 -- 2014-MM-DD
-------------------
Enhancements:
* Allow specifying fixed sqlapi host address (#117)
1.6.3 -- 2014-01-30
-------------------

View File

@ -64,8 +64,15 @@ var config = {
}
,sqlapi: {
protocol: 'http',
domain: 'localhost.lan',
// If "host" is given, it will be used
// to connect to the SQL-API without a
// DNS lookup
host: '127.0.0.1',
port: 8080,
// The "domain" part will be appended to
// the cartodb username and passed to
// SQL-API requests in the Host HTTP header
domain: '',
version: 'v1'
}
,varnish: {

View File

@ -58,8 +58,15 @@ var config = {
}
,sqlapi: {
protocol: 'https',
domain: 'cartodb.com',
// If "host" is given, it will be used
// to connect to the SQL-API without a
// DNS lookup
//host: '127.0.0.1',
port: 8080,
// The "domain" part will be appended to
// the cartodb username and passed to
// SQL-API requests in the Host HTTP header
domain: 'cartodb.com',
version: 'v2'
}
,varnish: {

View File

@ -58,8 +58,15 @@ var config = {
}
,sqlapi: {
protocol: 'https',
domain: 'cartodb.com',
// If "host" is given, it will be used
// to connect to the SQL-API without a
// DNS lookup
//host: '127.0.0.1',
port: 8080,
// The "domain" part will be appended to
// the cartodb username and passed to
// SQL-API requests in the Host HTTP header
domain: 'cartodb.com',
version: 'v2'
}
,varnish: {

View File

@ -58,10 +58,17 @@ var config = {
}
,sqlapi: {
protocol: 'http',
domain: '',
// If "host" is given, it will be used
// to connect to the SQL-API without a
// DNS lookup
host: '127.0.0.1',
port: 1080,
// The "domain" part will be appended to
// the cartodb username and passed to
// SQL-API requests in the Host HTTP header
domain: 'donot_look_this_up',
// This port will be used by "make check" for testing purposes
// It must be available
port: 1080,
version: 'v1'
}
,varnish: {

View File

@ -10,7 +10,11 @@ var _ = require('underscore')
// This is for backward compatibility with 1.3.3
if ( _.isUndefined(global.environment.sqlapi.domain) ) {
global.environment.sqlapi.domain = global.environment.sqlapi.host;
// Only use "host" as "domain" if it contains alphanumeric characters
var host = global.environment.sqlapi.host;
if ( host && host.match(/[a-zA-Z]/) ) {
global.environment.sqlapi.domain = host;
}
}
module.exports = function(){
@ -68,9 +72,13 @@ module.exports = function(){
var api = global.environment.sqlapi;
// build up api string
var sqlapi = api.protocol + '://' + username;
if ( api.domain ) sqlapi += '.' + api.domain;
sqlapi += ':' + api.port + '/api/' + api.version + '/sql'
var sqlapihostname = username;
if ( api.domain ) sqlapihostname += '.' + api.domain;
var sqlapi = api.protocol + '://';
if ( api.host && api.host != api.domain ) sqlapi += api.host;
else sqlapi += sqlapihostname;
sqlapi += ':' + api.port + '/api/' + api.version + '/sql';
var qs = { q: sql }
@ -85,8 +93,11 @@ module.exports = function(){
// TODO: use "host" header to allow IP based specification
// of sqlapi address (and avoid a DNS lookup)
//
request.post({url:sqlapi, body:qs, json:true},
function(err, res, body){
request.post({
url:sqlapi, body:qs, json:true,
headers:{hostname:sqlapihostname}
}, function(err, res, body)
{
if (err){
console.log('ERROR connecting to SQL API on ' + sqlapi + ': ' + err);
callback(err);

View File

@ -1,7 +1,7 @@
{
"private": true,
"name": "windshaft-cartodb",
"version": "1.6.3",
"version": "1.6.4",
"description": "A map tile server for CartoDB",
"keywords": [
"cartodb"