2015-12-11 14:37:55 -08:00
|
|
|
'use strict';
|
|
|
|
|
|
2015-12-11 14:50:30 -08:00
|
|
|
var assert = require('assert'),
|
|
|
|
|
config = require('./config.js'),
|
2015-12-11 21:49:24 -08:00
|
|
|
debug = require('debug')('box:src/nginx'),
|
2015-12-11 14:37:55 -08:00
|
|
|
ejs = require('ejs'),
|
|
|
|
|
fs = require('fs'),
|
|
|
|
|
path = require('path'),
|
|
|
|
|
paths = require('./paths.js'),
|
|
|
|
|
safe = require('safetydance'),
|
|
|
|
|
shell = require('./shell.js');
|
|
|
|
|
|
|
|
|
|
exports = module.exports = {
|
|
|
|
|
configureAdmin: configureAdmin,
|
2015-12-11 14:48:02 -08:00
|
|
|
configureApp: configureApp,
|
|
|
|
|
unconfigureApp: unconfigureApp,
|
2015-12-11 14:37:55 -08:00
|
|
|
reload: reload
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var NGINX_APPCONFIG_EJS = fs.readFileSync(__dirname + '/../setup/start/nginx/appconfig.ejs', { encoding: 'utf8' }),
|
|
|
|
|
RELOAD_NGINX_CMD = path.join(__dirname, 'scripts/reloadnginx.sh');
|
|
|
|
|
|
|
|
|
|
function configureAdmin(certFilePath, keyFilePath, callback) {
|
2015-12-11 14:50:30 -08:00
|
|
|
assert.strictEqual(typeof certFilePath, 'string');
|
|
|
|
|
assert.strictEqual(typeof keyFilePath, 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2015-12-11 14:37:55 -08:00
|
|
|
var data = {
|
|
|
|
|
sourceDir: path.resolve(__dirname, '..'),
|
|
|
|
|
adminOrigin: config.adminOrigin(),
|
|
|
|
|
vhost: config.adminFqdn(),
|
|
|
|
|
endpoint: 'admin',
|
|
|
|
|
certFilePath: certFilePath,
|
2016-07-14 14:01:25 +02:00
|
|
|
keyFilePath: keyFilePath,
|
|
|
|
|
xFrameOptions: 'SAMEORIGIN'
|
2015-12-11 14:37:55 -08:00
|
|
|
};
|
|
|
|
|
var nginxConf = ejs.render(NGINX_APPCONFIG_EJS, data);
|
|
|
|
|
var nginxConfigFilename = path.join(paths.NGINX_APPCONFIG_DIR, 'admin.conf');
|
|
|
|
|
|
|
|
|
|
if (!safe.fs.writeFileSync(nginxConfigFilename, nginxConf)) return callback(safe.error);
|
|
|
|
|
|
|
|
|
|
reload(callback);
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-17 11:38:27 -07:00
|
|
|
function configureApp(app, certFilePath, keyFilePath, callback) {
|
2015-12-11 14:50:30 -08:00
|
|
|
assert.strictEqual(typeof app, 'object');
|
|
|
|
|
assert.strictEqual(typeof certFilePath, 'string');
|
|
|
|
|
assert.strictEqual(typeof keyFilePath, 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2015-12-11 14:48:02 -08:00
|
|
|
var sourceDir = path.resolve(__dirname, '..');
|
2016-09-07 00:31:25 -07:00
|
|
|
var oauthProxy = app.oauthProxy;
|
2016-02-19 15:43:39 +01:00
|
|
|
var endpoint = oauthProxy ? 'oauthproxy' : 'app';
|
2016-04-19 00:56:23 -07:00
|
|
|
var vhost = app.altDomain || config.appFqdn(app.location);
|
2015-12-11 14:48:02 -08:00
|
|
|
|
|
|
|
|
var data = {
|
|
|
|
|
sourceDir: sourceDir,
|
|
|
|
|
adminOrigin: config.adminOrigin(),
|
|
|
|
|
vhost: vhost,
|
|
|
|
|
port: app.httpPort,
|
|
|
|
|
endpoint: endpoint,
|
|
|
|
|
certFilePath: certFilePath,
|
2016-07-14 14:01:25 +02:00
|
|
|
keyFilePath: keyFilePath,
|
2016-07-14 15:16:05 +02:00
|
|
|
xFrameOptions: app.xFrameOptions || 'SAMEORIGIN' // once all apps have been updated/
|
2015-12-11 14:48:02 -08:00
|
|
|
};
|
|
|
|
|
var nginxConf = ejs.render(NGINX_APPCONFIG_EJS, data);
|
|
|
|
|
|
|
|
|
|
var nginxConfigFilename = path.join(paths.NGINX_APPCONFIG_DIR, app.id + '.conf');
|
2016-09-07 00:38:27 -07:00
|
|
|
debug('writing config for "%s" to %s with options %j', vhost, nginxConfigFilename, data);
|
2015-12-11 14:48:02 -08:00
|
|
|
|
|
|
|
|
if (!safe.fs.writeFileSync(nginxConfigFilename, nginxConf)) {
|
2016-04-19 00:54:42 -07:00
|
|
|
debug('Error creating nginx config for "%s" : %s', vhost, safe.error.message);
|
2015-12-11 14:48:02 -08:00
|
|
|
return callback(safe.error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reload(callback);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function unconfigureApp(app, callback) {
|
2015-12-11 14:50:30 -08:00
|
|
|
assert.strictEqual(typeof app, 'object');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2016-04-19 00:56:23 -07:00
|
|
|
var vhost = app.altDomain || config.appFqdn(app.location);
|
|
|
|
|
|
2015-12-11 14:48:02 -08:00
|
|
|
var nginxConfigFilename = path.join(paths.NGINX_APPCONFIG_DIR, app.id + '.conf');
|
|
|
|
|
if (!safe.fs.unlinkSync(nginxConfigFilename)) {
|
2016-04-19 00:56:23 -07:00
|
|
|
debug('Error removing nginx configuration of "%s": %s', vhost, safe.error.message);
|
2015-12-11 14:48:02 -08:00
|
|
|
return callback(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reload(callback);
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-11 14:37:55 -08:00
|
|
|
function reload(callback) {
|
|
|
|
|
shell.sudo('reload', [ RELOAD_NGINX_CMD ], callback);
|
|
|
|
|
}
|