summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--htdocs/public/index.ejs7
-rw-r--r--index.js2
-rw-r--r--server/core.js1
-rw-r--r--server/gitea.js106
-rw-r--r--server/log.js16
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>
diff --git a/index.js b/index.js
index 1bd5184..adc931c 100644
--- a/index.js
+++ b/index.js
@@ -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