diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 304b0bcc..ce37e5bb 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -23,13 +23,13 @@ jobs: - uses: actions/stale@v9 with: stale-issue-message: "This issue is stale because it has been open 10 days with no activity. Remove stale label or comment or this will be closed in 7 days." - stale-pr-message: "This PR is stale because it has been open 3 days with no activity. Remove stale label or comment or this will be closed in 11 days." + stale-pr-message: "This PR is stale because it has been open 3 days with no activity. Remove stale label or comment or this will be closed in 27 days." close-issue-message: "This issue was closed because it has been stale for 17 days with no activity." - close-pr-message: "This PR was closed because it has been stale for 14 days with no activity." + close-pr-message: "This PR was closed because it has been stale for 30 days with no activity." days-before-issue-stale: 10 days-before-pr-stale: 3 days-before-issue-close: 17 - days-before-pr-close: 14 + days-before-pr-close: 30 exempt-pr-labels: not-stale exempt-issue-labels: not-stale stale-pr-label: "Awaiting Response" diff --git a/dnsconfig.js b/dnsconfig.js index c993b1b4..73c11366 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -1,108 +1,124 @@ +// Setup registrar and DNS provider var regNone = NewRegistrar("none"); var providerCf = DnsProvider(NewDnsProvider("cloudflare")); var proxy = { - off: { cloudflare_proxy: "off" }, - on: { cloudflare_proxy: "on" } + on: { "cloudflare_proxy": "on" }, + off: { "cloudflare_proxy": "off" } }; +// Load all domain configurations from JSON files function getDomainsList(filesPath) { - var result = []; - var files = glob.apply(null, [filesPath, true, ".json"]); + var result = []; + var files = glob.apply(null, [filesPath, true, '.json']); - for (var i = 0; i < files.length; i++) { - var basename = files[i].split("/").reverse()[0]; - var name = basename.split(".")[0]; - - result.push({ name: name, data: require(files[i]) }); + files.forEach(function(file) { + try { + var basename = file.split('/').pop(); + var name = basename.split('.')[0]; + var data = require(file); + + // Validate required fields + if (!data.domain || !data.record) { + console.error("Missing required fields in " + file); + return; + } + + result.push({ name: name, data: data }); + } catch (error) { + console.error("Error loading " + file + ":", error); } + }); - return result; + return result; } -var domains = getDomainsList("./domains"); +var domains = getDomainsList('./domains'); +var recordsByDomain = {}; -var commit = {}; +// Helper to add records to a domain entry +function addRecord(domain, record) { + if (!recordsByDomain[domain]) { + recordsByDomain[domain] = []; + } + recordsByDomain[domain].push(record); +} -for (var idx in domains) { - var domainData = domains[idx].data; - var proxyState = domainData.proxied ? proxy.on : proxy.off; +// Process each domain +domains.forEach(function(domainEntry) { + var domainData = domainEntry.data; + var proxyState = proxy.on; // Default to enabled - if (!commit[domainData.domain]) commit[domainData.domain] = []; - - var owner = domainData.owner; - var ownerInfo = owner ? (owner.username ? owner.username : '') + ' ' + (owner.email ? '<' + owner.email + '>' : '') : ''; - - console.log("Configuring domain: " + domainData.subdomain + "." + domainData.domain + ", Owner: " + ownerInfo); - - if (domainData.records.A) { - for (var a in domainData.records.A) { - commit[domainData.domain].push(A(domainData.subdomain, IP(domainData.records.A[a]), proxyState)); - } - } - - if (domainData.records.AAAA) { - for (var aaaa in domainData.records.AAAA) { - commit[domainData.domain].push(AAAA(domainData.subdomain, domainData.records.AAAA[aaaa], proxyState)); - } - } - - if (domainData.records.CNAME) { - commit[domainData.domain].push(CNAME(domainData.subdomain, domainData.records.CNAME + ".", proxyState)); - } - - if (domainData.records.MX) { - for (var mx in domainData.records.MX) { - commit[domainData.domain].push(MX(domainData.subdomain, domainData.records.MX[mx].priority, domainData.records.MX[mx].value + ".")); - } - } - - if (domainData.records.NS) { - for (var ns in domainData.records.NS) { - commit[domainData.domain].push(NS(domainData.subdomain, domainData.records.NS[ns] + ".")); - } - } - - if (domainData.records.TXT) { - for (var txt in domainData.records.TXT) { - if (domainData.records.TXT[txt].name === "@") { - commit[domainData.domain].push(TXT(domainData.subdomain, domainData.records.TXT[txt].value)); - } else if (domainData.subdomain === "@") { - commit[domainData.domain].push(TXT(domainData.records.TXT[txt].name, domainData.records.TXT[txt].value)); - } else { - commit[domainData.domain].push(TXT(domainData.records.TXT[txt].name + "." + domainData.subdomain, domainData.records.TXT[txt].value)); - } - } - } - - if (domainData.records.CAA) { - for (var caa in domainData.records.CAA) { - var caaRecord = domainData.records.CAA[caa]; - commit[domainData.domain].push( - CAA(domainData.subdomain, caaRecord.flags, caaRecord.tag, caaRecord.value) - ); - } + if (domainData.proxied === false) { + proxyState = proxy.off; } - if (domainData.records.SRV) { - for (var srv in domainData.records.SRV) { - var srvRecord = domainData.records.SRV[srv]; - commit[domainData.domain].push( - SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") - ); - } + // Initialize records array for this domain + recordsByDomain[domainData.domain] = recordsByDomain[domainData.domain] || []; + + // Handle A records + if (domainData.record.A) { + domainData.record.A.forEach(function(ipAddress) { + addRecord(domainData.domain, A(domainData.subdomain, IP(ipAddress), proxyState)); + }); + } + + // Handle AAAA records + if (domainData.record.AAAA) { + domainData.record.AAAA.forEach(function(ipv6) { + addRecord(domainData.domain, AAAA(domainData.subdomain, ipv6, proxyState)); + }); + } + + // Handle CNAME records + if (domainData.record.CNAME) { + addRecord(domainData.domain, CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState)); + } + + // Handle MX records + if (domainData.record.MX) { + domainData.record.MX.forEach(function(mx) { + addRecord(domainData.domain, MX(domainData.subdomain, 10, mx + ".")); + }); + } + + // Handle NS records + if (domainData.record.NS) { + domainData.record.NS.forEach(function(ns) { + addRecord(domainData.domain, NS(domainData.subdomain, ns + ".")); + }); + } + + // Handle TXT records + if (domainData.record.TXT) { + domainData.record.TXT.forEach(function(txt) { + addRecord(domainData.domain, TXT(domainData.subdomain, txt)); + }); + } + + // Handle CAA records + if (domainData.record.CAA) { + domainData.record.CAA.forEach(function(caaRecord) { + addRecord(domainData.domain, CAA(domainData.subdomain, caaRecord.flags, caaRecord.tag, caaRecord.value)); + }); + } + + // Handle SRV records + if (domainData.record.SRV) { + domainData.record.SRV.forEach(function(srvRecord) { + addRecord(domainData.domain, SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".")); + }); } // Handle PTR records - if (domainData.records.PTR) { - for (var ptr in domainData.records.PTR) { - commit[domainData.domain].push( - PTR(domainData.subdomain, domainData.records.PTR[ptr] + ".") - ); - } + if (domainData.record.PTR) { + domainData.record.PTR.forEach(function(ptr) { + addRecord(domainData.domain, PTR(domainData.subdomain, ptr + ".")); + }); } -} +}); -for (var domainName in commit) { - D(domainName, regNone, providerCf, commit[domainName]); - } +// Commit all DNS records for each domain +Object.keys(recordsByDomain).forEach(function(domainName) { + D(domainName, regNone, providerCf, recordsByDomain[domainName]); +}); diff --git a/domains/*.app.sctech.localplayer.dev.json b/domains/*.app.sctech.localplayer.dev.json deleted file mode 100644 index b0410379..00000000 --- a/domains/*.app.sctech.localplayer.dev.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "sctech's webapps", - "domain": "localplayer.dev", - "subdomain": "*.app.sctech", - "owner": { - "email": "gamerselimiko@gmail.com" - }, - "record": { - "A": [ - "75.2.60.5" - ] - }, - "proxied": false -} diff --git a/domains/_github-pages-challenge-codimationtech.veryorange.localplayer.dev.json b/domains/_github-pages-challenge-codimationtech.veryorange.is-local.org.json similarity index 77% rename from domains/_github-pages-challenge-codimationtech.veryorange.localplayer.dev.json rename to domains/_github-pages-challenge-codimationtech.veryorange.is-local.org.json index 42a1276c..4214ff45 100644 --- a/domains/_github-pages-challenge-codimationtech.veryorange.localplayer.dev.json +++ b/domains/_github-pages-challenge-codimationtech.veryorange.is-local.org.json @@ -2,7 +2,7 @@ "description": "github verification", - "domain": "localplayer.dev", + "domain": "is-local.org", "subdomain": "_github-pages-challenge-codimationtech.veryorange", "owner": { @@ -11,7 +11,7 @@ }, "record": { - "TXT": ["bade021905f4aeaa4b73a86a19c8d0"] + "TXT": ["789d0b9c5eb3fde2d5b2d98dbcd96e"] }, "proxied": false diff --git a/domains/app.is-cool.dev.json b/domains/app.is-cool.dev.json new file mode 100644 index 00000000..5859125f --- /dev/null +++ b/domains/app.is-cool.dev.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple apps", + "domain": "is-cool.dev", + "subdomain": "app", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/app.is-local.org.json b/domains/app.is-local.org.json new file mode 100644 index 00000000..321dfa3e --- /dev/null +++ b/domains/app.is-local.org.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple apps", + "domain": "is-local.org", + "subdomain": "app", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/clidewoodrealm.localplayer.dev.json b/domains/clidewoodrealm.localplayer.dev.json index 3a006287..e8303e2f 100644 --- a/domains/clidewoodrealm.localplayer.dev.json +++ b/domains/clidewoodrealm.localplayer.dev.json @@ -9,7 +9,7 @@ "record": { "A": ["185.31.40.24"], "MX": ["mx1.alwaysdata.com", "mx2.alwaysdata.com"], - "TXT": ["v=spf1 mx a:ad.alwaysdata.net ~all"] + "TXT": ["v=spf1 mx a:ad.alwaysdata.net ~all", "v=spf1 include:spf.protection.outlook.com -all"] }, "proxied": false diff --git a/domains/HiddenPicture.is-not-a.dev.json b/domains/hiddenpicture.is-not-a.dev.json similarity index 100% rename from domains/HiddenPicture.is-not-a.dev.json rename to domains/hiddenpicture.is-not-a.dev.json diff --git a/domains/jessica.is-not-a.dev.json b/domains/jessica.is-not-a.dev.json new file mode 100644 index 00000000..ad399dea --- /dev/null +++ b/domains/jessica.is-not-a.dev.json @@ -0,0 +1,16 @@ +{ + "description": "For my various personal projects", + + "domain": "is-not-a.dev", + "subdomain": "jessica", + + "owner": { + "email": "binarywanderer@hotmail.com" + }, + + "record": { + "NS": ["ns1.he.net","ns2.he.net","ns3.he.net","ns4.he.net","ns5.he.net"] + }, + + "proxied": false +} diff --git a/domains/jonathan.is-a-fullstack.dev.json b/domains/jonathan.is-a-fullstack.dev.json new file mode 100644 index 00000000..9ac4e748 --- /dev/null +++ b/domains/jonathan.is-a-fullstack.dev.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple projects, apps or sites related to JonathanXDR", + "domain": "is-a-fullstack.dev", + "subdomain": "jonathan", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/jonathan.is-cool.dev.json b/domains/jonathan.is-cool.dev.json new file mode 100644 index 00000000..d3b59fbf --- /dev/null +++ b/domains/jonathan.is-cool.dev.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple projects, apps or sites related to JonathanXDR", + "domain": "is-cool.dev", + "subdomain": "jonathan", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/jvsp.localplayer.dev b/domains/jvsp.localplayer.dev new file mode 100644 index 00000000..d9daf60d --- /dev/null +++ b/domains/jvsp.localplayer.dev @@ -0,0 +1,16 @@ +{ + "description": "My Portfolio", + "domain": "localplayer.dev", + "subdomain": "jvsp", + + "owner": { + "repo": "https://github.com/AustrianNoah/Portfolio2", + "email": "javasnippets.coding@gmail.com" + }, + + "record": { + "CNAME": "austriannoah.github.io" + }, + + "proxied": false +} diff --git a/domains/knowledge-base.is-local.org.json b/domains/knowledge-base.is-local.org.json new file mode 100644 index 00000000..386baf0e --- /dev/null +++ b/domains/knowledge-base.is-local.org.json @@ -0,0 +1,15 @@ +{ + "description": "Knowledge Base", + "domain": "is-local.org", + "subdomain": "knowledge-base", + + "owner": { + "email": "3v4l@keemail.me" + }, + + "record": { + "A": ["95.217.58.106"] + }, + + "proxied": true +} diff --git a/domains/kotofey.is-not-a.dev.json b/domains/kotofey.is-not-a.dev.json new file mode 100644 index 00000000..58d87b2f --- /dev/null +++ b/domains/kotofey.is-not-a.dev.json @@ -0,0 +1,16 @@ +{ + "description": "Personal Portfolio Website", + "domain": "is-not-a.dev", + "subdomain": "kotofey", + + "owner": { + "email": "aleks00808a@gmail.com" + }, + + "record": { + "A": ["77.221.138.189"], + "TXT": ["mailru-domain: 4PC3NOTPepNtpFmW", "yandex-verification: 25b9c36e4c98b148"] + }, + + "proxied": false +} diff --git a/domains/project.is-cool.dev.json b/domains/project.is-cool.dev.json new file mode 100644 index 00000000..5ea14427 --- /dev/null +++ b/domains/project.is-cool.dev.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple projects", + "domain": "is-cool.dev", + "subdomain": "project", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/project.is-local.org.json b/domains/project.is-local.org.json new file mode 100644 index 00000000..776ba140 --- /dev/null +++ b/domains/project.is-local.org.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple projects", + "domain": "is-local.org", + "subdomain": "project", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/racknerdcdnzxu.is-cool.dev.json b/domains/racknerdcdnzxu.is-cool.dev.json new file mode 100644 index 00000000..5173945f --- /dev/null +++ b/domains/racknerdcdnzxu.is-cool.dev.json @@ -0,0 +1,17 @@ +{ + "description": "X2RAY Personal VPS", + + "domain": "is-cool.dev", + "subdomain": "racknerdcdnzxu", + + "owner": { + "repo": "https://github.com/ZachXu/register", + "email": "zach.xu1987@gmail.com" + }, + + "record": { + "A": ["104.168.11.37"] + }, + + "proxied": true +} diff --git a/domains/site.is-cool.dev.json b/domains/site.is-cool.dev.json new file mode 100644 index 00000000..395abd9b --- /dev/null +++ b/domains/site.is-cool.dev.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple sites", + "domain": "is-cool.dev", + "subdomain": "site", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/site.is-local.org.json b/domains/site.is-local.org.json new file mode 100644 index 00000000..cf306295 --- /dev/null +++ b/domains/site.is-local.org.json @@ -0,0 +1,13 @@ +{ + "description": "Subdomain for hosting multiple sites", + "domain": "is-local.org", + "subdomain": "site", + "owner": { + "username": "JonathanXDR", + "email": "jonathan.russ@bluewin.ch" + }, + "record": { + "NS": ["ns1.vercel-dns.com", "ns2.vercel-dns.com"] + }, + "proxied": false +} \ No newline at end of file diff --git a/domains/try888.is-cool.dev.json b/domains/try888.is-cool.dev.json new file mode 100644 index 00000000..8d902b27 --- /dev/null +++ b/domains/try888.is-cool.dev.json @@ -0,0 +1,11 @@ +{ + "domain": "is-cool.dev", + "subdomain": "try888", + "owner": { + "email": "fai1117hk2@gmail.com" + }, + "record": { + "A": ["35.206.220.254"] + }, + "proxied": false +} diff --git a/domains/veryorange.localplayer.dev.json b/domains/veryorange.is-local.org.json similarity index 91% rename from domains/veryorange.localplayer.dev.json rename to domains/veryorange.is-local.org.json index 20e53d43..11f26c10 100644 --- a/domains/veryorange.localplayer.dev.json +++ b/domains/veryorange.is-local.org.json @@ -2,7 +2,7 @@ "description": "As a nice place where I can test out some stuff that needs a website (and also for random stuff)", - "domain": "localplayer.dev", + "domain": "is-local.org", "subdomain": "veryorange", "owner": {