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)