From 98320048ea8f36eea0ed39acaa58cb0d88797514 Mon Sep 17 00:00:00 2001 From: Ashwin Srinivasan Date: Fri, 25 Jan 2019 12:10:39 -0500 Subject: [PATCH] Added version checking --- server/package-lock.json | 32 ++++++++++++++++++++++++++++++++ server/package.json | 1 + server/routes/admin.js | 5 +++++ server/util/version.js | 22 ++++++++++++++++++++++ server/views/admin.hbs | 18 +++++++++++++++++- 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 server/util/version.js diff --git a/server/package-lock.json b/server/package-lock.json index a8bf5c3..da9a5c0 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -198,6 +198,15 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1106,6 +1115,24 @@ "write": "^0.2.1" } }, + "follow-redirects": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1513,6 +1540,11 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index 55afbd9..63736dd 100644 --- a/server/package.json +++ b/server/package.json @@ -7,6 +7,7 @@ }, "author": "QuantumStack", "dependencies": { + "axios": "^0.18.0", "body-parser": "^1.18.3", "cookie-parser": "~1.4.3", "debug": "~2.6.9", diff --git a/server/routes/admin.js b/server/routes/admin.js index 337b14f..c945a40 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -4,6 +4,7 @@ const json2csv = require('json2csv').parse; const User = require('./../models/User'); const Entry = require('./../models/Entry'); const adminRequired = require('./../util/adminRequired'); +const version = require('./../util/version'); const router = express.Router(); @@ -17,6 +18,7 @@ router.get('/lab', adminRequired, (req, res) => { course: process.env.CMULAB_COURSE, loc: process.env.CMULAB_LOC, isLab: true, + version: version(), }); }); @@ -25,6 +27,7 @@ router.get('/csv', adminRequired, (req, res) => { course: process.env.CMULAB_COURSE, loc: process.env.CMULAB_LOC, isCsv: true, + version: version(), }); }); @@ -33,6 +36,7 @@ router.get('/delete', adminRequired, (req, res) => { course: process.env.CMULAB_COURSE, loc: process.env.CMULAB_LOC, isDelete: true, + version: version(), }); }); @@ -44,6 +48,7 @@ router.get('/users', adminRequired, (req, res, next) => { loc: process.env.CMULAB_LOC, isUsers: true, users, + version: version(), }); }); }); diff --git a/server/util/version.js b/server/util/version.js new file mode 100644 index 0000000..9b43695 --- /dev/null +++ b/server/util/version.js @@ -0,0 +1,22 @@ +const axios = require('axios'); + +const current = 'v1.0'; +let latest; + +function check() { + axios.get('https://api.github.com/repos/QuantumStack/CMULab/releases') + .then((res) => { + latest = res.data[0].tag_name; + }) + .catch(() => { + latest = current; + }); +} + +check(); +setInterval(check, 86400000); + +module.exports = () => { + if (current === latest) return { update: false }; + return { update: true, latest, current }; +}; diff --git a/server/views/admin.hbs b/server/views/admin.hbs index 5ef6767..fac3d6b 100644 --- a/server/views/admin.hbs +++ b/server/views/admin.hbs @@ -1,6 +1,22 @@
CMULab   {{course}}
-
+ +{{#if version.update}} +
+
+
+
+

CMULab Update Available!

+
+
+ QuantumStack has released a new version of CMULab. You are currently using {{version.current}}, but {{version.latest}} is now available. Please visit our GitHub repository to download the update and deploy it onto your CMULab instance. Go to the release page to see what's new. +
+
+
+
+{{else}} +
+{{/if}}