Allow serving everything beneath a baseUrl with a path.

See: https://github.com/freifunkhamburg/ffffng/issues/44
This commit is contained in:
baldo 2017-05-06 18:40:59 +02:00
parent 3d6fb5feec
commit 8de06a0a8a
14 changed files with 85 additions and 55 deletions

View file

@ -7,6 +7,7 @@ angular.module('ffffng').factory('app', function (fs, config, _) {
var compress = require('compression');
var app = express();
var router = express.Router();
// urls beneath /internal are protected
var internalAuth = auth.basic(
@ -21,10 +22,10 @@ angular.module('ffffng').factory('app', function (fs, config, _) {
);
}
);
app.use('/internal', auth.connect(internalAuth));
router.use('/internal', auth.connect(internalAuth));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
var adminDir = __dirname + '/../admin';
var clientDir = __dirname + '/../client';
@ -34,7 +35,7 @@ angular.module('ffffng').factory('app', function (fs, config, _) {
'/config.js'
];
app.use(compress());
router.use(compress());
function serveTemplate(mimeType, req, res, next) {
return fs.readFile(templateDir + '/' + req.path, 'utf8', function (err, body) {
@ -49,15 +50,17 @@ angular.module('ffffng').factory('app', function (fs, config, _) {
});
}
app.use(function (req, res, next) {
router.use(function (req, res, next) {
if (jsTemplateFiles.indexOf(req.path) >= 0) {
return serveTemplate('application/javascript', req, res, next);
}
return next();
});
app.use('/internal/admin', express.static(adminDir + '/'));
app.use('/', express.static(clientDir + '/'));
router.use('/internal/admin', express.static(adminDir + '/'));
router.use('/', express.static(clientDir + '/'));
app.use(config.server.rootPath, router);
return app;
});

View file

@ -140,6 +140,10 @@ var config = deepExtend({}, defaultConfig, configJSON);
stripTrailingSlash(config.server, 'baseUrl');
stripTrailingSlash(config.client.map, 'mapUrl');
var url = require('url');
config.server.rootPath = url.parse(config.server.baseUrl).pathname;
config.client.rootPath = config.server.rootPath;
module.exports = config;
angular.module('ffffng').constant('config', config);

View file

@ -38,7 +38,8 @@ angular.module('ffffng').factory('Logger', function (app) {
app.use(scribe.express.logger());
}
if (config.server.internal.active) {
app.use('/internal/logs', scribe.webPanel());
var prefix = config.server.rootPath === '/' ? '' : config.server.rootPath;
app.use(prefix + '/internal/logs', scribe.webPanel());
}
return process.console;

View file

@ -8,40 +8,46 @@ angular.module('ffffng').factory('Router', function (
NodeResource,
MonitoringResource,
TaskResource,
MailResource
MailResource,
config
) {
return {
init: function () {
app.post('/', FrontendResource.render);
var express = require('express');
var router = express.Router();
app.get('/api/version', VersionResource.get);
router.post('/', FrontendResource.render);
app.post('/api/node', NodeResource.create);
app.put('/api/node/:token', NodeResource.update);
app.delete('/api/node/:token', NodeResource.delete);
app.get('/api/node/:token', NodeResource.get);
router.get('/api/version', VersionResource.get);
app.put('/api/monitoring/confirm/:token', MonitoringResource.confirm);
app.put('/api/monitoring/disable/:token', MonitoringResource.disable);
router.post('/api/node', NodeResource.create);
router.put('/api/node/:token', NodeResource.update);
router.delete('/api/node/:token', NodeResource.delete);
router.get('/api/node/:token', NodeResource.get);
app.get('/internal/api/statistics', StatisticsResource.get);
router.put('/api/monitoring/confirm/:token', MonitoringResource.confirm);
router.put('/api/monitoring/disable/:token', MonitoringResource.disable);
app.get('/internal/api/tasks', TaskResource.getAll);
app.put('/internal/api/tasks/run/:id', TaskResource.run);
app.put('/internal/api/tasks/enable/:id', TaskResource.enable);
app.put('/internal/api/tasks/disable/:id', TaskResource.disable);
router.get('/internal/api/statistics', StatisticsResource.get);
app.get('/internal/api/monitoring', MonitoringResource.getAll);
router.get('/internal/api/tasks', TaskResource.getAll);
router.put('/internal/api/tasks/run/:id', TaskResource.run);
router.put('/internal/api/tasks/enable/:id', TaskResource.enable);
router.put('/internal/api/tasks/disable/:id', TaskResource.disable);
app.get('/internal/api/mails', MailResource.getAll);
app.get('/internal/api/mails/:id', MailResource.get);
app.delete('/internal/api/mails/:id', MailResource.delete);
app.put('/internal/api/mails/reset/:id', MailResource.resetFailures);
router.get('/internal/api/monitoring', MonitoringResource.getAll);
app.put('/internal/api/nodes/:token', NodeResource.update);
app.delete('/internal/api/nodes/:token', NodeResource.delete);
app.get('/internal/api/nodes', NodeResource.getAll);
app.get('/internal/api/nodes/:token', NodeResource.get);
router.get('/internal/api/mails', MailResource.getAll);
router.get('/internal/api/mails/:id', MailResource.get);
router.delete('/internal/api/mails/:id', MailResource.delete);
router.put('/internal/api/mails/reset/:id', MailResource.resetFailures);
router.put('/internal/api/nodes/:token', NodeResource.update);
router.delete('/internal/api/nodes/:token', NodeResource.delete);
router.get('/internal/api/nodes', NodeResource.getAll);
router.get('/internal/api/nodes/:token', NodeResource.get);
app.use(config.server.rootPath, router);
}
};
});