Added cors middleware, decoupled query and job controllers from its dependencies
This commit is contained in:
parent
048d2cd0ea
commit
79e626a71e
28
app/app.js
28
app/app.js
@ -21,6 +21,16 @@ var StatsD = require('node-statsd').StatsD;
|
|||||||
var _ = require('underscore');
|
var _ = require('underscore');
|
||||||
var LRU = require('lru-cache');
|
var LRU = require('lru-cache');
|
||||||
|
|
||||||
|
var UserDatabaseService = require('./services/user_database_service');
|
||||||
|
var JobPublisher = require('../batch/job_publisher');
|
||||||
|
var JobQueue = require('../batch/job_queue');
|
||||||
|
var UserIndexer = require('../batch/user_indexer');
|
||||||
|
var JobBackend = require('../batch/job_backend');
|
||||||
|
var JobCanceller = require('../batch/job_canceller');
|
||||||
|
var UserDatabaseMetadataService = require('../batch/user_database_metadata_service');
|
||||||
|
|
||||||
|
var cors = require('./middlewares/cors');
|
||||||
|
|
||||||
var GenericController = require('./controllers/generic_controller');
|
var GenericController = require('./controllers/generic_controller');
|
||||||
var QueryController = require('./controllers/query_controller');
|
var QueryController = require('./controllers/query_controller');
|
||||||
var JobController = require('./controllers/job_controller');
|
var JobController = require('./controllers/job_controller');
|
||||||
@ -48,6 +58,7 @@ function App() {
|
|||||||
reapIntervalMillis: global.settings.redisReapIntervalMillis
|
reapIntervalMillis: global.settings.redisReapIntervalMillis
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Set default configuration
|
// Set default configuration
|
||||||
global.settings.db_pubuser = global.settings.db_pubuser || "publicuser";
|
global.settings.db_pubuser = global.settings.db_pubuser || "publicuser";
|
||||||
global.settings.bufferedRows = global.settings.bufferedRows || 1000;
|
global.settings.bufferedRows = global.settings.bufferedRows || 1000;
|
||||||
@ -139,6 +150,10 @@ function App() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
app.use(cors());
|
||||||
|
|
||||||
|
|
||||||
// Use step-profiler
|
// Use step-profiler
|
||||||
if ( global.settings.useProfiler ) {
|
if ( global.settings.useProfiler ) {
|
||||||
app.use(function(req, res, next) {
|
app.use(function(req, res, next) {
|
||||||
@ -162,13 +177,22 @@ function App() {
|
|||||||
|
|
||||||
// basic routing
|
// basic routing
|
||||||
|
|
||||||
|
var userDatabaseService = new UserDatabaseService(metadataBackend);
|
||||||
|
|
||||||
|
var jobQueue = new JobQueue(metadataBackend);
|
||||||
|
var jobPublisher = new JobPublisher();
|
||||||
|
var userIndexer = new UserIndexer(metadataBackend);
|
||||||
|
var jobBackend = new JobBackend(metadataBackend, jobQueue, jobPublisher, userIndexer);
|
||||||
|
var userDatabaseMetadataService = new UserDatabaseMetadataService(metadataBackend);
|
||||||
|
var jobCanceller = new JobCanceller(metadataBackend, userDatabaseMetadataService, jobBackend);
|
||||||
|
|
||||||
var genericController = new GenericController();
|
var genericController = new GenericController();
|
||||||
genericController.route(app);
|
genericController.route(app);
|
||||||
|
|
||||||
var queryController = new QueryController(metadataBackend, tableCache, statsd_client);
|
var queryController = new QueryController(userDatabaseService, tableCache, statsd_client);
|
||||||
queryController.route(app);
|
queryController.route(app);
|
||||||
|
|
||||||
var jobController = new JobController(metadataBackend, tableCache, statsd_client);
|
var jobController = new JobController(userDatabaseService, jobBackend, jobCanceller, tableCache, statsd_client);
|
||||||
jobController.route(app);
|
jobController.route(app);
|
||||||
|
|
||||||
var cacheStatusController = new CacheStatusController(tableCache);
|
var cacheStatusController = new CacheStatusController(tableCache);
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var setCrossDomain = require('../utils/cross_domain');
|
|
||||||
|
|
||||||
function GenericController() {
|
function GenericController() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10,7 +8,6 @@ GenericController.prototype.route = function (app) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
GenericController.prototype.handleRequest = function(req, res) {
|
GenericController.prototype.handleRequest = function(req, res) {
|
||||||
setCrossDomain(res);
|
|
||||||
res.end();
|
res.end();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,33 +4,17 @@ var _ = require('underscore');
|
|||||||
var step = require('step');
|
var step = require('step');
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
|
||||||
var UserDatabaseService = require('../services/user_database_service');
|
|
||||||
var AuthApi = require('../auth/auth_api');
|
var AuthApi = require('../auth/auth_api');
|
||||||
|
|
||||||
var JobPublisher = require('../../batch/job_publisher');
|
|
||||||
var JobQueue = require('../../batch/job_queue');
|
|
||||||
var UserIndexer = require('../../batch/user_indexer');
|
|
||||||
var JobBackend = require('../../batch/job_backend');
|
|
||||||
var JobCanceller = require('../../batch/job_canceller');
|
|
||||||
var UserDatabaseMetadataService = require('../../batch/user_database_metadata_service');
|
|
||||||
|
|
||||||
var CdbRequest = require('../models/cartodb_request');
|
var CdbRequest = require('../models/cartodb_request');
|
||||||
var handleException = require('../utils/error_handler');
|
var handleException = require('../utils/error_handler');
|
||||||
|
|
||||||
var cdbReq = new CdbRequest();
|
var cdbReq = new CdbRequest();
|
||||||
|
|
||||||
function JobController(metadataBackend, tableCache, statsd_client) {
|
function JobController(userDatabaseService, jobBackend, jobCanceller, tableCache, statsd_client) {
|
||||||
var jobQueue = new JobQueue(metadataBackend);
|
this.userDatabaseService = userDatabaseService;
|
||||||
var jobPublisher = new JobPublisher();
|
this.jobBackend = jobBackend;
|
||||||
var userIndexer = new UserIndexer(metadataBackend);
|
this.jobCanceller = jobCanceller;
|
||||||
|
|
||||||
this.userDatabaseService = new UserDatabaseService(metadataBackend);
|
|
||||||
this.metadataBackend = metadataBackend;
|
|
||||||
this.tableCache = tableCache;
|
this.tableCache = tableCache;
|
||||||
this.statsd_client = statsd_client;
|
this.statsd_client = statsd_client;
|
||||||
this.jobBackend = new JobBackend(metadataBackend, jobQueue, jobPublisher, userIndexer);
|
|
||||||
this.userDatabaseMetadataService = new UserDatabaseMetadataService(metadataBackend);
|
|
||||||
this.jobCanceller = new JobCanceller(this.metadataBackend, this.userDatabaseMetadataService, this.jobBackend);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JobController.prototype.route = function (app) {
|
JobController.prototype.route = function (app) {
|
||||||
|
@ -5,7 +5,6 @@ var step = require('step');
|
|||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
var PSQL = require('cartodb-psql');
|
var PSQL = require('cartodb-psql');
|
||||||
|
|
||||||
var UserDatabaseService = require('../services/user_database_service');
|
|
||||||
var AuthApi = require('../auth/auth_api');
|
var AuthApi = require('../auth/auth_api');
|
||||||
|
|
||||||
var CdbRequest = require('../models/cartodb_request');
|
var CdbRequest = require('../models/cartodb_request');
|
||||||
@ -15,17 +14,15 @@ var sanitize_filename = require('../utils/filename_sanitizer');
|
|||||||
var generateMD5 = require('../utils/md5');
|
var generateMD5 = require('../utils/md5');
|
||||||
var queryMayWrite = require('../utils/query_may_write');
|
var queryMayWrite = require('../utils/query_may_write');
|
||||||
var getContentDisposition = require('../utils/content_disposition');
|
var getContentDisposition = require('../utils/content_disposition');
|
||||||
var setCrossDomain = require('../utils/cross_domain');
|
|
||||||
var generateCacheKey = require('../utils/cache_key_generator');
|
var generateCacheKey = require('../utils/cache_key_generator');
|
||||||
var handleException = require('../utils/error_handler');
|
var handleException = require('../utils/error_handler');
|
||||||
|
|
||||||
var cdbReq = new CdbRequest();
|
var cdbReq = new CdbRequest();
|
||||||
|
|
||||||
function QueryController(metadataBackend, tableCache, statsd_client) {
|
function QueryController(userDatabaseService, tableCache, statsd_client) {
|
||||||
this.metadataBackend = metadataBackend;
|
|
||||||
this.tableCache = tableCache;
|
this.tableCache = tableCache;
|
||||||
this.statsd_client = statsd_client;
|
this.statsd_client = statsd_client;
|
||||||
this.userDatabaseService = new UserDatabaseService(metadataBackend);
|
this.userDatabaseService = userDatabaseService;
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryController.prototype.route = function (app) {
|
QueryController.prototype.route = function (app) {
|
||||||
@ -230,9 +227,6 @@ QueryController.prototype.handleQuery = function (req, res) {
|
|||||||
res.header("Content-Disposition", getContentDisposition(formatter, filename, use_inline));
|
res.header("Content-Disposition", getContentDisposition(formatter, filename, use_inline));
|
||||||
res.header("Content-Type", formatter.getContentType());
|
res.header("Content-Type", formatter.getContentType());
|
||||||
|
|
||||||
// allow cross site post
|
|
||||||
setCrossDomain(res);
|
|
||||||
|
|
||||||
// set cache headers
|
// set cache headers
|
||||||
var ttl = 31536000; // 1 year time to live by default
|
var ttl = 31536000; // 1 year time to live by default
|
||||||
var cache_policy = req.query.cache_policy;
|
var cache_policy = req.query.cache_policy;
|
||||||
|
16
app/middlewares/cors.js
Normal file
16
app/middlewares/cors.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function cors(extraHeaders) {
|
||||||
|
return function(req, res, next) {
|
||||||
|
var baseHeaders = 'X-Requested-With, X-Prototype-Version, X-CSRF-Token';
|
||||||
|
|
||||||
|
if(extraHeaders) {
|
||||||
|
baseHeaders += ', ' + extraHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.header('Access-Control-Allow-Origin', '*');
|
||||||
|
res.header('Access-Control-Allow-Headers', baseHeaders);
|
||||||
|
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
};
|
@ -1,6 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = function setCrossDomain(res){
|
|
||||||
res.header("Access-Control-Allow-Origin", "*");
|
|
||||||
res.header("Access-Control-Allow-Headers", "X-Requested-With, X-Prototype-Version, X-CSRF-Token");
|
|
||||||
};
|
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
var _ = require('underscore');
|
var _ = require('underscore');
|
||||||
var PgErrorHandler = require('../postgresql/error_handler');
|
var PgErrorHandler = require('../postgresql/error_handler');
|
||||||
var setCrossDomain = require('../utils/cross_domain');
|
|
||||||
|
|
||||||
// jshint unused: false
|
// jshint unused: false
|
||||||
module.exports = function handleException(err, res) {
|
module.exports = function handleException(err, res) {
|
||||||
@ -23,9 +22,6 @@ module.exports = function handleException(err, res) {
|
|||||||
console.error("EXCEPTION REPORT: " + err.stack);
|
console.error("EXCEPTION REPORT: " + err.stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow cross site post
|
|
||||||
setCrossDomain(res);
|
|
||||||
|
|
||||||
// Force inline content disposition
|
// Force inline content disposition
|
||||||
res.header("Content-Disposition", 'inline');
|
res.header("Content-Disposition", 'inline');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user