ACP quick actions (#6374)

* ACP quick actions

- Moved restart, build & restart, and logout into separate buttons
- Moved buttons on mobile into the side menu
- Added version and upgrade alert to header / mobile menu
- Moved version checking to server-side with a cache for rate limiting
- Changed "reload" translations to "rebuild and restart"

* Change info alert to black-on-white to match focused search bar

* Fix tests

* Fallback for failed fetch of latest version
This commit is contained in:
Peter Jaszkowiak
2018-03-20 06:32:17 -06:00
committed by Julian Lam
parent 81e085bb9d
commit eaae5b52cd
14 changed files with 229 additions and 103 deletions

55
src/admin/versions.js Normal file
View File

@@ -0,0 +1,55 @@
'use strict';
var semver = require('semver');
var request = require('request');
var meta = require('../meta');
var versionCache = '';
var versionCacheLastModified = '';
var isPrerelease = /^v?\d+\.\d+\.\d+-.+$/;
function getLatestVersion(callback) {
var headers = {
Accept: 'application/vnd.github.v3+json',
'User-Agent': 'NodeBB Admin Control Panel/' + meta.config.title,
};
if (versionCacheLastModified) {
headers['If-Modified-Since'] = versionCacheLastModified;
}
request('https://api.github.com/repos/NodeBB/NodeBB/tags', {
json: true,
headers: headers,
}, function (err, res, releases) {
if (err) {
return callback(err);
}
if (res.statusCode === 304) {
return callback(null, versionCache);
}
if (res.statusCode !== 200) {
return callback(Error(res.statusMessage));
}
releases = releases.filter(function (version) {
return !isPrerelease.test(version.name); // filter out automated prerelease versions
}).map(function (version) {
return version.name.replace(/^v/, '');
}).sort(function (a, b) {
return semver.lt(a, b) ? 1 : -1;
});
versionCache = releases[0];
versionCacheLastModified = res.headers['last-modified'];
callback(null, versionCache);
});
}
exports.getLatestVersion = getLatestVersion;
exports.isPrerelease = isPrerelease;