diff --git a/lib/cartodb/cartodb_windshaft.js b/lib/cartodb/cartodb_windshaft.js index 6488549f..03029c46 100644 --- a/lib/cartodb/cartodb_windshaft.js +++ b/lib/cartodb/cartodb_windshaft.js @@ -12,8 +12,6 @@ if ( ! process.env['PGAPPNAME'] ) process.env['PGAPPNAME']='cartodb_tiler'; var CartodbWindshaft = function(serverOptions) { - var debug = global.environment.debug; - // Perform keyword substitution in statsd // See https://github.com/CartoDB/Windshaft-cartodb/issues/153 if ( global.environment.statsd ) { @@ -222,142 +220,6 @@ var CartodbWindshaft = function(serverOptions) { ); }; - // Instantiate a template - function instanciateTemplate(req, res, template_params, callback) { - ws.doCORS(res); - var that = this; - var response = {}; - var template; - var signedMaps = serverOptions.signedMaps; - var layergroup; - var layergroupid; - var fakereq; // used for call to createLayergroup - var cdbuser = ws.userByReq(req); - // Format of template_id: []@ - var tpl_id = req.params.template_id.split('@'); - if ( tpl_id.length > 1 ) { - if ( tpl_id[0] && tpl_id[0] != cdbuser ) { - var err = new Error('Cannot instanciate map of user "' - + tpl_id[0] + '" on database of user "' - + cdbuser + '"'); - err.http_status = 403; - callback(err); - return; - } - tpl_id = tpl_id[1]; - } - var auth_token = req.query.auth_token; - Step( - function getTemplate(){ - templateMaps.getTemplate(cdbuser, tpl_id, this); - }, - function checkAuthorized(err, data) { - if ( req.profiler ) req.profiler.done('getTemplate'); - if ( err ) throw err; - if ( ! data ) { - err = new Error("Template '" + tpl_id + "' of user '" + cdbuser + "' not found"); - err.http_status = 404; - throw err; - } - template = data; - var cert = templateMaps.getTemplateCertificate(template); - var authorized = false; - try { - // authorizedByCert will throw if unauthorized - authorized = signedMaps.authorizedByCert(cert, auth_token); - } catch (err) { - // we catch to add http_status - err.http_status = 403; - throw err; - } - if ( ! authorized ) { - err = new Error('Unauthorized template instanciation'); - err.http_status = 403; - throw err; - } - /*if ( (! req.headers['content-type'] || req.headers['content-type'].split(';')[0] != 'application/json') && req.query.callback === undefined) { - throw new Error('template POST data must be of type application/json, it is instead '); - }*/ - //var template_params = req.body; - if ( req.profiler ) req.profiler.done('authorizedByCert'); - return templateMaps.instance(template, template_params); - }, - function prepareParams(err, instance){ - if ( req.profiler ) req.profiler.done('TemplateMaps_instance'); - if ( err ) throw err; - layergroup = instance; - fakereq = { query: {}, params: {}, headers: _.clone(req.headers), - method: req.method, - res: res, - profiler: req.profiler - }; - ws.setDBParams(cdbuser, fakereq.params, this); - }, - function setApiKey(err){ - if ( req.profiler ) req.profiler.done('setDBParams'); - if ( err ) throw err; - cartoData.getUserMapKey(cdbuser, this); - }, - function createLayergroup(err, val) { - if ( req.profiler ) req.profiler.done('getUserMapKey'); - if ( err ) throw err; - fakereq.params.api_key = val; - ws.createLayergroup(layergroup, fakereq, this); - }, - function signLayergroup(err, resp) { - // NOTE: createLayergroup uses profiler.start()/end() internally - //if ( req.profiler ) req.profiler.done('createLayergroup'); - if ( err ) throw err; - response = resp; - var signer = cdbuser; - var map_id = response.layergroupid.split(':')[0]; // dropping last_updated - var crt_id = template.auth_id; // check ? - if ( ! crt_id ) { - var errmsg = "Template '" + tpl_id + "' of user '" + cdbuser + "' has no signature"; - // Is this really illegal ? - // Maybe we could just return an unsigned layergroupid - // in this case... - err = new Error(errmsg); - err.http_status = 403; // Forbidden, we refuse to respond to this - throw err; - } - signedMaps.signMap(signer, map_id, crt_id, this); - }, - function prepareResponse(err) { - if ( req.profiler ) req.profiler.done('signMap'); - if ( err ) throw err; - //console.log("Response from createLayergroup: "); console.dir(response); - // Add the signature part to the token! - var tplhash = templateMaps.fingerPrint(template).substring(0,8); - if ( req.profiler ) req.profiler.done('fingerPrint'); - response.layergroupid = cdbuser + '@' + tplhash + '@' + response.layergroupid; - return response; - }, - callback - ); - } - - function finish_instanciation(err, response, res, req) { - if ( req.profiler ) { - res.header('X-Tiler-Profiler', req.profiler.toJSONString()); - } - if (err) { - var statusCode = 400; - response = { error: ''+err }; - if ( ! _.isUndefined(err.http_status) ) { - statusCode = err.http_status; - } - if(debug) { - response.stack = err.stack; - } - ws.sendError(res, response, statusCode, 'POST INSTANCE TEMPLATE', err); - } else { - ws.sendResponse(res, [response, 200]); - } - } - - - // ---- Template maps interface ends @} var healthCheck = new HealthCheck(cartoData, Windshaft.tilelive); ws.get('/health', function(req, res) {