diff --git a/src/cloudron.js b/src/cloudron.js index c8ce47fc8..070bab94e 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -11,6 +11,7 @@ exports = module.exports = { getStatus: getStatus, reboot: reboot, + isRebootRequired: isRebootRequired, onActivated: onActivated, @@ -28,13 +29,13 @@ var assert = require('assert'), debug = require('debug')('box:cloudron'), domains = require('./domains.js'), df = require('@sindresorhus/df'), + fs = require('fs'), mailer = require('./mailer.js'), os = require('os'), path = require('path'), paths = require('./paths.js'), platform = require('./platform.js'), reverseProxy = require('./reverseproxy.js'), - safe = require('safetydance'), settings = require('./settings.js'), shell = require('./shell.js'), spawn = require('child_process').spawn, @@ -182,6 +183,13 @@ function reboot(callback) { shell.sudo('reboot', [ REBOOT_CMD ], {}, callback); } +function isRebootRequired(callback) { + assert.strictEqual(typeof callback, 'function'); + + // https://serverfault.com/questions/92932/how-does-ubuntu-keep-track-of-the-system-restart-required-flag-in-motd + callback(null, fs.existsSync('/var/run/reboot-required')); +} + function checkDiskSpace(callback) { callback = callback || NOOP_CALLBACK; diff --git a/src/routes/cloudron.js b/src/routes/cloudron.js index 5342efc64..827e91b0d 100644 --- a/src/routes/cloudron.js +++ b/src/routes/cloudron.js @@ -2,6 +2,7 @@ exports = module.exports = { reboot: reboot, + isRebootRequired: isRebootRequired, getConfig: getConfig, getDisks: getDisks, getUpdateInfo: getUpdateInfo, @@ -38,6 +39,14 @@ function reboot(req, res, next) { cloudron.reboot(function () { }); } +function isRebootRequired(req, res, next) { + cloudron.isRebootRequired(function (error, result) { + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, { rebootRequired: result })); + }); +} + function getConfig(req, res, next) { cloudron.getConfig(function (error, cloudronConfig) { if (error) return next(new HttpError(500, error)); diff --git a/src/server.js b/src/server.js index 35b44e174..0f1a29c7c 100644 --- a/src/server.js +++ b/src/server.js @@ -122,6 +122,7 @@ function initializeExpressSync() { router.get ('/api/v1/cloudron/update', cloudronScope, routes.cloudron.getUpdateInfo); router.post('/api/v1/cloudron/update', cloudronScope, routes.cloudron.update); router.post('/api/v1/cloudron/check_for_updates', cloudronScope, routes.cloudron.checkForUpdates); + router.get ('/api/v1/cloudron/reboot', cloudronScope, routes.cloudron.isRebootRequired); router.post('/api/v1/cloudron/reboot', cloudronScope, routes.cloudron.reboot); router.get ('/api/v1/cloudron/graphs', cloudronScope, routes.graphs.getGraphs); router.get ('/api/v1/cloudron/disks', cloudronScope, routes.cloudron.getDisks);