diff --git a/src/cloudron.js b/src/cloudron.js index fa5ee721a..6d7ed0089 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -449,7 +449,7 @@ function txtRecordsWithSpf(callback) { } function addDnsRecords(callback) { - callback = typeof callback === 'function' ? callback : NOOP_CALLBACK; + callback = callback || NOOP_CALLBACK; if (process.env.BOX_ENV === 'test') return callback(); @@ -791,7 +791,7 @@ function migrate(options, callback) { } function refreshDNS(callback) { - assert.strictEqual(typeof callback, 'function'); + callback = callback || NOOP_CALLBACK; sysinfo.getIp(function (error, ip) { if (error) return callback(new CloudronError(CloudronError.INTERNAL_ERROR, error)); diff --git a/src/cron.js b/src/cron.js index 8f8900bfb..08ab373dd 100644 --- a/src/cron.js +++ b/src/cron.js @@ -31,7 +31,8 @@ var gAutoupdaterJob = null, gSchedulerSyncJob = null, gCertificateRenewJob = null, gCheckDiskSpaceJob = null, - gCleanupEventlogJob = null; + gCleanupEventlogJob = null, + gDynamicDNSJob = null; var NOOP_CALLBACK = function (error) { if (error) console.error(error); }; var AUDIT_SOURCE = { userId: null, username: 'cron' }; @@ -63,12 +64,14 @@ function initialize(callback) { settings.events.on(settings.TIME_ZONE_KEY, recreateJobs); settings.events.on(settings.AUTOUPDATE_PATTERN_KEY, autoupdatePatternChanged); + settings.events.on(settings.DYNAMIC_DNS_KEY, dynamicDNSChanged); settings.getAll(function (error, allSettings) { if (error) return callback(error); recreateJobs(allSettings[settings.TIME_ZONE_KEY]); autoupdatePatternChanged(allSettings[settings.AUTOUPDATE_PATTERN_KEY]); + dynamicDNSChanged(allSettings[settings.AUTOUPDATE_PATTERN_KEY]); callback(); }); @@ -193,6 +196,25 @@ function autoupdatePatternChanged(pattern) { }); } +function dynamicDNSChanged(enabled) { + assert.strictEqual(typeof enabled, 'boolean'); + assert(gBoxUpdateCheckerJob); + + debug('Dynamic DNS setting changed to %s', enabled); + + if (enabled) { + gDynamicDNSJob = new CronJob({ + cronTime: '00 */10 * * * *', + onTick: cloudron.refreshDNS, + start: true, + timeZone: gBoxUpdateCheckerJob.cronTime.zone // hack + }); + } else { + if (gDynamicDNSJob) gDynamicDNSJob.stop(); + gDynamicDNSJob = null; + } +} + function uninitialize(callback) { assert.strictEqual(typeof callback, 'function'); @@ -235,5 +257,8 @@ function uninitialize(callback) { if (gCertificateRenewJob) gCertificateRenewJob.stop(); gCertificateRenewJob = null; + if (gDynamicDNSJob) gDynamicDNSJob.stop(); + gDynamicDNSJob = null; + callback(); }