diff --git a/CHANGES b/CHANGES index c6ac96554..d684bd12a 100644 --- a/CHANGES +++ b/CHANGES @@ -1537,3 +1537,6 @@ * Hide mail relay password * Do not return API tokens in REST API +[3.6.0] +* Make reboot required check server side + diff --git a/src/cloudron.js b/src/cloudron.js index fc9efa7e0..88114088f 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -191,7 +191,8 @@ function runSystemChecks() { async.parallel([ checkBackupConfiguration, checkDiskSpace, - checkMailStatus + checkMailStatus, + checkRebootRequired ], function () { debug('runSystemChecks: done'); }); @@ -284,6 +285,20 @@ function checkMailStatus(callback) { }); } +function checkRebootRequired(callback) { + assert.strictEqual(typeof callback, 'function'); + + debug('checking if reboot required'); + + isRebootRequired(function (error, rebootRequired) { + if (error) return callback(error); + + if (rebootRequired) notifications.rebootRequired('To finish security updates, a [reboot](/#/system) is necessary.'); + + callback(); + }); +} + function getLogs(unit, options, callback) { assert.strictEqual(typeof unit, 'string'); assert(options && typeof options === 'object'); diff --git a/src/notifications.js b/src/notifications.js index 9519d24f8..6a343ed23 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -20,7 +20,8 @@ exports = module.exports = { apptaskCrash: apptaskCrash, backupConfigWarning: backupConfigWarning, diskSpaceWarning: diskSpaceWarning, - mailStatusWarning: mailStatusWarning + mailStatusWarning: mailStatusWarning, + rebootRequired: rebootRequired }; var assert = require('assert'), @@ -308,6 +309,16 @@ function mailStatusWarning(message) { }); } +function rebootRequired(message) { + assert.strictEqual(typeof message, 'string'); + + actionForAllAdmins([], function (admin, callback) { + upsert(admin.id, null, 'Reboot Required', message, '/#/system', callback); + }, function (error) { + if (error) console.error(error); + }); +} + function diskSpaceWarning(message) { assert.strictEqual(typeof message, 'string');