diff --git a/src/cloudron.js b/src/cloudron.js index cdd4f51e5..804211faf 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -72,7 +72,6 @@ function initialize(callback) { assert.strictEqual(typeof callback, 'function'); async.series([ - settings.initialize, reverseProxy.configureDefaultServer, cron.startPreActivationJobs, onActivated @@ -84,8 +83,7 @@ function uninitialize(callback) { async.series([ cron.stopJobs, - platform.stop, - settings.uninitialize + platform.stop ], callback); } diff --git a/src/cron.js b/src/cron.js index 9af2313dd..a56787036 100644 --- a/src/cron.js +++ b/src/cron.js @@ -86,10 +86,10 @@ function startPostActivationJobs(callback) { start: true }); - settings.events.on(settings.TIME_ZONE_KEY, recreateJobs); - settings.events.on(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); - settings.events.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); - settings.events.on(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); + settings.on(settings.TIME_ZONE_KEY, recreateJobs); + settings.on(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); + settings.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); + settings.on(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); settings.getAll(function (error, allSettings) { if (error) return callback(error); @@ -282,10 +282,10 @@ function dynamicDnsChanged(enabled) { function stopJobs(callback) { assert.strictEqual(typeof callback, 'function'); - settings.events.removeListener(settings.TIME_ZONE_KEY, recreateJobs); - settings.events.removeListener(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); - settings.events.removeListener(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); - settings.events.removeListener(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); + settings.removeListener(settings.TIME_ZONE_KEY, recreateJobs); + settings.removeListener(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); + settings.removeListener(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); + settings.removeListener(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); for (var job in gJobs) { if (!gJobs[job]) continue; diff --git a/src/platform.js b/src/platform.js index 128b99df2..2eff12fc9 100644 --- a/src/platform.js +++ b/src/platform.js @@ -77,7 +77,6 @@ function start(callback) { } function stop(callback) { - exports.events = null; taskmanager.pauseTasks(callback); } diff --git a/src/routes/test/settings-test.js b/src/routes/test/settings-test.js index 65b6b8d06..deeefeb18 100644 --- a/src/routes/test/settings-test.js +++ b/src/routes/test/settings-test.js @@ -82,7 +82,7 @@ describe('Settings API', function () { it('can set app_autoupdate_pattern', function (done) { var eventPattern = null; - settings.events.on(settings.APP_AUTOUPDATE_PATTERN_KEY, function (pattern) { + settings.on(settings.APP_AUTOUPDATE_PATTERN_KEY, function (pattern) { eventPattern = pattern; }); @@ -98,7 +98,7 @@ describe('Settings API', function () { it('can set app_autoupdate_pattern to never', function (done) { var eventPattern = null; - settings.events.on(settings.APP_AUTOUPDATE_PATTERN_KEY, function (pattern) { + settings.on(settings.APP_AUTOUPDATE_PATTERN_KEY, function (pattern) { eventPattern = pattern; }); @@ -145,7 +145,7 @@ describe('Settings API', function () { it('can set box_autoupdate_pattern', function (done) { var eventPattern = null; - settings.events.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, function (pattern) { + settings.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, function (pattern) { eventPattern = pattern; }); @@ -161,7 +161,7 @@ describe('Settings API', function () { it('can set box_autoupdate_pattern to never', function (done) { var eventPattern = null; - settings.events.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, function (pattern) { + settings.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, function (pattern) { eventPattern = pattern; }); diff --git a/src/server.js b/src/server.js index 8f8ea56e3..2f217d095 100644 --- a/src/server.js +++ b/src/server.js @@ -380,7 +380,7 @@ function stop(callback) { gHttpServer.close.bind(gHttpServer), gSysadminHttpServer.close.bind(gSysadminHttpServer) ], function (error) { - if (error) console.error(error); + if (error) return callback(error); routes.oauth2.uninitialize(); diff --git a/src/settings.js b/src/settings.js index 227127296..4f652992b 100644 --- a/src/settings.js +++ b/src/settings.js @@ -3,9 +3,6 @@ exports = module.exports = { SettingsError: SettingsError, - initialize: initialize, - uninitialize: uninitialize, - getAppAutoupdatePattern: getAppAutoupdatePattern, setAppAutoupdatePattern: setAppAutoupdatePattern, @@ -57,7 +54,8 @@ exports = module.exports = { TIME_ZONE_KEY: 'time_zone', CLOUDRON_NAME_KEY: 'cloudron_name', - events: null + on: on, + removeListener: removeListener }; var addons = require('./addons.js'), @@ -100,6 +98,8 @@ var gDefaults = (function () { return result; })(); +let gEvents = new (require('events').EventEmitter)(); + function SettingsError(reason, errorOrMessage) { assert.strictEqual(typeof reason, 'string'); assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined'); @@ -124,18 +124,12 @@ SettingsError.EXTERNAL_ERROR = 'External Error'; SettingsError.NOT_FOUND = 'Not Found'; SettingsError.BAD_FIELD = 'Bad Field'; -function initialize(callback) { - assert.strictEqual(typeof callback, 'function'); - - exports.events = new (require('events').EventEmitter)(); - callback(); +function on(key, handler) { + gEvents.on(key, handler); } -function uninitialize(callback) { - assert.strictEqual(typeof callback, 'function'); - - exports.events = null; - callback(); +function removeListener(key, handler) { + gEvents.removeListener(key, handler); } function setAppAutoupdatePattern(pattern, callback) { @@ -150,7 +144,7 @@ function setAppAutoupdatePattern(pattern, callback) { settingsdb.set(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern); + gEvents.emit(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern); return callback(null); }); @@ -179,7 +173,7 @@ function setBoxAutoupdatePattern(pattern, callback) { settingsdb.set(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); + gEvents.emit(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); return callback(null); }); @@ -205,7 +199,7 @@ function setTimeZone(tz, callback) { settingsdb.set(exports.TIME_ZONE_KEY, tz, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.TIME_ZONE_KEY, tz); + gEvents.emit(exports.TIME_ZONE_KEY, tz); return callback(null); }); @@ -244,7 +238,7 @@ function setCloudronName(name, callback) { settingsdb.set(exports.CLOUDRON_NAME_KEY, name, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.CLOUDRON_NAME_KEY, name); + gEvents.emit(exports.CLOUDRON_NAME_KEY, name); return callback(null); }); @@ -293,7 +287,7 @@ function setDynamicDnsConfig(enabled, callback) { settingsdb.set(exports.DYNAMIC_DNS_KEY, enabled ? 'enabled' : '', function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.DYNAMIC_DNS_KEY, enabled); + gEvents.emit(exports.DYNAMIC_DNS_KEY, enabled); return callback(null); }); @@ -324,7 +318,7 @@ function setBackupConfig(backupConfig, callback) { settingsdb.set(exports.BACKUP_CONFIG_KEY, JSON.stringify(backupConfig), function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.BACKUP_CONFIG_KEY, backupConfig); + gEvents.emit(exports.BACKUP_CONFIG_KEY, backupConfig); callback(null); }); @@ -349,7 +343,7 @@ function setEmailDigest(enabled, callback) { settingsdb.set(exports.EMAIL_DIGEST, enabled ? 'enabled' : '', function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.EMAIL_DIGEST, enabled); + gEvents.emit(exports.EMAIL_DIGEST, enabled); callback(null); }); @@ -422,7 +416,7 @@ function setAppstoreConfig(appstoreConfig, callback) { settingsdb.set(exports.APPSTORE_CONFIG_KEY, JSON.stringify(data), function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - exports.events.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig); + gEvents.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig); callback(null); }); diff --git a/src/test/appstore-test.js b/src/test/appstore-test.js index dba3f6b1e..c935ce43a 100644 --- a/src/test/appstore-test.js +++ b/src/test/appstore-test.js @@ -30,8 +30,7 @@ function setup(done) { async.series([ database.initialize, - database._clear, - settings.initialize + database._clear ], done); } @@ -39,7 +38,6 @@ function cleanup(done) { nock.cleanAll(); async.series([ - settings.uninitialize, database._clear, database.uninitialize ], done); diff --git a/src/test/apptask-test.js b/src/test/apptask-test.js index 435be6e7d..1cf63bf06 100644 --- a/src/test/apptask-test.js +++ b/src/test/apptask-test.js @@ -18,7 +18,6 @@ var addons = require('../addons.js'), net = require('net'), nock = require('nock'), paths = require('../paths.js'), - settings = require('../settings.js'), userdb = require('../userdb.js'), _ = require('underscore'); @@ -124,8 +123,7 @@ describe('apptask', function () { database._clear, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), userdb.add.bind(null, ADMIN.id, ADMIN), - appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.ownerId, APP.portBindings, APP), - settings.initialize + appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.ownerId, APP.portBindings, APP) ], done); }); diff --git a/src/test/backups-test.js b/src/test/backups-test.js index 28640faec..2ebe08f3e 100644 --- a/src/test/backups-test.js +++ b/src/test/backups-test.js @@ -98,7 +98,6 @@ describe('backups', function () { mkdirp.bind(null, BACKUP_DIR), database.initialize, database._clear, - settings.initialize, settings.setBackupConfig.bind(null, { provider: 'filesystem', key: 'enckey', @@ -111,7 +110,6 @@ describe('backups', function () { after(function (done) { async.series([ - settings.uninitialize, database._clear ], done); }); diff --git a/src/test/digest-test.js b/src/test/digest-test.js index eaf9ec649..5c800b7d4 100644 --- a/src/test/digest-test.js +++ b/src/test/digest-test.js @@ -70,7 +70,6 @@ describe('digest', function () { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), users.createOwner.bind(null, USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE), @@ -94,7 +93,6 @@ describe('digest', function () { safe.fs.unlinkSync(paths.UPDATE_CHECKER_FILE); async.series([ - settings.uninitialize, database._clear, database.uninitialize ], done); diff --git a/src/test/dns-test.js b/src/test/dns-test.js index 1266d8bfc..503ede231 100644 --- a/src/test/dns-test.js +++ b/src/test/dns-test.js @@ -14,7 +14,6 @@ var async = require('async'), domains = require('../domains.js'), expect = require('expect.js'), nock = require('nock'), - settings = require('../settings.js'), util = require('util'); var DOMAIN_0 = { @@ -35,7 +34,6 @@ describe('dns provider', function () { async.series([ database.initialize, - settings.initialize, database._clear, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE) ], done); diff --git a/src/test/mail-test.js b/src/test/mail-test.js index 461195984..f77012b69 100644 --- a/src/test/mail-test.js +++ b/src/test/mail-test.js @@ -41,7 +41,6 @@ function setup(done) { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), function (callback) { @@ -61,7 +60,6 @@ function setup(done) { function cleanup(done) { async.series([ - settings.uninitialize, database._clear, database.uninitialize ], done); diff --git a/src/test/reverseproxy-test.js b/src/test/reverseproxy-test.js index 1112ffc39..31df4c20d 100644 --- a/src/test/reverseproxy-test.js +++ b/src/test/reverseproxy-test.js @@ -9,8 +9,7 @@ var async = require('async'), database = require('../database.js'), domains = require('../domains.js'), expect = require('expect.js'), - reverseProxy = require('../reverseproxy.js'), - settings = require('../settings.js'); + reverseProxy = require('../reverseproxy.js'); const DOMAIN_0 = { domain: 'example-reverseproxy-test.com', @@ -26,7 +25,6 @@ let AUDIT_SOURCE = { ip: '1.2.3.4' }; function setup(done) { async.series([ database.initialize, - settings.initialize, database._clear, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE) ], done); diff --git a/src/test/server-test.js b/src/test/server-test.js index 44b54e8b5..95054a143 100644 --- a/src/test/server-test.js +++ b/src/test/server-test.js @@ -9,7 +9,6 @@ var config = require('../config.js'), database = require('../database.js'), expect = require('expect.js'), - nock = require('nock'), progress = require('../progress.js'), superagent = require('superagent'), server = require('../server.js'); diff --git a/src/test/settings-test.js b/src/test/settings-test.js index 0183b402f..40dcec80d 100644 --- a/src/test/settings-test.js +++ b/src/test/settings-test.js @@ -29,7 +29,6 @@ function setup(done) { async.series([ database.initialize, - settings.initialize, function (callback) { MockS3.config.basePath = path.join(os.tmpdir(), 's3-settings-test-buckets/'); @@ -49,7 +48,6 @@ function cleanup(done) { rimraf.sync(MockS3.config.basePath); async.series([ - settings.uninitialize, database._clear, database.uninitialize ], done); diff --git a/src/test/updatechecker-test.js b/src/test/updatechecker-test.js index ae68a3eee..868795026 100644 --- a/src/test/updatechecker-test.js +++ b/src/test/updatechecker-test.js @@ -61,7 +61,6 @@ function cleanup(done) { safe.fs.unlinkSync(paths.UPDATE_CHECKER_FILE); async.series([ - settings.uninitialize, database._clear, database.uninitialize ], done); @@ -78,7 +77,6 @@ describe('updatechecker - box - manual (email)', function () { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), users.createOwner.bind(null, USER_0.username, USER_0.password, USER_0.email, USER_0.displayName, AUDIT_SOURCE), @@ -157,7 +155,6 @@ describe('updatechecker - box - automatic (no email)', function () { async.series([ database.initialize, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), mailer._clearMailQueue, @@ -201,7 +198,6 @@ describe('updatechecker - box - automatic free (email)', function () { async.series([ database.initialize, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), mailer._clearMailQueue, @@ -272,7 +268,6 @@ describe('updatechecker - app - manual (email)', function () { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), mailer._clearMailQueue, @@ -395,7 +390,6 @@ describe('updatechecker - app - automatic (no email)', function () { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), mailer._clearMailQueue, @@ -468,7 +462,6 @@ describe('updatechecker - app - automatic free (email)', function () { async.series([ database.initialize, database._clear, - settings.initialize, domains.add.bind(null, DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE), mail.addDomain.bind(null, DOMAIN_0.domain), mailer._clearMailQueue,