|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
var _ = require('underscore')
|
|
|
|
|
, Step = require('step')
|
|
|
|
|
, cartoData = require('./carto_data');
|
|
|
|
|
, cartoData = require('./carto_data')
|
|
|
|
|
, Cache = require('./cache_validator');
|
|
|
|
|
|
|
|
|
|
module.exports = function(){
|
|
|
|
|
var me = {
|
|
|
|
@ -17,6 +18,28 @@ module.exports = function(){
|
|
|
|
|
log_format: '[:date] :req[X-Real-IP] \033[90m:method\033[0m \033[36m:req[Host]:url\033[0m \033[90m:status :response-time ms -> :res[Content-Type]\033[0m'
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Set the cache chanel info to invalidate the cache on the frontend server
|
|
|
|
|
//
|
|
|
|
|
// @param req The request object.
|
|
|
|
|
// The function will have no effect unless req.res exists.
|
|
|
|
|
// It is expected that req.params contains 'table' and 'dbname'
|
|
|
|
|
//
|
|
|
|
|
// @param cb function(err, channel) will be called when ready.
|
|
|
|
|
// the channel parameter will be null if nothing was added
|
|
|
|
|
//
|
|
|
|
|
me.addCacheChannel = function(req, cb) {
|
|
|
|
|
// skip non-GET requests, or requests for which there's no response
|
|
|
|
|
if ( req.method != 'GET' || ! req.res ) { cb(null, null); return; }
|
|
|
|
|
var res = req.res;
|
|
|
|
|
var ttl = global.environment.varnish.ttl || 86400;
|
|
|
|
|
Cache.generateCacheChannel(req, function(channel){
|
|
|
|
|
res.header('X-Cache-Channel', channel);
|
|
|
|
|
res.header('Last-Modified', new Date().toUTCString());
|
|
|
|
|
res.header('Cache-Control', 'no-cache,max-age='+ttl+',must-revalidate, public');
|
|
|
|
|
cb(null, channel); // add last-modified too ?
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Whitelist input and get database name & default geometry type from
|
|
|
|
|
* subdomain/user metadata held in CartoDB Redis
|
|
|
|
@ -45,6 +68,8 @@ module.exports = function(){
|
|
|
|
|
callback(null, xml);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var that = this;
|
|
|
|
|
|
|
|
|
|
Step(
|
|
|
|
|
function getPrivacy(){
|
|
|
|
|
cartoData.authorize(req, this);
|
|
|
|
@ -66,10 +91,14 @@ module.exports = function(){
|
|
|
|
|
cartoData.getGeometryType(req, this);
|
|
|
|
|
},
|
|
|
|
|
function finishSetup(err, data){
|
|
|
|
|
if ( err ) { callback(err, req); return; }
|
|
|
|
|
|
|
|
|
|
if (!_.isNull(data))
|
|
|
|
|
_.extend(req.params, {geom_type: data});
|
|
|
|
|
|
|
|
|
|
callback(err, req);
|
|
|
|
|
that.addCacheChannel(req, function(err, chan) {
|
|
|
|
|
callback(err, req);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|