diff options
author | Minteck <minteck@phoenixnet.tech> | 2021-11-03 11:48:38 +0100 |
---|---|---|
committer | Minteck <minteck@phoenixnet.tech> | 2021-11-03 11:48:38 +0100 |
commit | 066723dc81ea8437ae5ed98e408163c669d1f96b (patch) | |
tree | 339f98b409edfdfe5a40fa758472f5d909cbc368 | |
parent | b2cc2c82edee1666bf5708a0ec49e4b1e00543b5 (diff) | |
download | wolfeye-js-066723dc81ea8437ae5ed98e408163c669d1f96b.tar.gz wolfeye-js-066723dc81ea8437ae5ed98e408163c669d1f96b.tar.bz2 wolfeye-js-066723dc81ea8437ae5ed98e408163c669d1f96b.zip |
Starting Gitea integration
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | htdocs/public/index.ejs | 7 | ||||
-rw-r--r-- | index.js | 2 | ||||
-rw-r--r-- | server/core.js | 1 | ||||
-rw-r--r-- | server/gitea.js | 106 | ||||
-rw-r--r-- | server/log.js | 16 |
6 files changed, 128 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71706c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +auth.txt +global/gitea.json
\ No newline at end of file diff --git a/htdocs/public/index.ejs b/htdocs/public/index.ejs index b26fad6..e4bdcb2 100644 --- a/htdocs/public/index.ejs +++ b/htdocs/public/index.ejs @@ -49,7 +49,7 @@ </div> <div style="height: 41px;text-align: center;"> - <a href="#" class="big-button">View list →</a> + <a href="/projects" class="big-button">View list →</a> </div> <div style="text-align: center;"> <a href="#/contact" class="big-button">Contact Info ↓</a> @@ -229,6 +229,11 @@ <h2>Who?!</h2> <h3>I am a non binary (sometimes genderfluid too) otherkin/transspecies furry.</h3> </div> + <div style="text-align: center;"> + <h2>We've come a long way</h2> + <h3>I've been doing techy stuff for the last <%- new Date().getFullYear() - 2013 %> years now, that's + loooong!</h3> + </div> </div> </div> @@ -10,6 +10,8 @@ if (cluster.isMaster) { console.log("All Rights Reserved"); console.log(""); + require('child_process').spawn("node", ["gitea.js"], {cwd: "./server", stdio: "inherit"}) + for (let i = 0; i < require('os').cpus().length; i++) { cluster.fork(); } diff --git a/server/core.js b/server/core.js index 5b075b3..c33ed01 100644 --- a/server/core.js +++ b/server/core.js @@ -1,5 +1,4 @@ global.mpws = require('./version'); - global.log = require('./log') global.serverRoot = __dirname + "/.."; global.fs = require('fs') diff --git a/server/gitea.js b/server/gitea.js new file mode 100644 index 0000000..314fca8 --- /dev/null +++ b/server/gitea.js @@ -0,0 +1,106 @@ +global.log = require('./log') +global.serverRoot = __dirname + "/.."; +global.fs = require('fs') +log.info("Reading configuration...") +global.config = require('../global/config.json') + +log.verbose("Initializing Gitea projects refresh...") + +function giteaRefresh() { + giteaDataTmp = []; + repos = []; + + log.info("Refreshing Gitea cache...") + + orgs_raw = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/orgs', '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + let orgs = []; + for (let org of orgs_raw) { + orgs.push(org.username); + } + + log.verbose("Found " + orgs.length + " orgs"); + + let orgs_mtk = []; + for (let org of orgs) { + log.verbose("Gathering members of '" + org + "'..."); + members_raw = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/orgs/' + org + '/members', '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + let members = []; + for (let member of members_raw) { + members.push(member.login); + } + + log.verbose("Has " + members.length + " members"); + + if (members.includes("minteck")) { + log.verbose("Includes Minteck, adding to list"); + orgs_mtk.push(org); + } else { + log.verbose("Doesn't include Minteck, not adding to list"); + } + } + + log.verbose("Minteck part of " + orgs_mtk.length + "/" + orgs.length + " orgs, exclusing themself"); + + log.verbose("Gathering personal projects"); + personal_raw = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/users/minteck/repos', '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + for (let repo of personal_raw) { + repos.push(repo.full_name); + } + + for (let org of orgs_mtk) { + log.verbose("Gathering projects from '" + org + "'"); + + org_projects_raw = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/users/' + org + '/repos', '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + for (let repo of org_projects_raw) { + repos.push(repo.full_name); + } + } + + log.verbose("Found " + repos.length + " projects: " + repos.join(", ")); + + for (let repo of repos) { + thisRepo = {}; + + log.verbose("Gathering info about " + repo); + repo_data = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/repos/' + repo, '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + if (!thisRepo.empty && !thisRepo.private && !thisRepo.internal) { + thisRepo.name = repo_data.full_name.trim() !== "" ? repo_data.full_name : null; + thisRepo.icon = repo_data.avatar_url.trim() !== "" ? repo_data.avatar_url : null; + thisRepo.size = repo_data.size; + thisRepo.website = repo_data.website.trim() !== "" ? repo_data.website : null; + thisRepo.update = repo_data.updated_at.trim() !== "" ? repo_data.updated_at : null; + + sattelite_data = JSON.parse(require('child_process').spawnSync("curl", ["-X", 'GET', 'https://source.minteck.org/api/v1/repos/' + repo + '/contents/SatteliteGiteaData.txt', '-H', 'accept: application/json', '-H', 'authorization: Basic ' + fs.readFileSync(serverRoot + "/auth.txt")]).stdout.toString()); + + if (!sattelite_data.documentation_url) { + thisRepo.name = Buffer.from(sattelite_data.content, "base64").toString(); + } + + giteaDataTmp.push(thisRepo); + } + } + + fs.writeFileSync("../global/gitea.json", JSON.stringify(giteaDataTmp, null, 4)); + log.info("Gitea cache successfully refreshed"); +} + +setInterval(() => { + try { + giteaRefresh() + } catch (e) { + log.error("Gitea projects refresh failed: " + e.message) + } +}, 3600000) + +setTimeout(() => { + try { + giteaRefresh() + } catch (e) { + log.error("Gitea projects refresh failed: " + e.message) + } +}, 1000)
\ No newline at end of file diff --git a/server/log.js b/server/log.js index 5b1e1fe..9673115 100644 --- a/server/log.js +++ b/server/log.js @@ -9,25 +9,33 @@ function fix2(number) { return "000".substr(0, 3 - number.toString().length) + number.toString(); } +if (cluster.worker) { + cid = fix2(cluster.worker.id); +} else if (process.argv[2]) { + cid = fix2(process.argv[2] - 1 + 1); +} else { + cid = "---"; +} + module.exports.info = function (logel) { time = fix(process.uptime()); - console.log("[" + fix2(cluster.worker.id) + "] " + "[" + time + "] [info] " + logel); + console.log("[" + cid + "] " + "[" + time + "] [info] " + logel); } module.exports.verbose = function (logel) { time = fix(process.uptime()); if (config.verbose) { - console.log("[" + fix2(cluster.worker.id) + "] " + "[" + time + "] [verbose] " + logel); + console.log("[" + cid + "] " + "[" + time + "] [verbose] " + logel); } } module.exports.warn = function (logel) { time = fix(process.uptime()); - console.log("[" + fix2(cluster.worker.id) + "] " + "[" + time + "] [warn] " + logel); + console.log("[" + cid + "] " + "[" + time + "] [warn] " + logel); } module.exports.error = function (logel) { time = fix(process.uptime()); - console.log("[" + fix2(cluster.worker.id) + "] " + "[" + time + "] [error] " + logel); + console.log("[" + cid + "] " + "[" + time + "] [error] " + logel); process.exit() }
\ No newline at end of file |