aboutsummaryrefslogtreecommitdiff
path: root/src/extras/requests.js
diff options
context:
space:
mode:
authorDelta <31860825+AA-Delta@users.noreply.github.com>2022-01-25 18:29:46 -0500
committerGitHub <noreply@github.com>2022-01-25 18:29:46 -0500
commit6469020960576b9e4f62c0c308eb5a055a696daa (patch)
treeafb0172e5d4a6c4b9e4644513e012fde9efe65f5 /src/extras/requests.js
parent353db2c99fd26c3c925247b61b30619020a12b5a (diff)
parent66204f6f58dc90e1e9ee40c7ea691927d0c50b8d (diff)
downloadViper-6469020960576b9e4f62c0c308eb5a055a696daa.tar.gz
Viper-6469020960576b9e4f62c0c308eb5a055a696daa.zip
Update/Merge main from Viper's repo
PR to merge to fork
Diffstat (limited to 'src/extras/requests.js')
-rw-r--r--src/extras/requests.js153
1 files changed, 153 insertions, 0 deletions
diff --git a/src/extras/requests.js b/src/extras/requests.js
new file mode 100644
index 0000000..16b1330
--- /dev/null
+++ b/src/extras/requests.js
@@ -0,0 +1,153 @@
+const { app } = require("electron");
+const path = require("path");
+const fs = require("fs");
+const { https } = require("follow-redirects");
+
+
+// all requests results are stored in this file
+const cachePath = path.join(app.getPath("cache"), "requests.json");
+const NORTHSTAR_LATEST_RELEASE_KEY = "nsLatestRelease";
+const NORTHSTAR_RELEASE_NOTES_KEY = "nsReleaseNotes";
+const VIPER_RELEASE_NOTES_KEY = "vpReleaseNotes";
+
+
+function _saveCache(data) {
+ fs.writeFileSync(cachePath, JSON.stringify(data));
+}
+
+function _getRequestsCache() {
+ if (fs.existsSync(cachePath)) {
+ return JSON.parse(fs.readFileSync(cachePath, "utf8"));
+ } else {
+ fs.writeFileSync(cachePath, "{}");
+ return {};
+ }
+}
+
+// Returns latest Northstar version available from GitHub releases. If
+// there's no cache result for this request, or if cache exists but is
+// old, refreshes cache with new data.
+async function getLatestNsVersion() {
+ return new Promise((resolve, reject) => {
+ let cache = _getRequestsCache();
+
+ if (cache[NORTHSTAR_LATEST_RELEASE_KEY] && (Date.now() - cache[NORTHSTAR_LATEST_RELEASE_KEY]["time"]) < 5 * 60 * 1000) {
+ resolve( cache[NORTHSTAR_LATEST_RELEASE_KEY]["body"]["tag_name"] );
+ } else {
+ https.get({
+ host: "api.github.com",
+ port: 443,
+ path: "/repos/R2Northstar/Northstar/releases/latest",
+ method: "GET",
+ headers: { "User-Agent": "viper" }
+ },
+
+ response => {
+ response.setEncoding("utf8");
+ let responseData = "";
+
+ response.on("data", data => {
+ responseData += data;
+ });
+
+ response.on("end", _ => {
+ cache[NORTHSTAR_LATEST_RELEASE_KEY] = {
+ "time": Date.now(),
+ "body": JSON.parse(responseData)
+ };
+ _saveCache(cache);
+ resolve( cache[NORTHSTAR_LATEST_RELEASE_KEY]["body"]["tag_name"] );
+ });
+ });
+ }
+ });
+}
+
+// Returns the download link to latest Northstar version. Should always
+// be called after getLatestNsVersion, as it refreshes cache data (if
+// needed).
+function getLatestNsVersionLink() {
+ const cache = _getRequestsCache();
+ return cache[NORTHSTAR_LATEST_RELEASE_KEY]["body"].assets[0].browser_download_url;
+}
+
+// Returns and caches the Northstar release notes
+async function getNsReleaseNotes() {
+ return new Promise(resolve => {
+ let cache = _getRequestsCache();
+
+ if (cache[NORTHSTAR_RELEASE_NOTES_KEY] && (Date.now() - cache[NORTHSTAR_RELEASE_NOTES_KEY]["time"]) < 5 * 60 * 1000) {
+ resolve( cache[NORTHSTAR_RELEASE_NOTES_KEY]["body"] );
+ } else {
+ https.get({
+ host: "api.github.com",
+ port: 443,
+ path: "/repos/R2Northstar/Northstar/releases",
+ method: "GET",
+ headers: { "User-Agent": "viper" }
+ },
+
+ response => {
+ response.setEncoding("utf8");
+ let responseData = "";
+
+ response.on("data", data => {
+ responseData += data;
+ });
+
+ response.on("end", _ => {
+ cache[NORTHSTAR_RELEASE_NOTES_KEY] = {
+ "time": Date.now(),
+ "body": JSON.parse(responseData)
+ };
+ _saveCache(cache);
+ resolve( cache[NORTHSTAR_RELEASE_NOTES_KEY]["body"] );
+ });
+ });
+ }
+ });
+}
+
+// Returns and caches the Viper release notes
+async function getVpReleaseNotes() {
+ return new Promise(resolve => {
+ let cache = _getRequestsCache();
+
+ if (cache[VIPER_RELEASE_NOTES_KEY] && (Date.now() - cache[VIPER_RELEASE_NOTES_KEY]["time"]) < 5 * 60 * 1000) {
+ resolve( cache[VIPER_RELEASE_NOTES_KEY]["body"] );
+ } else {
+ https.get({
+ host: "api.github.com",
+ port: 443,
+ path: "/repos/0negal/viper/releases",
+ method: "GET",
+ headers: { "User-Agent": "viper" }
+ },
+
+ response => {
+ response.setEncoding("utf8");
+ let responseData = "";
+
+ response.on("data", data => {
+ responseData += data;
+ });
+
+ response.on("end", _ => {
+ cache[VIPER_RELEASE_NOTES_KEY] = {
+ "time": Date.now(),
+ "body": JSON.parse(responseData)
+ };
+ _saveCache(cache);
+ resolve( cache[VIPER_RELEASE_NOTES_KEY]["body"] );
+ });
+ });
+ }
+ });
+}
+
+module.exports = {
+ getLatestNsVersion,
+ getLatestNsVersionLink,
+ getNsReleaseNotes,
+ getVpReleaseNotes
+};