From 92c44c1ad8849df0b2959d52cb66c2b67be79ee5 Mon Sep 17 00:00:00 2001 From: andrewstech Date: Wed, 16 Oct 2024 09:39:09 +0000 Subject: [PATCH 01/82] New CI --- .env.example | 6 - .envrc | 1 - .github/workflows/checks.yml | 18 -- .github/workflows/publish-records.yml | 30 -- .github/workflows/publish.yml | 32 ++ .github/workflows/validate.yml | 43 +++ Dockerfile | 22 -- bun.lockb | Bin 51000 -> 0 bytes default.nix | 15 - dnsconfig.js | 128 ++++++++ docker-compose.yml | 8 - package.json | 27 -- scripts/action-utils.js | 8 - scripts/certbot-auth.sh | 17 -- scripts/certbot.sh | 91 ------ scripts/register-domains.js | 76 ----- scripts/reply.js | 48 --- scripts/verify-record.sh | 11 - tests/cpanel.test.js | 210 ------------- tests/domain-service.test.js | 421 -------------------------- tests/domain-utils.test.js | 8 - tests/domains.test.js | 37 --- tests/register.test.js | 242 --------------- tests/validations.test.js | 167 ---------- utils/constants.js | 30 -- utils/domain-service.js | 206 ------------- utils/get-domain.js | 27 -- utils/helpers.js | 54 ---- utils/invalid-domains.json | 27 -- utils/lib/cpanel.js | 123 -------- utils/validations.js | 129 -------- 31 files changed, 203 insertions(+), 2059 deletions(-) delete mode 100644 .env.example delete mode 100644 .envrc delete mode 100644 .github/workflows/checks.yml delete mode 100644 .github/workflows/publish-records.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/validate.yml delete mode 100644 Dockerfile delete mode 100755 bun.lockb delete mode 100644 default.nix create mode 100644 dnsconfig.js delete mode 100644 docker-compose.yml delete mode 100644 package.json delete mode 100644 scripts/action-utils.js delete mode 100755 scripts/certbot-auth.sh delete mode 100755 scripts/certbot.sh delete mode 100644 scripts/register-domains.js delete mode 100644 scripts/reply.js delete mode 100644 scripts/verify-record.sh delete mode 100644 tests/cpanel.test.js delete mode 100644 tests/domain-service.test.js delete mode 100644 tests/domain-utils.test.js delete mode 100644 tests/domains.test.js delete mode 100644 tests/register.test.js delete mode 100644 tests/validations.test.js delete mode 100644 utils/constants.js delete mode 100644 utils/domain-service.js delete mode 100644 utils/get-domain.js delete mode 100644 utils/helpers.js delete mode 100644 utils/invalid-domains.json delete mode 100644 utils/lib/cpanel.js delete mode 100644 utils/validations.js diff --git a/.env.example b/.env.example deleted file mode 100644 index 8022d3f4e..000000000 --- a/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -DOMAIN_USER=username -DOMAIN_API_KEY=apikey -DOMAIN_API_HOST=api-example.com -DOMAIN_API_PORT=2087 -DOMAIN_DOMAIN=example.com -DOMAIN_HOST_IP=69.69.69.69 diff --git a/.envrc b/.envrc deleted file mode 100644 index 4a4726a5c..000000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use_nix diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml deleted file mode 100644 index be5f73e48..000000000 --- a/.github/workflows/checks.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Checks - -on: [pull_request, workflow_dispatch] - -jobs: - validation: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 - - uses: oven-sh/setup-bun@v1 - with: - bun-version: latest - - run: bun install - - name: Run tests - run: bun test diff --git a/.github/workflows/publish-records.yml b/.github/workflows/publish-records.yml deleted file mode 100644 index 40e58b3ea..000000000 --- a/.github/workflows/publish-records.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Publish records - -on: - push: - branches: [main] - workflow_dispatch: - -jobs: - publish: - if: github.repository == 'is-a-dev/register' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: oven-sh/setup-bun@v1 - with: - bun-version: latest - - run: bun install - - run: bun test - - name: Publishing records - env: - CI: 1 - NODE_ENV: production - ENV: production - DOMAIN_USER: ${{ secrets.DOMAIN_USER }} - DOMAIN_API_KEY: ${{ secrets.DOMAIN_API_KEY }} - DOMAIN_API_HOST: ${{ secrets.DOMAIN_API_HOST }} - DOMAIN_API_PORT: ${{ secrets.DOMAIN_API_PORT }} - DOMAIN_DOMAIN: ${{ secrets.DOMAIN_DOMAIN }} - DOMAIN_HOST_IP: ${{ secrets.DOMAIN_HOST_IP }} - run: bun run publish-records diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..8577075f3 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,32 @@ +name: Publish + +on: + push: + branches: [main] + paths: + - "domains/**" + - ".github/workflows/publish.yml" + - "dnsconfig.js" + + workflow_dispatch: + +concurrency: + group: ${{ github.ref }}-publish + cancel-in-progress: false + +jobs: + dns: + name: DNS + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - run: echo '{"cloudflare":{"TYPE":"CLOUDFLAREAPI","apitoken":"$CLOUDFLARE_API_TOKEN"}}' > ./creds.json + + - name: Publish + uses: koenrh/dnscontrol-action@v3 + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} + with: + args: push + config_file: "dnsconfig.js" \ No newline at end of file diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 000000000..b49211b69 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,43 @@ +name: Validation + +on: + pull_request: + + push: + branches: [main] + paths: + - "domains/**" + - ".github/workflows/validation.yml" + - "dnsconfig.js" + + workflow_dispatch: + +concurrency: + group: ${{ github.ref }}-validation + cancel-in-progress: true + +jobs: + dns: + name: DNS + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Check + uses: koenrh/dnscontrol-action@v3 + with: + args: check + config_file: "dnsconfig.js" + + json: + name: JSON + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: JSON Syntax Check + uses: limitusus/json-syntax-check@v2 + with: + pattern: "\\.json$" + env: + BASE: "domains/" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 990a6e0b2..000000000 --- a/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM ubuntu:20.04 - -ENV TERM xterm -RUN ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime - -RUN apt-get -y update -RUN apt-get install -y nodejs npm curl wget dnsutils certbot --fix-missing -RUN apt-get install -y unzip - -RUN bash -c "curl -fsSL https://bun.sh/install | bash -s 'bun-v1.0.15'" - -RUN ~/.bun/bin/bun -v - -WORKDIR /opt/app - -COPY bun.lockb . -COPY package.json . - -RUN ~/.bun/bin/bun install - -CMD ["sh", "-c", "cp -r node_modules code; cd code; tail -f /dev/null"] - diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 5022120107e0be77c9cb0067f2b55c8b7f2a579d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51000 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 tltRQHB3=-6Vhw6{0xR_vbne {} }: -let - inherit (nixpkgs) pkgs; - - nixPackages = with pkgs; [ - yarn - docker-compose - dnsutils - bun - ]; -in -pkgs.stdenv.mkDerivation { - name = "env"; - buildInputs = nixPackages; -} diff --git a/dnsconfig.js b/dnsconfig.js new file mode 100644 index 000000000..f053b8b4b --- /dev/null +++ b/dnsconfig.js @@ -0,0 +1,128 @@ +var regNone = NewRegistrar("none"); +var providerCf = DnsProvider(NewDnsProvider("cloudflare")); + +var proxy = { + on: { "cloudflare_proxy": "on" }, + off: { "cloudflare_proxy": "off" } +}; + +// Function to validate filenames according to the given rules +function isValidFilename(filename) { + var regex = /^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)*\.json$/; + return regex.test(filename); +} + +function getDomainsList(filesPath) { + 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]; + + if (!isValidFilename(basename)) { + console.log(`Skipping invalid file: ${basename}`); + continue; + } + + var name = basename.split('.')[0]; + result.push({ name: name, data: require(files[i]) }); + } + + return result; +} + +var domains = getDomainsList('./domains'); +var commit = {}; + +for (var idx in domains) { + var domainData = domains[idx].data; + var proxyState = proxy.off; // disabled by default + + if (!commit[domainData.record.domain]) { + commit[domainData.record.domain] = []; + } + + if (domainData.record.proxied === false) { + proxyState = proxy.off; + } + + // Handle CNAME record + if (domainData.record.CNAME) { + commit[domainData.record.domain].push( + CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) + ); + } + + // Handle A records + if (domainData.record.A) { + for (var a in domainData.record.A) { + commit[domainData.record.domain].push( + A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) + ); + } + } + + // Handle AAAA records + if (domainData.record.AAAA) { + for (var aaaa in domainData.record.AAAA) { + commit[domainData.record.domain].push( + AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) + ); + } + } + + // Handle MX records + if (domainData.record.MX) { + for (var mx in domainData.record.MX) { + commit[domainData.record.domain].push( + MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") + ); + } + } + + // Handle URL records (redirect) + if (domainData.record.URL) { + commit[domainData.record.domain].push( + URL(domainData.subdomain, domainData.record.URL) + ); + } + + // Handle NS records + if (domainData.record.NS) { + for (var ns in domainData.record.NS) { + commit[domainData.domain].push( + NS(domainData.subdomain, domainData.record.NS[ns] + ".") + ); + } + } + + // Handle SRV records + if (domainData.record.SRV) { + for (var srv in domainData.record.SRV) { + var srvRecord = domainData.record.SRV[srv]; + commit[domainData.domain].push( + SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") + ); + } + } + + // Handle TXT records + if (domainData.record.TXT) { + if (Array.isArray(domainData.record.TXT)) { + for (var txt in domainData.record.TXT) { + commit[domainData.record.domain].push( + TXT(domainData.subdomain, domainData.record.TXT[txt]) + ); + } + } else { + commit[domainData.record.domain].push( + TXT(domainData.subdomain, domainData.record.TXT) + ); + } + } +} + +// Commit all DNS records +for (var domainName in commit) { + D(domainName, regNone, providerCf, commit[domainName]); +} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 5b161f929..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: '3' -services: - dev: - build: - context: . - dockerfile: ./Dockerfile - volumes: - - ./:/opt/app/code diff --git a/package.json b/package.json deleted file mode 100644 index ccc8dbd41..000000000 --- a/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "is-a-dev-core", - "version": "1.0.0", - "description": "Register *.is-a.dev domains for free", - "scripts": { - "lint": "eslint utils scripts domains --ext .json,.js", - "publish-records": "bun run -b ./scripts/register-domains.js", - "dc": "docker-compose -p is-a-dev", - "dc:start": "bun run dc up", - "dc:shell": "bun run dc run dev /bin/bash" - }, - "repository": { - "type": "git", - "url": "https://github.com/is-a-dev/register" - }, - "author": "Akshay Nair ", - "license": "GPL-3.0", - "dependencies": { - "ip-regex": "^5.0.0", - "ramda": "^0.27.1" - }, - "devDependencies": { - "eslint": "^7.11.0", - "eslint-plugin-json": "^2.1.2", - "eslint-plugin-node": "^11.1.0" - } -} diff --git a/scripts/action-utils.js b/scripts/action-utils.js deleted file mode 100644 index 38a33a420..000000000 --- a/scripts/action-utils.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - hasLabel: (context, label) => { - const pr = context.payload.pull_request || context.payload.issue; - const { labels = [] } = pr; - - return !!labels.find(({ name }) => name === label); - }, -}; diff --git a/scripts/certbot-auth.sh b/scripts/certbot-auth.sh deleted file mode 100755 index 6b4ee8bc7..000000000 --- a/scripts/certbot-auth.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -echo "$PWD"; - -echo "AUTH ::[$CERTBOT_VALIDATION]::[$CERTBOT_TOKEN]::[$CERTBOT_REMAINING_CHALLENGES]"; -echo "[$CERTBOT_DOMAIN]"; - -sleep 1; -./scripts/certbot.sh acme_txt "$CERTBOT_VALIDATION"; - -echo "Going to sleep for a few minutes..."; - -# TODO: Check if $CERTBOT_VALIDATION == $(./scripts/certbot.sh get-acme)? -sleep $((3*60)); - -./scripts/certbot.sh check; - diff --git a/scripts/certbot.sh b/scripts/certbot.sh deleted file mode 100755 index ee84aa6d7..000000000 --- a/scripts/certbot.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash - -export NODE_ENV=production -DRY_RUN=0 -if_dry_run() { [[ $DRY_RUN == 1 ]] && echo "$1" || echo "$2"; } - -generate_certificate() { - outdir=$(mktemp -d /tmp/is-a-dev-certbot.XXXXX); - - certbot \ - --config-dir $outdir/config \ - --work-dir $outdir/work \ - --logs-dir $outdir/logs \ - certonly \ - --manual \ - --preferred-challenges=dns \ - --manual-auth-hook=./scripts/certbot-auth.sh \ - -m 'phenax5@gmail.com' \ - -d '*.is-a.dev,is-a.dev' \ - --agree-tos \ - $(if_dry_run "--dry-run" ""); - - echo "+-----------------------------------------------+"; - echo "| Certificate output: |"; - echo "|= $outdir"; - echo "+-----------------------------------------------+"; -} - -update_record() { - local method=$([[ "$1" == "add" ]] && echo "addZoneRecord" || echo "removeZoneRecord"); - local type="$2"; - local name="$3"; - local address="$4"; - local ttl=${5:-"1"}; - bun -e " - const { domainService } = require('./utils/domain-service'); - const { ENV, DOMAIN_DOMAIN } = require('./utils/constants'); - const method = '$method'; - const name = '$name'; - const type = '$type'; - - const record = { name, type, address: '$address', ttl: $ttl }; - - async function main() { - if (method === 'removeZoneRecord') { - const data = await domainService.get({ customonly: 0, name: '$name.is-a.dev.', type }); - if (data.length > 0) { - record.id = data[0].line; - } else { - throw new Error('Unable to find record'); - } - } - - console.log('Uploading $name to', DOMAIN_DOMAIN, '(', ENV, ')...'); - const data = await domainService[method](record)(); - console.log(data.cpanelresult ? data.cpanelresult.data : data); - } - - main().catch(console.error); - " -} - -update_acme_txt_record() { - update_record add TXT '_acme-challenge' "$1"; -} - -reset_acme() { - sleep 1; - update_record remove TXT '_acme-challenge' ''; - update_record remove TXT '_acme-challenge' ''; - # update_record add CNAME 'www' "is-a-dev.github.io"; -} - -get_acme() { dig +noall +answer _acme-challenge.is-a.dev TXT | awk '{print $5}'; } - -case "$1" in - check) echo "TXT record:: $(get_acme)" ;; - get-acme) get_acme ;; - cert) generate_certificate ;; - acme_txt) update_acme_txt_record "$2" ;; - reset) reset_acme ;; - *) echo "Invalid command"; exit 1; ;; -esac - - -### STEPS ### -# Run ./scripts/certbot.sh cert -# cp -r /tmp/is-a-dev-whatever /opt/app/code/is-a-dev-cert -# Upload cert.pem and privkey.pem (from config/live/is-a.dev/) contents to SSL > Manage SSL Sites -# Run ./scripts/certbot.sh reset - diff --git a/scripts/register-domains.js b/scripts/register-domains.js deleted file mode 100644 index 94bc02089..000000000 --- a/scripts/register-domains.js +++ /dev/null @@ -1,76 +0,0 @@ -const R = require("ramda"); -const { - VALID_RECORD_TYPES, - DOMAIN_HOST_IP, - TTL, - ENV, -} = require("../utils/constants"); -const { domainService: dc } = require("../utils/domain-service"); -const { getDomains: gd } = require("../utils/get-domain"); - -const getRecords = R.compose(R.toPairs, R.pick(VALID_RECORD_TYPES)); - -const address = (type, value) => { - if ("URL" === type) return `${value}`.replace(/\/$/g, ""); - if ("TXT" === type) return value; - return (type === "CNAME" ? `${value}`.toLowerCase() : `${value}`).replace( - /[/.]$/g, - "", - ); -}; - -const toHostList = R.chain((data) => { - // URL redirection must contain explicit A record - // Wildcard A record breaks when used with MX - // Ref: https://github.com/is-a-dev/register/issues/2365 - if ((data.record.URL && data.record.MX) || data.name === "@") { - data.record.A = [DOMAIN_HOST_IP]; - } - - const records = getRecords(data.record); - - return R.chain(([recordType, values]) => { - const valueList = Array.isArray(values) ? values : [values]; - - return valueList.map((value, index) => ({ - name: data.name, - type: recordType, - address: address(recordType, value), - ttl: TTL, - ...(recordType === "MX" ? { priority: index + 20 } : {}), - })); - }, records); -}); - -const registerDomains = async ({ - domainService, - getDomains, - log = () => {}, -}) => { - const domains = await getDomains().then(toHostList); - - if (domains.length === 0) - return Promise.reject(new Error("Nothing to register")); - - log(`${domains.length} records found`); - return domainService.updateHosts(domains); -}; - -const main = async () => { - console.log(`Running in ${ENV} mode`); - const result = await registerDomains({ - domainService: dc, - getDomains: gd, - log: console.log, - }); - console.log(result); -}; - -if (require.main === module) { - main().catch((e) => { - console.error(e); - process.exit(1); - }); -} else { - module.exports = { toHostList, registerDomains }; -} diff --git a/scripts/reply.js b/scripts/reply.js deleted file mode 100644 index dd4df142d..000000000 --- a/scripts/reply.js +++ /dev/null @@ -1,48 +0,0 @@ -const getInstructions = () => ` -The changes have been published!! It should reflect in less than 24 hours. - -## Here's what you need to do next -If your domain points to a server you own, add \`domain-name.is-a.dev\` to your server config. For https, you will have to configure ssl certificate to allow the new subdomain. - -### For github pages users, -* Go to your github page repo (\`user/user.github.io\`) -* Open up the **settings** tab -* Scroll down to the **Github pages** section -* In the **Custom domain** text input, enter the domain you registered (\`domain-name.is-a.dev\`) -* Check the **Enforce HTTPS** checkbox below the input -* Give it some time to reflect and you should be good to go - - -## Need help with your domain? -If you are having trouble setting up your domain, [create an issue](https://github.com/is-a-dev/register/issues/new/choose). I will try my best to get back to you asap! - - -## Made a mistake in the record? -Don't worry, you can create a new pull request with the corrections - - -## Love/Hate the service? -**Love it?** Leave it a **star**! Also consider donating so that I can keep this service running forever! -**Hate it?** Please leave your feedback by [creating an issue](https://github.com/is-a-dev/register/issues/new/choose). I would really like to keep improving this service for other users. - - -## Wanna support this project? -Help me in my mission to keep this service alive forever by donating! - -Buy Me A Coffee Liberapay recurring donation button - -`; - -module.exports = { - async instructions(context, github) { - const pr = context.payload.issue || context.payload.pull_request; - const { number } = pr; - - await github.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: number, - body: getInstructions(), - }); - }, -}; diff --git a/scripts/verify-record.sh b/scripts/verify-record.sh deleted file mode 100644 index a4fc0da6a..000000000 --- a/scripts/verify-record.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env sh - -sed \ - -e 's/\.json.*$/.is-a.dev/g' \ - -e 's/^\s*domains\///g' \ - -e '/^\s*$/d' \ -| while read domain; do - echo "$domain"; - dig "$domain" +noall +answer && echo "done" || echo "x"; -done; - diff --git a/tests/cpanel.test.js b/tests/cpanel.test.js deleted file mode 100644 index b2415f8b4..000000000 --- a/tests/cpanel.test.js +++ /dev/null @@ -1,210 +0,0 @@ -const R = require("ramda"); -const { CpanelClient } = require("../utils/lib/cpanel"); - -const mockFetch = - (expectRequest, decorate = R.identity) => - (reqUrl, request) => { - expectRequest(reqUrl, request); - return Promise.resolve({ - json: async () => decorate(request), - }); - }; - -describe("Cpanel client", () => { - describe("fetchzonerecords", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/json-api/cpanel?customonly=0&domain=a.b&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=ZoneEdit&cpanel_jsonapi_func=fetchzone_records&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.zone.fetch(); - }); - - it("should make the correct request with query", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/json-api/cpanel?customonly=0&domain=foobar.boeey&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=ZoneEdit&cpanel_jsonapi_func=fetchzone_records&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.zone.fetch({ domain: "foobar.boeey" }); - }); - }); - - describe("addzonerecord", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/json-api/cpanel?domain=a.b&name=googo&type=CNAME&cname=beey&ttl=2020&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=ZoneEdit&cpanel_jsonapi_func=add_zone_record&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.zone.add({ - name: "googo", - type: "boyee", - cname: "beey", - type: "CNAME", - ttl: 2020, - }); - }); - }); - - describe("addzonerecord", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/json-api/cpanel?domain=a.b&line=500&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=ZoneEdit&cpanel_jsonapi_func=remove_zone_record&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.zone.remove({ - line: 500, - }); - }); - }); - - describe("fetchredirections", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/execute/Mime/list_redirects?cpanel_jsonapi_user=boy&cpanel_jsonapi_module=Mime&cpanel_jsonapi_func=list_redirects&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.redirection.fetch(); - }); - }); - describe("addredirection", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/execute/Mime/add_redirect?domain=googo&destination=https%3A%2F%2Foodf.com&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=Mime&cpanel_jsonapi_func=add_redirect&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.redirection.add({ - domain: "googo", - destination: "https://oodf.com", - }); - }); - }); - - describe("deleteredirection", () => { - it("should make the correct request", async () => { - const fetch = mockFetch((url, request) => { - expect(url).toBe( - "https://example.com:2000/execute/Mime/delete_redirect?domain=googo&cpanel_jsonapi_user=boy&cpanel_jsonapi_module=Mime&cpanel_jsonapi_func=delete_redirect&cpanel_jsonapi_apiversion=2", - ); - expect(request).toEqual({ - headers: { - Authorization: "cpanel boy:boybyebye", - }, - rejectUnauthorized: false, - }); - }); - - const cpanel = CpanelClient({ - host: "example.com", - port: 2000, - username: "boy", - apiKey: "boybyebye", - domain: "a.b", - dependencies: { fetch }, - }); - - await cpanel.redirection.remove({ domain: "googo" }); - }); - }); -}); diff --git a/tests/domain-service.test.js b/tests/domain-service.test.js deleted file mode 100644 index dfd6400ed..000000000 --- a/tests/domain-service.test.js +++ /dev/null @@ -1,421 +0,0 @@ -const R = require("ramda"); -const { getDomainService, diffRecords } = require("../utils/domain-service"); -const { DOMAIN_DOMAIN } = require("../utils/constants"); - -const getCpanel = ({ - zone, - addZone, - removeZone, - redir, - addRedir, - removeRedir, - addEmail, - removeEmail, -} = {}) => ({ - zone: { - fetch: (_) => zone(), - add: (rec) => addZone(rec), - remove: (rec) => removeZone(rec), - }, - redirection: { - fetch: (_) => redir(), - add: (rec) => addRedir(rec), - remove: (rec) => removeRedir(rec), - }, - email: { - add: (rec) => addEmail(rec), - remove: (rec) => removeEmail(rec), - }, -}); - -describe("diffRecords", () => { - it("should show added record", () => { - const oldRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "111.1.1212.1" }, - ]; - const newRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "111.1.1212.1" }, - { name: "boo", type: "CNAME", address: "x.com" }, - ]; - - const result = diffRecords(oldRecords, newRecords); - expect(result).toEqual({ - remove: [], - add: [{ name: "boo", type: "CNAME", address: "x.com" }], - }); - }); - - it("should show edited records", () => { - const oldRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "111.1.1212.1" }, - ]; - const newRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "69.69.69.69" }, - ]; - - const result = diffRecords(oldRecords, newRecords); - expect(result).toEqual({ - remove: [{ name: "xa", type: "A", address: "111.1.1212.1" }], - add: [{ name: "xa", type: "A", address: "69.69.69.69" }], - }); - }); - - it("should show added records with the same name and record type", () => { - const oldRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "69.69.69.69" }, - ]; - const newRecords = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xa", type: "A", address: "69.69.69.69" }, - { name: "xa", type: "A", address: "69.69.4.20" }, - ]; - - const result = diffRecords(oldRecords, newRecords); - expect(result).toEqual({ - remove: [], - add: [{ name: "xa", type: "A", address: "69.69.4.20" }], - }); - }); - - it("should diff complex changes", () => { - const oldRecords = [ - { name: "a", type: "CNAME", address: "fck.com." }, - { name: "b", type: "A", address: "69.69.69.69" }, - { name: "111", type: "CNAME", address: "x" }, - { name: "d", type: "A", address: "69.69.4.20" }, - ]; - const newRecords = [ - { name: "111", type: "CNAME", address: "x" }, - { name: "d", type: "CNAME", address: "duck.com" }, - { name: "a", type: "CNAME", address: "og.com" }, - { name: "b", type: "A", address: "69.69.69.69" }, - { name: "b", type: "A", address: "69.69.4.20" }, - { name: "c", type: "CNAME", address: "ccc.cc" }, - ]; - - const result = diffRecords(oldRecords, newRecords); - expect(result).toEqual({ - remove: [ - { name: "a", type: "CNAME", address: "fck.com." }, - { name: "d", type: "A", address: "69.69.4.20" }, - ], - add: [ - { name: "d", type: "CNAME", address: "duck.com" }, - { name: "a", type: "CNAME", address: "og.com" }, - { name: "b", type: "A", address: "69.69.4.20" }, - { name: "c", type: "CNAME", address: "ccc.cc" }, - ], - }); - }); -}); - -describe("Domain service", () => { - const addZone = jest.fn(async () => ({})); - const removeZone = jest.fn(async () => ({})); - const addRedir = jest.fn(async () => ({})); - const removeRedir = jest.fn(async () => ({})); - const addEmail = jest.fn(async () => ({})); - const removeEmail = jest.fn(async () => ({})); - - const mockDS = ({ zones, redirections }) => - getDomainService({ - cpanel: getCpanel({ - zone: async () => zones, - redir: async () => redirections, - addZone, - addEmail, - addRedir, - removeZone, - removeRedir, - removeEmail, - }), - }); - - const getRecordCalls = (recfn) => - recfn.mock.calls - .map(R.head) - .map( - R.pick([ - "name", - "type", - "address", - "redirect", - "domain", - "line", - "priority", - "exchanger", - ]), - ); - - beforeEach(() => { - addZone.mockClear(); - removeZone.mockClear(); - addRedir.mockClear(); - removeRedir.mockClear(); - addEmail.mockClear(); - removeEmail.mockClear(); - }); - - describe("getHosts", () => { - it("should resolve with a list of hosts", async () => { - const zones = [ - { name: "xx", type: "CNAME", address: "fck.com." }, - { name: "xx", type: "A", address: "111.1.1212.1" }, - ]; - const redirections = []; - const zone = async () => zones; - const redir = async () => redirections; - const mockDomainService = getDomainService({ - cpanel: getCpanel({ zone, redir }), - }); - const list = await mockDomainService.getHosts(); - - expect(list).toEqual([ - { name: "xx", type: "CNAME", address: "fck.com" }, - { name: "xx", type: "A", address: "111.1.1212.1" }, - ]); - }); - - it("should resolve with a redirections", async () => { - const zones = [ - { line: "111", name: "xx", type: "CNAME", address: "fck.com." }, - { line: "112", name: "xx", type: "A", address: "111.1.1212.1" }, - ]; - const redirections = [ - { domain: "foo.booboo.xyz", destination: "https://google.com" }, - { domain: "foo1.booboo.xyz", destination: "https://duck.com" }, - ]; - const zone = async () => zones; - const redir = async () => redirections; - const mockDomainService = getDomainService({ - cpanel: getCpanel({ zone, redir }), - }); - const list = await mockDomainService.getHosts(); - - expect(list).toEqual([ - { id: "111", name: "xx", type: "CNAME", address: "fck.com" }, - { id: "112", name: "xx", type: "A", address: "111.1.1212.1" }, - { - id: `foo.${DOMAIN_DOMAIN}`, - name: "foo", - type: "URL", - address: "https://google.com", - }, - { - id: `foo1.${DOMAIN_DOMAIN}`, - name: "foo1", - type: "URL", - address: "https://duck.com", - }, - ]); - }); - }); - - describe("updateHosts", () => { - it("should append new hosts with existing ones and set it", async () => { - const zones = [ - { line: 1, name: "a", type: "CNAME", address: "boo" }, - { line: 2, name: "b", type: "CNAME", address: "goo" }, - ]; - const redirections = []; - - const mockDomainService = mockDS({ zones, redirections }); - await mockDomainService.updateHosts([ - { name: "a", type: "CNAME", address: "boo" }, - { name: "b", type: "CNAME", address: "goo" }, - { name: "c", type: "A", address: "12.131321.213" }, - { name: "c", type: "MX", address: "foobar.com", priority: 2 }, - ]); - - expect(addZone).toHaveBeenCalledTimes(1); - expect(getRecordCalls(addZone)).toEqual([ - { name: "c", type: "A", address: "12.131321.213" }, - ]); - - expect(addEmail).toHaveBeenCalledTimes(1); - expect(getRecordCalls(addEmail)).toEqual([ - { domain: "c.is-a.dev", exchanger: "foobar.com", priority: 2 }, - ]); - - expect(removeZone).toHaveBeenCalledTimes(0); - expect(removeEmail).toHaveBeenCalledTimes(0); - }); - - it("should update matching host and set it", async () => { - const zones = [ - { line: 1, name: "a", type: "CNAME", address: "boo" }, - { line: 2, name: "b", type: "CNAME", address: "goo" }, - ]; - const redirections = []; - - const mockDomainService = mockDS({ zones, redirections }); - await mockDomainService.updateHosts([ - { name: "a", type: "CNAME", address: "boo" }, - { name: "b", type: "CNAME", address: "googoogaga" }, - ]); - - expect(addZone).toHaveBeenCalledTimes(1); - expect(getRecordCalls(addZone)).toEqual([ - { name: "b", type: "CNAME", address: "googoogaga" }, - ]); - expect(removeZone).toHaveBeenCalledTimes(1); - expect(getRecordCalls(removeZone)).toEqual([{ line: 2 }]); - }); - - it("should update matching host and set it", async () => { - const zones = [ - { line: 1, name: "a", type: "CNAME", address: "boo" }, - { line: 2, name: "b", type: "CNAME", address: "goo" }, - { line: 3, name: "b", type: "CNAME", address: "xaa" }, - ]; - const redirections = []; - - const mockDomainService = mockDS({ zones, redirections }); - await mockDomainService.updateHosts([ - { name: "a", type: "CNAME", address: "boo" }, - { name: "b", type: "CNAME", address: "googoogaga" }, - { name: "b", type: "CNAME", address: "farboo" }, - ]); - - expect(addZone).toHaveBeenCalledTimes(2); - expect(getRecordCalls(addZone)).toEqual([ - { name: "b", type: "CNAME", address: "googoogaga" }, - { name: "b", type: "CNAME", address: "farboo" }, - ]); - expect(removeZone).toHaveBeenCalledTimes(2); - expect(getRecordCalls(removeZone)).toEqual([ - { line: 3 }, - { line: 2 }, - ]); - }); - - it("should workout this complex example", async () => { - const zones = [ - { line: 1, name: "a", type: "CNAME", address: "world" }, - { line: 2, name: "b", type: "A", address: "1" }, - { line: 3, name: "b", type: "A", address: "2" }, - { line: 4, name: "c", type: "CNAME", address: "hello.com" }, - { - line: 5, - name: "c", - type: "MX", - address: "mx1.hello.com", - priority: 20, - }, - { - line: 6, - name: "c", - type: "MX", - address: "mx2.hello.com", - priority: 21, - }, - { - line: 7, - name: "b", - type: "MX", - address: "foo.bar", - priority: 20, - }, - { line: 101, name: "x", type: "A", address: "1" }, - { line: 99, name: "y", type: "A", address: "2" }, - { line: 100, name: "z", type: "A", address: "3" }, - ]; - const redirections = [ - { - domain: `b.${DOMAIN_DOMAIN}`, - destination: "https://foobar.com", - }, - { - domain: `c.${DOMAIN_DOMAIN}`, - destination: "https://goobar.com", - }, - { - domain: `x.${DOMAIN_DOMAIN}`, - destination: "https://example.com", - }, - ]; - - const mockDomainService = mockDS({ zones, redirections }); - await mockDomainService.updateHosts([ - { name: "a", type: "CNAME", address: "boo" }, - { name: "b", type: "A", address: "1" }, - { name: "b", type: "A", address: "2" }, - { name: "b", type: "A", address: "3" }, - { name: "b", type: "URL", address: "https://wowow.com" }, - { name: "c", type: "CNAME", address: "hello.com" }, - { name: "c", type: "URL", address: "https://goobar.com" }, - { name: "d", type: "CNAME", address: "helo.com" }, - { name: "d", type: "URL", address: "https://hhh.com" }, - { name: "x", type: "URL", address: "https://example69.com" }, - { - name: "c", - type: "MX", - address: "mx2.hello.com", - priority: 21, - }, - { name: "a", type: "MX", address: "example.com", priority: 20 }, - ]); - - expect(addZone).toHaveBeenCalledTimes(3); - expect(getRecordCalls(addZone)).toEqual([ - { name: "a", type: "CNAME", address: "boo" }, - { name: "b", type: "A", address: "3" }, - { name: "d", type: "CNAME", address: "helo.com" }, - ]); - expect(removeZone).toHaveBeenCalledTimes(4); - expect(getRecordCalls(removeZone)).toEqual([ - { line: 101 }, - { line: 100 }, - { line: 99 }, - { line: 1 }, - ]); - - expect(addEmail).toHaveBeenCalledTimes(1); - expect(getRecordCalls(addEmail)).toEqual([ - { - domain: "a.is-a.dev", - exchanger: "example.com", - priority: 20, - }, - ]); - expect(removeEmail).toHaveBeenCalledTimes(2); - expect(getRecordCalls(removeEmail)).toEqual([ - { domain: "b.is-a.dev", exchanger: "foo.bar", priority: 20 }, - { - domain: "c.is-a.dev", - exchanger: "mx1.hello.com", - priority: 20, - }, - ]); - - expect(addRedir).toHaveBeenCalledTimes(3); - expect(getRecordCalls(addRedir)).toEqual([ - { - domain: `b.${DOMAIN_DOMAIN}`, - type: "permanent", - redirect: "https://wowow.com", - }, - { - domain: `d.${DOMAIN_DOMAIN}`, - type: "permanent", - redirect: "https://hhh.com", - }, - { - domain: `x.${DOMAIN_DOMAIN}`, - type: "permanent", - redirect: "https://example69.com", - }, - ]); - expect(removeRedir).toHaveBeenCalledTimes(2); - expect(getRecordCalls(removeRedir)).toEqual([ - { domain: `b.${DOMAIN_DOMAIN}` }, - { domain: `x.${DOMAIN_DOMAIN}` }, - ]); - }); - }); -}); diff --git a/tests/domain-utils.test.js b/tests/domain-utils.test.js deleted file mode 100644 index 896cf017d..000000000 --- a/tests/domain-utils.test.js +++ /dev/null @@ -1,8 +0,0 @@ -const { getDomains } = require("../utils/get-domain"); - -describe("getDomains", () => { - it("should resolve with the list of domains", async () => { - const list = await getDomains(); - expect(Array.isArray(list)).toBe(true); - }); -}); diff --git a/tests/domains.test.js b/tests/domains.test.js deleted file mode 100644 index 75971b00b..000000000 --- a/tests/domains.test.js +++ /dev/null @@ -1,37 +0,0 @@ -const R = require("ramda"); -const fs = require("fs"); -const { getDomains } = require("../utils/get-domain"); -const { validateDomainData } = require("../utils/validations"); -const { DOMAINS_PATH } = require("../utils/constants"); - -describe("Domains", () => { - it("should all be json", async () => { - const files = await fs.promises.readdir(DOMAINS_PATH, {}); - expect(files.filter((f) => !/\.json$/g.test(f)).length).toBe(0); - }); - - it("should be valid", (done) => { - getDomains() - .then(R.reject(R.propEq("name", "_psl"))) - .then( - R.map((data) => { - const { errors } = validateDomainData(data); - if (errors.length) { - const message = errors - .map( - ([key, { reason }]) => - `[${data.name}.${key}]: ${reason}`, - ) - .join("\n"); - return `\nValidation errors in ${data.name}.json: \n${message}`; - } - return ""; - }), - ) - .then(R.filter(R.complement(R.isEmpty))) - .then((messages) => - messages.length ? done(messages.join("\n")) : done(), - ) - .catch(done); - }); -}); diff --git a/tests/register.test.js b/tests/register.test.js deleted file mode 100644 index 6628df211..000000000 --- a/tests/register.test.js +++ /dev/null @@ -1,242 +0,0 @@ -const R = require("ramda"); -const { toHostList, registerDomains } = require("../scripts/register-domains"); -const { TTL, DOMAIN_DOMAIN } = require("../utils/constants"); -const { getDomainService } = require("../utils/domain-service"); - -const getCpanel = ({ - zone, - addZone, - removeZone, - redir, - addRedir, - removeRedir, - addEmail, - removeEmail, -} = {}) => ({ - zone: { - fetch: (_) => zone(), - add: (rec) => addZone(rec), - remove: (rec) => removeZone(rec), - }, - redirection: { - fetch: (_) => redir(), - add: (rec) => addRedir(rec), - remove: (rec) => removeRedir(rec), - }, - email: { - add: (rec) => addEmail(rec), - remove: (rec) => removeEmail(rec), - }, -}); - -describe("toHostList", () => { - it("should flatten domain data to list of hosts (without https)", () => { - const res = toHostList([ - { name: "akshay", record: { CNAME: "phenax.github.io" } }, - { name: "foobar", record: { CNAME: "v.io" } }, - { name: "xx", record: { A: ["1.2.3.4", "5.6.3.2", "1.2.31.1"] } }, - { - name: "xx", - record: { CNAME: "foobar.com", MX: ["as.com", "f.com"] }, - }, - ]); - - expect(res).toEqual([ - { - name: "akshay", - type: "CNAME", - address: "phenax.github.io", - ttl: TTL, - }, - { name: "foobar", type: "CNAME", address: "v.io", ttl: TTL }, - { name: "xx", type: "A", address: "1.2.3.4", ttl: TTL }, - { name: "xx", type: "A", address: "5.6.3.2", ttl: TTL }, - { name: "xx", type: "A", address: "1.2.31.1", ttl: TTL }, - { name: "xx", type: "CNAME", address: "foobar.com", ttl: TTL }, - { - name: "xx", - type: "MX", - address: "as.com", - priority: 20, - ttl: TTL, - }, - { - name: "xx", - type: "MX", - address: "f.com", - priority: 21, - ttl: TTL, - }, - ]); - }); -}); - -describe("registerDomains", () => { - const addZone = jest.fn(async () => ({})); - const removeZone = jest.fn(async () => ({})); - const addRedir = jest.fn(async () => ({})); - const removeRedir = jest.fn(async () => ({})); - const addEmail = jest.fn(async () => ({})); - const removeEmail = jest.fn(async () => ({})); - - const mockDS = ({ zones, redirections }) => - getDomainService({ - cpanel: getCpanel({ - zone: async () => zones, - redir: async () => redirections, - addZone, - addEmail, - addRedir, - removeZone, - removeRedir, - removeEmail, - }), - }); - - beforeEach(() => { - addZone.mockClear(); - removeZone.mockClear(); - addRedir.mockClear(); - removeRedir.mockClear(); - addEmail.mockClear(); - removeEmail.mockClear(); - }); - - it("should register the new set of hosts generated from domains list", async () => { - const localHosts = [ - { name: "a", record: { CNAME: "hello" } }, - { name: "b", record: { CNAME: "xaa" } }, - ]; - const remoteHosts = [ - { line: 1, name: "a", type: "CNAME", address: "hello" }, - { line: 2, name: "b", type: "CNAME", address: "goo" }, - { line: 3, name: "b", type: "CNAME", address: "xaa" }, - ]; - const remoteRedirections = []; - - const domainService = mockDS({ - zones: remoteHosts, - redirections: remoteRedirections, - }); - await registerDomains({ - getDomains: async () => localHosts, - domainService, - }); - - expect(addZone).toHaveBeenCalledTimes(0); - expect(removeZone).toHaveBeenCalledTimes(1); - expect(addRedir).toHaveBeenCalledTimes(0); - expect(removeRedir).toHaveBeenCalledTimes(0); - }); - - it("should add the new set hosts", async () => { - const localHosts = [ - { name: "a", record: { CNAME: "boo" } }, - { - name: "b", - record: { - A: ["1.1.1.1", "1.1.1.2"], - MX: "somemx", - TXT: "some txt", - }, - }, - { name: "c", record: { URL: "https://google.com" } }, - { name: "d", record: { CNAME: "foobar" } }, - { - name: "e", - record: { A: ["2.2.2.2"], TXT: ["some", "extra", "txt"] }, - }, - ]; - const remoteHosts = [ - { line: 1, name: "a", type: "CNAME", address: "boo" }, - { line: 2, name: "b", type: "MX", address: "othermx" }, - { line: 3, name: "d", type: "CNAME", address: "foobaz" }, - ]; - const remoteRedirections = [ - { domain: `b.${DOMAIN_DOMAIN}`, destination: "x" }, - { domain: `a.${DOMAIN_DOMAIN}`, destination: "y" }, - ]; - - const domainService = mockDS({ - zones: remoteHosts, - redirections: remoteRedirections, - }); - await registerDomains({ - getDomains: async () => localHosts, - domainService, - }); - - expect(addZone).toHaveBeenCalledTimes(8); - expect(addZone.mock.calls).toEqual([ - [{ name: "b", type: "A", address: "1.1.1.1", line: undefined }], - [{ name: "b", type: "A", address: "1.1.1.2", line: undefined }], - [ - { - name: "b", - type: "TXT", - address: "some txt", - txtdata: "some txt", - line: undefined, - }, - ], - [ - { - name: "d", - type: "CNAME", - cname: "foobar", - address: "foobar", - line: undefined, - }, - ], - [{ name: "e", type: "A", address: "2.2.2.2", line: undefined }], - [ - { - name: "e", - type: "TXT", - address: "some", - txtdata: "some", - line: undefined, - }, - ], - [ - { - name: "e", - type: "TXT", - address: "extra", - txtdata: "extra", - line: undefined, - }, - ], - [ - { - name: "e", - type: "TXT", - address: "txt", - txtdata: "txt", - line: undefined, - }, - ], - ]); - - expect(removeZone).toHaveBeenCalledTimes(1); - expect(removeZone.mock.calls).toEqual([[{ line: 3 }]]); - - expect(addRedir).toHaveBeenCalledTimes(1); - expect(addRedir.mock.calls).toEqual([ - [ - { - domain: "c.booboo.xyz", - redirect: "https://google.com", - redirect_wildcard: 1, - redirect_www: 1, - type: "permanent", - }, - ], - ]); - - expect(addEmail).toHaveBeenCalledTimes(1); - expect(addEmail.mock.calls).toEqual([ - [{ domain: "b.is-a.dev", exchanger: "somemx", priority: 20 }], - ]); - }); -}); diff --git a/tests/validations.test.js b/tests/validations.test.js deleted file mode 100644 index af27b68bb..000000000 --- a/tests/validations.test.js +++ /dev/null @@ -1,167 +0,0 @@ -const { validateDomainData, isValidDomain } = require("../utils/validations"); -const INVALID_NAMES = require("../utils/invalid-domains.json"); - -const defaultDomain = { - name: "aaa", - record: { - A: ["121.121.121.121"], - }, - owner: { - username: "betsy", - email: "betsyfuckyoassup@foobar.com", - }, -}; - -const getstroflen = (len) => Array(len).fill("a").join(""); - -describe("isValidMX", () => { - it("should be valid mx record", () => { - const cases = [ - { mx: "foobar.com", result: true }, - { mx: "as.as", result: true }, - { mx: "ASPMX.L.GOOGLE.COM", result: true }, - { mx: "ALT4.ASPMX.L.GOOGLE.COM", result: true }, - { mx: "hello", result: false }, - { mx: "helalsds-asd5sjdsd.com", result: true }, - { mx: "helalsds?asd5sjdsd.com", result: false }, - { mx: "helalsds_asd5sjdsd.com", result: false }, - ]; - - cases.forEach(({ mx, result }) => { - expect(isValidDomain(mx)).toBe(result); - }); - }); -}); - -describe("validateDomainData", () => { - const invalidCases = [ - {}, - { name: "helo" }, - { name: "wwow", record: { A: ["12312"] } }, - ...[ - "", - " ", - undefined, - "hlo wld", - "g32++13", - "ajsdD_123yq", - "khsda%", - "122*dsd", - getstroflen(101), - ].map((name) => ({ - ...defaultDomain, - name, - })), - { ...defaultDomain, record: { CNAME: "sd", A: ["121,3213"] } }, - { ...defaultDomain, record: { A: ["121", "12"], FOOBAR: ["sd"] } }, - { ...defaultDomain, record: { A: [] } }, - { ...defaultDomain, owner: {} }, - { ...defaultDomain, owner: { username: "hwelo" } }, - { ...defaultDomain, owner: { email: "hwelo" } }, - { ...defaultDomain, record: { CNAME: "http://foobar.com" } }, - { ...defaultDomain, record: { CNAME: "https://foobar.com" } }, - { ...defaultDomain, record: { URL: "foobar.com" } }, - { - ...defaultDomain, - record: { CNAME: "foobar.com", A: ["11.22.22.33"] }, - }, - { - ...defaultDomain, - record: { CNAME: "foobar.com", MX: ["ALT4.ASPMX.L.GOOGLE.COM"] }, - }, - ...INVALID_NAMES.map((name) => ({ ...defaultDomain, name })).slice( - 0, - 1, - ), - { ...defaultDomain, name: "ww2.baa" }, - { ...defaultDomain, name: "help.baa" }, - { ...defaultDomain, name: "_github-pages-challenge-is-a-dev" }, - { ...defaultDomain, name: "_github-challenge-is-a-dev" }, - { ...defaultDomain, record: { AAAA: [] } }, - { ...defaultDomain, record: { AAAA: ["182.22.222.22", "::1"] } }, - { ...defaultDomain, record: { AAAA: "182.22.222.22" } }, - { ...defaultDomain, record: { A: "::1" } }, - { ...defaultDomain, name: "_discord" }, - { ...defaultDomain, name: "_gitlab-pages-verification-code" }, - { ...defaultDomain, name: "_acme-challenge" }, - { ...defaultDomain, name: "_dmarc" }, - { ...defaultDomain, name: "_gh-is-a-dev" }, - { ...defaultDomain, name: "_domainkey" }, - { ...defaultDomain, name: "_improvmx" }, - { ...defaultDomain, name: "_vercel" }, - ]; - - const validCases = [ - defaultDomain, - ...[ - "hello", - "hello-world", - "11111111111", - "--wow--", - "wow--", - "--wow", - ].map((name) => ({ - ...defaultDomain, - name, - })), - { - ...defaultDomain, - description: getstroflen(99), - }, - { ...defaultDomain, record: { CNAME: "aa.sd" } }, - { ...defaultDomain, record: { URL: "https://foobar.com" } }, - { ...defaultDomain, record: { URL: "http://foobar.com/foobar/" } }, - { ...defaultDomain, record: { MX: ["ALT4.ASPMX.L.GOOGLE.COM"] } }, - { ...defaultDomain, record: { TXT: "foobar wow nice!!!" } }, - { - ...defaultDomain, - record: { A: ["1.1.1.1"], MX: ["mx1.example.com"] }, - }, - { ...defaultDomain, name: "gogo.foo.bar" }, - { ...defaultDomain, name: "ww9.baa" }, - { ...defaultDomain, name: "_github-pages-challenge-phenax.akshay" }, - { ...defaultDomain, name: "_github-pages-challenge-hello01-ga" }, - { ...defaultDomain, name: "_github-pages-challenge-hello01_ga" }, - { ...defaultDomain, name: "_github-challenge-phenax.akshay" }, - { ...defaultDomain, name: "_github-challenge-hello01-ga" }, - { ...defaultDomain, name: "_github-challenge-hello01_ga" }, - { - ...defaultDomain, - record: { TXT: ["foobar wow nice!!!", "more text"] }, - }, - { - ...defaultDomain, - record: { AAAA: ["::1", "2001:db8:3333:4444:5555:6666:7777:8888"] }, - }, - { ...defaultDomain, record: { A: ["122.222.222.222"] } }, - { ...defaultDomain, name: "_discord.subdomain" }, - { ...defaultDomain, name: "_gitlab-pages-verification-code.subdomain" }, - { ...defaultDomain, name: "_acme-challenge.subdomain" }, - { ...defaultDomain, name: "_dmarc.subdomain" }, - { ...defaultDomain, name: "_gh-phenax.akshay" }, - { ...defaultDomain, name: "_gh-hello01-ga" }, - { ...defaultDomain, name: "_gh-hello01_ga" }, - { ...defaultDomain, name: "_domainkey.subdomain" }, - { ...defaultDomain, name: "mx._domainkey.subdomain" }, - { ...defaultDomain, name: '_improvmx.subdomain' }, - { ...defaultDomain, name: '_vercel.subdomain' }, - { ...defaultDomain, name: "a.b" }, - ]; - - it("should return false for invalid data", () => { - invalidCases.forEach((data) => { - const { valid, errors } = validateDomainData(data); - expect(valid).toBe(false); - expect(errors.length).toBeGreaterThan(0); - }); - }); - - it("should return true if the name is valid", () => { - validCases.forEach((data) => { - const { valid, errors } = validateDomainData(data); - if (!valid) console.log(JSON.stringify(errors, null, 2)); - expect(valid).toBe(true); - expect(errors).toEqual([]); - }); - }); -}); diff --git a/utils/constants.js b/utils/constants.js deleted file mode 100644 index b0cf0079d..000000000 --- a/utils/constants.js +++ /dev/null @@ -1,30 +0,0 @@ -const path = require("path"); - -const { NODE_ENV: ENV = "test" } = process.env; - -const { - DOMAIN_USER, - DOMAIN_API_KEY, - DOMAIN_DOMAIN, - DOMAIN_API_HOST, - DOMAIN_API_PORT, - DOMAIN_HOST_IP, -} = process.env; - -const IS_TEST = ENV === "test"; - -const DOMAINS_PATH = path.resolve("domains"); - -module.exports = { - ENV, - IS_TEST, - VALID_RECORD_TYPES: ["CNAME", "A", "URL", "MX", "TXT", "AAAA"], - DOMAIN_DOMAIN: DOMAIN_DOMAIN || "booboo.xyz", - DOMAIN_USER: IS_TEST ? "testuser" : DOMAIN_USER, - DOMAIN_API_KEY: IS_TEST ? "testkey" : DOMAIN_API_KEY, - DOMAIN_API_HOST: IS_TEST ? "example.com" : DOMAIN_API_HOST, - DOMAIN_API_PORT: IS_TEST ? 6969 : DOMAIN_API_PORT, - DOMAIN_HOST_IP, - DOMAINS_PATH, - TTL: 5 * 60 * 60, -}; diff --git a/utils/domain-service.js b/utils/domain-service.js deleted file mode 100644 index b76eeac01..000000000 --- a/utils/domain-service.js +++ /dev/null @@ -1,206 +0,0 @@ -const R = require("ramda"); -const { cpanel } = require("./lib/cpanel"); -const { DOMAIN_DOMAIN, VALID_RECORD_TYPES } = require("./constants"); -const { then, log, print, lazyTask, batchLazyTasks } = require("./helpers"); - -const BATCH_SIZE = 1; - -const recordToRedirection = ({ name, address }) => ({ - domain: name === "@" ? DOMAIN_DOMAIN : `${name}.${DOMAIN_DOMAIN}`, - redirect: address, - type: "permanent", - redirect_wildcard: 1, - redirect_www: 1, -}); -const recordToZone = ({ name, type, address, id, priority }) => ({ - line: id, - name: name === "@" ? `${DOMAIN_DOMAIN}.` : name, - type, - address, - ...(type === "MX" ? { priority } : {}), - ...(type === "CNAME" ? { cname: address } : {}), - ...(type === "TXT" ? { txtdata: address } : {}), -}); - -const cleanName = (name) => - [DOMAIN_DOMAIN, `${DOMAIN_DOMAIN}.`].includes(name) - ? "@" - : `${name}` - .replace(new RegExp(`\\.${DOMAIN_DOMAIN}\\.?$`), "") - .toLowerCase(); - -const zoneToRecord = ({ - name, - type, - cname, - address, - priority, - preference, - exchange, - record, - line: id, -}) => ({ - id, - name: cleanName(name), - type: `${type}`, - address: `${exchange || cname || address || record}` - .replace(/\.$/g, "") - .toLowerCase(), - priority: priority || preference, -}); -const redirectionToRecord = ({ domain, destination }) => ({ - id: domain, - name: cleanName(domain), - type: "URL", - address: `${destination}`.replace(/\/$/g, ""), -}); - -const recordToEmailMx = ({ name, address, priority }) => ({ - domain: `${name}.is-a.dev`, - exchanger: address, - priority, -}); - -const getHostKey = (host) => - `${host.name.toLowerCase()}##${host.type.toLowerCase()}##${host.address.toLowerCase()}`; - -const isReserved = (domain) => - domain.name.startsWith("*") || !VALID_RECORD_TYPES.includes(domain.type); - -const diffRecords = (oldRecords, newRecords) => { - const isMatchingRecord = (a, b) => getHostKey(a) === getHostKey(b); - - const remove = R.differenceWith(isMatchingRecord, oldRecords, newRecords); - const add = R.differenceWith(isMatchingRecord, newRecords, oldRecords); - - return { add, remove }; -}; - -const executeBatch = (batches) => - batches.reduce((promise, batch, index) => { - return promise.then(async () => { - log( - ">>> Running batch number:", - index + 1, - `(size: ${batch.length})`, - ); - - const values = await Promise.all( - batch.map((fn) => fn().catch((e) => console.error(e))), - ); - - const results = values.map((data) => - R.pathOr({ result: data }, ["cpanelresult", "data", 0], data), - ); - const failed = results.filter((x) => (x.result || {}).status != 1); - - log(`${values.length - failed.length}/${values.length}`); - failed.length && log(JSON.stringify(failed, null, 2)); - - return null; - }); - }, Promise.resolve()); - -const getDomainService = ({ cpanel }) => { - const fetchZoneRecords = R.compose( - then(R.reject(isReserved)), - then(R.map(zoneToRecord)), - cpanel.zone.fetch, - ); - const fetchRedirections = R.compose( - then(R.map(redirectionToRecord)), - cpanel.redirection.fetch, - ); - - const addZoneRecord = lazyTask( - R.compose( - R.ifElse( - R.propEq("type", "MX"), - R.compose(cpanel.email.add, recordToEmailMx), - cpanel.zone.add, - ), - recordToZone, - print( - (r) => `Adding zone for ${r.name}: (${r.type} ${r.address})...`, - ), - ), - ); - const removeZoneRecord = lazyTask( - R.compose( - R.ifElse( - R.propEq("type", "MX"), - R.compose(cpanel.email.remove, recordToEmailMx), - R.compose(cpanel.zone.remove, R.pick(["line"])), - ), - recordToZone, - print( - (r) => - `Deleting zone for ${r.name}: (${r.type} ${r.address})...`, - ), - ), - ); - const addRedirection = lazyTask( - R.compose( - cpanel.redirection.add, - recordToRedirection, - print(({ name }) => `Adding redirection for ${name}`), - ), - ); - const removeRedirection = lazyTask( - R.compose( - cpanel.redirection.remove, - R.pick(["domain"]), - recordToRedirection, - print(({ name }) => `Deleting redirection for ${name}`), - ), - ); - - const getHosts = () => - Promise.all([fetchZoneRecords(), fetchRedirections()]).then(R.flatten); - - const addRecords = R.compose( - batchLazyTasks(BATCH_SIZE), - R.filter(Boolean), - R.map( - R.cond([ - [R.propEq("type", "URL"), addRedirection], - [R.T, addZoneRecord], - ]), - ), - ); - const removeRecords = R.compose( - batchLazyTasks(BATCH_SIZE), - R.map( - R.cond([ - [R.propEq("type", "URL"), removeRedirection], - [R.T, removeZoneRecord], - ]), - ), - R.sort((a, b) => b.id - a.id), - ); - - const updateHosts = async (hosts) => { - const remoteHostList = await getHosts(); - const { add, remove } = diffRecords(remoteHostList, hosts); - console.log(`Adding ${add.length}; Removing ${remove.length}`); - - await executeBatch([...removeRecords(remove), ...addRecords(add)]); - return { added: add.length, removed: remove.length }; - }; - - return { - getHosts, - get: cpanel.zone.fetch, - addZoneRecord, - removeZoneRecord, - updateHosts, - }; -}; - -const domainService = getDomainService({ cpanel }); - -module.exports = { - getDomainService, - domainService, - diffRecords, -}; diff --git a/utils/get-domain.js b/utils/get-domain.js deleted file mode 100644 index 064240358..000000000 --- a/utils/get-domain.js +++ /dev/null @@ -1,27 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const R = require("ramda"); -const { DOMAINS_PATH } = require("./constants"); - -const toDomain = (str) => path.join(DOMAINS_PATH, str); - -const parseDomain = (name) => (str) => { - try { - return JSON.parse(str); - } catch (e) { - throw new Error(`Error: Could not parse ${name} => ${str}`); - } -}; - -const toDomainData = (name) => - R.compose(parseDomain(name), R.toString, fs.readFileSync, toDomain)(name); - -const getDomains = () => - fs.promises.readdir(DOMAINS_PATH, {}).then( - R.map((name) => ({ - ...toDomainData(name), - name: name.replace(/\.json$/, ""), - })), - ); - -module.exports = { getDomains }; diff --git a/utils/helpers.js b/utils/helpers.js deleted file mode 100644 index 03369f2b7..000000000 --- a/utils/helpers.js +++ /dev/null @@ -1,54 +0,0 @@ -const R = require("ramda"); -const { IS_TEST } = require("./constants"); - -const log = IS_TEST ? () => {} : console.log; -const print = (fn) => (x) => log(fn(x)) || x; - -const between = (min, max) => (num) => num >= min && num <= max; -const testRegex = (regex) => (str) => !!(str && str.match(regex)); - -const validate = (pattern) => (data) => - R.compose( - (invalidPairs) => - invalidPairs.length - ? { errors: invalidPairs, valid: false } - : { errors: [], valid: true }, - R.filter(([key, { fn }]) => (fn ? !fn(data[key]) : false)), - R.toPairs, - )(pattern); - -const or = R.anyPass; -const and = R.allPass; - -const then = (fn) => (p) => p.then(fn); - -const lazyTask = (fn) => (data) => () => fn(data); - -const batchLazyTasks = (count) => (tasks) => - tasks.reduce((batches, task) => { - if (batches.length === 0) return [[task]]; - - const full = R.init(batches); - const last = R.last(batches); - - if (last.length >= count) return [...batches, [task]]; - return [...full, [...last, task]]; - }, []); - -const withLengthGte = (n) => R.compose(R.gte(R.__, n), R.length); -const withLengthEq = (n) => R.compose(R.equals(n), R.length); - -module.exports = { - or, - and, - validate, - between, - testRegex, - log, - print, - then, - lazyTask, - batchLazyTasks, - withLengthEq, - withLengthGte, -}; diff --git a/utils/invalid-domains.json b/utils/invalid-domains.json deleted file mode 100644 index 736faa9bd..000000000 --- a/utils/invalid-domains.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - "0", - "_acme-challenge", - "_discord", - "_dmarc", - "_domainkey", - "_gh-is-a-dev", - "_github-challenge-is-a-dev", - "_github-pages-challenge-is-a-dev", - "_gitlab-pages-verification-code", - "_improvmx", - "_vercel", - "con", - "help", - "no-reply", - "noreply", - "notification", - "notifications", - "support", - "ww", - "ww1", - "ww2", - "ww3", - "ww4", - "wwww", - "your-domain-name" -] diff --git a/utils/lib/cpanel.js b/utils/lib/cpanel.js deleted file mode 100644 index 573a22e5e..000000000 --- a/utils/lib/cpanel.js +++ /dev/null @@ -1,123 +0,0 @@ -const R = require("ramda"); -const qs = require("querystring"); -const { - DOMAIN_API_HOST, - DOMAIN_API_PORT, - DOMAIN_USER, - DOMAIN_API_KEY, - DOMAIN_DOMAIN, -} = require("../constants"); - -const CpanelClient = (options) => { - const api = - ({ basePath = "", action = "" }) => - (module, func, defaultQuery = {}) => - (q = {}) => { - const query = { - ...defaultQuery, - ...q, - cpanel_jsonapi_user: options.username, - cpanel_jsonapi_module: module, - cpanel_jsonapi_func: func, - cpanel_jsonapi_apiversion: 2, - }; - - const request = { - headers: { - Authorization: `cpanel ${options.username}:${options.apiKey}`, - }, - rejectUnauthorized: false, - }; - - const path = `${basePath}/${action}?${qs.stringify(query)}`; - const reqUrl = `https://${options.host}:${options.port}/${path}`; - - const { fetch } = options.dependencies; - return fetch(reqUrl, request).then((res) => res.json()); - }; - - const api2 = api({ basePath: "json-api", action: "cpanel" }); - const uapi = (module, func, defaultQuery) => - api({ basePath: "execute", action: `${module}/${func}` })( - module, - func, - defaultQuery, - ); - - return { - zone: { - // { customonly, domain } - // -> [{ class, ttl, name, line, Line, cname, type, record }] - fetch: R.compose( - (p) => p.then(R.pathOr([], ["cpanelresult", "data"])), - api2("ZoneEdit", "fetchzone_records", { - customonly: 0, - domain: options.domain, - }), - ), - - // { name, type(A|CNAME), cname, address, ttl } - // -> {} - add: api2("ZoneEdit", "add_zone_record", { - domain: options.domain, - }), - - // { line } - // -> {} - remove: api2("ZoneEdit", "remove_zone_record", { - domain: options.domain, - }), - }, - redirection: { - // {} - // -> [{ domain, destination }] - fetch: R.compose( - (p) => p.then(R.pathOr([], ["data"])), - uapi("Mime", "list_redirects"), - ), - - // { domain, redirect, type(permanent|tmp), redirect_wildcard(0|1), redirect(0|1|2) } - // -> {} - add: uapi("Mime", "add_redirect"), - - // { domain } - // -> {} - remove: uapi("Mime", "delete_redirect"), - }, - file: { - write: uapi("Fileman", "save_file_content", { - from_charset: "UTF-8", - to_charset: "UTF-8", - fallback: 1, - }), - }, - email: { - // { domain, exchanger, priority } - // -> {} - add: uapi("Email", "add_mx", { alwaysaccept: "auto" }), - - // { domain, exchanger, priority } - // -> {} - remove: uapi("Email", "delete_mx", { alwaysaccept: "auto" }), - }, - }; -}; - -if (!DOMAIN_API_KEY) { - console.error("Api key cannot be empty"); - process.exit(1); -} - -const cpanel = CpanelClient({ - host: DOMAIN_API_HOST, - port: DOMAIN_API_PORT, - username: DOMAIN_USER, - apiKey: DOMAIN_API_KEY, - domain: DOMAIN_DOMAIN, - dependencies: { fetch }, -}); - -module.exports = { - cpanel, - CpanelClient, -}; diff --git a/utils/validations.js b/utils/validations.js deleted file mode 100644 index eea099cd4..000000000 --- a/utils/validations.js +++ /dev/null @@ -1,129 +0,0 @@ -const R = require("ramda"); -const { VALID_RECORD_TYPES } = require("./constants"); -const { - or, - and, - validate, - between, - testRegex, - withLengthEq, - withLengthGte, -} = require("./helpers"); -const INVALID_NAMES = require("./invalid-domains.json"); -const ipRegex_ = require("ip-regex"); -const ipRegex = ipRegex_.default ?? ipRegex_; - -const isValidURL = and([R.is(String), testRegex(/^https?:\/\//gi)]); - -const isValidDomain = and([ - R.is(String), - testRegex(/^(([a-z0-9-_]+)\.)*(([a-z0-9-]+)\.)+[a-z]+$/gi), -]); - -const validateCnameRecord = (type) => - and([ - R.propIs(String, type), - R.compose(withLengthEq(1), R.keys), // CNAME cannot be used with any other record - R.propSatisfies(withLengthGte(4), type), - R.propSatisfies(isValidDomain, type), - ]); - -const validateARecord = (type) => - and([ - R.propIs(Array, type), - R.propSatisfies(withLengthGte(1), type), - R.all(testRegex(ipRegex.v4({ exact: true }))), - ]); - -const validateMXRecord = (type) => - and([ - R.propIs(Array, type), - R.propSatisfies(withLengthGte(1), type), - R.propSatisfies(R.all(isValidDomain), type), - ]); - -const validateAAAARecord = R.propSatisfies( - and([ - R.is(Array), - withLengthGte(1), - R.all(testRegex(ipRegex.v6({ exact: true }))), - ]), -); - -const checkRestrictedNames = R.complement(R.includes(R.__, INVALID_NAMES)); - -const extraSupportedNames = [ - testRegex(/^_github(-pages)?-challenge-[a-z0-9-_]+$/i), - R.equals("_discord"), - R.equals("_gitlab-pages-verification-code"), - R.equals("_acme-challenge"), - R.equals("_dmarc"), - R.equals("_domainkey"), - R.equals("_improvmx"), - R.equals("_vercel"), - testRegex(/^_gh-[a-z0-9-_]+$/i), -]; - -const validateDomainData = validate({ - name: { - reason: "The name of the file is invalid. It must be lowercased, alphanumeric and each component must be between 1-100 characters long.", - fn: or([ - R.equals("@"), - and([ - R.is(String), - checkRestrictedNames, - R.compose( - R.all( - or([ - and([ - R.compose(between(1, 100), R.length), - testRegex(/^[a-z0-9-]+$/g), - checkRestrictedNames, - ]), - ...extraSupportedNames, - ]), - ), - R.split("."), - ), - ]), - ]), - }, - description: { reason: "", fn: R.T }, - repo: { reason: "", fn: R.T }, - owner: { - reason: "`owner` key needs valid username and email properties.", - fn: and([ - R.is(Object), - R.complement(R.isEmpty), - R.where({ - username: and([R.is(String), withLengthGte(1)]), - email: R.is(String), - }), - ]), - }, - record: { - reason: "Invalid record(s) found. Please check the record types and values.", - fn: and([ - R.is(Object), - R.compose( - R.isEmpty, - R.difference(R.__, VALID_RECORD_TYPES), - R.keys, - ), - R.cond([ - [R.has("CNAME"), validateCnameRecord("CNAME")], - [R.has("A"), validateARecord("A")], - [R.has("URL"), R.propSatisfies(isValidURL, "URL")], - [R.has("MX"), validateMXRecord("MX")], - [ - R.has("TXT"), - R.propSatisfies(or([R.is(String), R.is(Array)]), "TXT"), - ], - [R.has("AAAA"), validateAAAARecord("AAAA")], - [R.T, R.T], - ]), - ]), - }, -}); - -module.exports = { validateDomainData, isValidDomain }; From 8f9609d0c18fedd815560c7d809840fa4fa86bba Mon Sep 17 00:00:00 2001 From: William Harrison Date: Wed, 16 Oct 2024 17:48:45 +0800 Subject: [PATCH 02/82] Update dnsconfig.js --- dnsconfig.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index f053b8b4b..6a71add4f 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -46,13 +46,6 @@ for (var idx in domains) { proxyState = proxy.off; } - // Handle CNAME record - if (domainData.record.CNAME) { - commit[domainData.record.domain].push( - CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) - ); - } - // Handle A records if (domainData.record.A) { for (var a in domainData.record.A) { @@ -71,27 +64,27 @@ for (var idx in domains) { } } + // Handle CNAME record + if (domainData.record.CNAME) { + commit[domainData.record.domain].push( + CNAME(domainData.subdomain, `${domainData.record.CNAME}.`, proxyState) + ); + } + // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { commit[domainData.record.domain].push( - MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") + MX(domainData.subdomain, 10, `${domainData.record.MX[mx]}.`) ); } } - // Handle URL records (redirect) - if (domainData.record.URL) { - commit[domainData.record.domain].push( - URL(domainData.subdomain, domainData.record.URL) - ); - } - // Handle NS records if (domainData.record.NS) { for (var ns in domainData.record.NS) { commit[domainData.domain].push( - NS(domainData.subdomain, domainData.record.NS[ns] + ".") + NS(domainData.subdomain, `${domainData.record.NS[ns]}.`) ); } } @@ -101,7 +94,7 @@ for (var idx in domains) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; commit[domainData.domain].push( - SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") + SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, `${srvRecord.target}.`) ); } } @@ -120,6 +113,13 @@ for (var idx in domains) { ); } } + + // Handle URL records (redirect) + if (domainData.record.URL) { + commit[domainData.record.domain].push( + CNAME(domainData.subdomain, "redirect.is-a.dev.", proxyState) + ); + } } // Commit all DNS records From d0c54d56aabb50a8c7766903a4e07ee3aca6ec07 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Wed, 16 Oct 2024 17:54:44 +0800 Subject: [PATCH 03/82] Update dnsconfig.js --- dnsconfig.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 6a71add4f..9b52705af 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -67,7 +67,7 @@ for (var idx in domains) { // Handle CNAME record if (domainData.record.CNAME) { commit[domainData.record.domain].push( - CNAME(domainData.subdomain, `${domainData.record.CNAME}.`, proxyState) + CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) ); } @@ -75,7 +75,7 @@ for (var idx in domains) { if (domainData.record.MX) { for (var mx in domainData.record.MX) { commit[domainData.record.domain].push( - MX(domainData.subdomain, 10, `${domainData.record.MX[mx]}.`) + MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") ); } } @@ -84,7 +84,7 @@ for (var idx in domains) { if (domainData.record.NS) { for (var ns in domainData.record.NS) { commit[domainData.domain].push( - NS(domainData.subdomain, `${domainData.record.NS[ns]}.`) + NS(domainData.subdomain, domainData.record.NS[ns] + ".") ); } } @@ -94,7 +94,7 @@ for (var idx in domains) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; commit[domainData.domain].push( - SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, `${srvRecord.target}.`) + SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") ); } } From 3cd7168bc0e8b9eda139ed8fb12c863ee816eb25 Mon Sep 17 00:00:00 2001 From: andrewstech Date: Wed, 16 Oct 2024 09:57:27 +0000 Subject: [PATCH 04/82] New CI --- dnsconfig.js | 6 +-- zone.js | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 zone.js diff --git a/dnsconfig.js b/dnsconfig.js index 9b52705af..00d2d5c8e 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -8,7 +8,7 @@ var proxy = { // Function to validate filenames according to the given rules function isValidFilename(filename) { - var regex = /^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)*\.json$/; + var regex = /\.json$/; return regex.test(filename); } @@ -20,7 +20,7 @@ function getDomainsList(filesPath) { var basename = files[i].split('/').reverse()[0]; if (!isValidFilename(basename)) { - console.log(`Skipping invalid file: ${basename}`); + console.log("Skipping invalid file:" + basename); continue; } @@ -66,7 +66,7 @@ for (var idx in domains) { // Handle CNAME record if (domainData.record.CNAME) { - commit[domainData.record.domain].push( + commit[domainData.domain].push( CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) ); } diff --git a/zone.js b/zone.js new file mode 100644 index 000000000..fb49a395b --- /dev/null +++ b/zone.js @@ -0,0 +1,129 @@ +const fs = require('fs'); // Required for writing JSON to file + +var proxy = { + on: { "cloudflare_proxy": "on" }, + off: { "cloudflare_proxy": "off" } +}; + +// Function to validate filenames according to the given rules +function isValidFilename(filename) { + var regex = /^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)*\.json$/; + return regex.test(filename); +} + +// Function to get the domains list from the domains folder +function getDomainsList(filesPath) { + 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]; + + if (!isValidFilename(basename)) { + console.log(`Skipping invalid file: ${basename}`); + continue; + } + + var name = basename.split('.')[0]; + result.push({ name: name, data: require(files[i]) }); + } + + return result; +} + +var domains = getDomainsList('./domains'); +var zoneFile = {}; // JSON object to hold all the DNS records + +for (var idx in domains) { + var domainData = domains[idx].data; + var proxyState = proxy.on; // enabled by default + + // Initialize the domain entry in the zone file if not already there + if (!zoneFile[domainData.record.domain]) { + zoneFile[domainData.record.domain] = []; + } + + // Check if proxy should be turned off + if (domainData.record.proxied === false) { + proxyState = proxy.off; + } + + // Handle CNAME record + if (domainData.record.CNAME) { + zoneFile[domainData.record.domain].push({ + type: "CNAME", + subdomain: domainData.subdomain, + value: domainData.record.CNAME + ".", + proxy: proxyState + }); + } + + // Handle A records + if (domainData.record.A) { + for (var a in domainData.record.A) { + zoneFile[domainData.record.domain].push({ + type: "A", + subdomain: domainData.subdomain, + value: domainData.record.A[a], + proxy: proxyState + }); + } + } + + // Handle AAAA records + if (domainData.record.AAAA) { + for (var aaaa in domainData.record.AAAA) { + zoneFile[domainData.record.domain].push({ + type: "AAAA", + subdomain: domainData.subdomain, + value: domainData.record.AAAA[aaaa], + proxy: proxyState + }); + } + } + + // Handle MX records + if (domainData.record.MX) { + for (var mx in domainData.record.MX) { + zoneFile[domainData.record.domain].push({ + type: "MX", + subdomain: domainData.subdomain, + value: domainData.record.MX[mx] + ".", + priority: 10 + }); + } + } + + // Handle URL records (redirect) + if (domainData.record.URL) { + zoneFile[domainData.record.domain].push({ + type: "URL", + subdomain: domainData.subdomain, + value: domainData.record.URL + }); + } + + // Handle TXT records + if (domainData.record.TXT) { + if (Array.isArray(domainData.record.TXT)) { + for (var txt in domainData.record.TXT) { + zoneFile[domainData.record.domain].push({ + type: "TXT", + subdomain: domainData.subdomain, + value: domainData.record.TXT[txt] + }); + } + } else { + zoneFile[domainData.record.domain].push({ + type: "TXT", + subdomain: domainData.subdomain, + value: domainData.record.TXT + }); + } + } +} + +// Write the JSON zone file to disk +fs.writeFileSync('zoneFile.json', JSON.stringify(zoneFile, null, 2), 'utf-8'); + +console.log("Zone file has been written to zoneFile.json"); From f9ad11586dc17bab50fb65c5dea859bdc3eb7939 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Wed, 16 Oct 2024 18:05:51 +0800 Subject: [PATCH 05/82] Update dnsconfig.js --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index 00d2d5c8e..6f8a39723 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -117,7 +117,7 @@ for (var idx in domains) { // Handle URL records (redirect) if (domainData.record.URL) { commit[domainData.record.domain].push( - CNAME(domainData.subdomain, "redirect.is-a.dev.", proxyState) + CNAME(domainData.subdomain, "redirect.is-a.dev.", proxy.on) ); } } From 1b99643493ce80026685661b3ea178dc25b3f1a2 Mon Sep 17 00:00:00 2001 From: andrewstech Date: Wed, 16 Oct 2024 11:11:45 +0100 Subject: [PATCH 06/82] Update dnsconfig.js --- dnsconfig.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 6f8a39723..9fbbe8d8e 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -66,9 +66,14 @@ for (var idx in domains) { // Handle CNAME record if (domainData.record.CNAME) { - commit[domainData.domain].push( - CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) - ); + if (domainData.subdomain && domainData.record.CNAME) { + var cnameTarget = domainData.record.CNAME.endsWith(".") ? domainData.record.CNAME : domainData.record.CNAME + "."; + commit[domainData.record.domain].push( + CNAME(domainData.subdomain, cnameTarget, proxyState) + ); + } else { + console.log("Invalid CNAME record for domain: " + domainData.record.domain); + } } // Handle MX records @@ -117,7 +122,7 @@ for (var idx in domains) { // Handle URL records (redirect) if (domainData.record.URL) { commit[domainData.record.domain].push( - CNAME(domainData.subdomain, "redirect.is-a.dev.", proxy.on) + CNAME(domainData.subdomain, "redirect.is-a.dev.", proxyState) ); } } From 642f6e69f04e98368b5179ff8ca2d237aca6abd6 Mon Sep 17 00:00:00 2001 From: NinjaXility <103378267+NinjaXility@users.noreply.github.com> Date: Wed, 16 Oct 2024 20:58:06 +0300 Subject: [PATCH 07/82] Register h3lios.is-a.dev --- domains/h3lios.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/h3lios.json diff --git a/domains/h3lios.json b/domains/h3lios.json new file mode 100644 index 000000000..7fa4c440b --- /dev/null +++ b/domains/h3lios.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "NinjaXility", + "email": "", + "discord": "511106356267319296", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IBR3ZrvHG0dyQ1OU_ThEq2VbB_gvPhqPJkyPtwwbODCQENB-T2fstb7JrqYXG9lNaBWBrkeUzrheB5HY5tgEmPDAe6eDnN1D0dk0HKwxySEO7I1wbJsoJUnrWXigmuIYYkCPqHO9bBBD3seh4Y-REvCFI_xjNxBOIkqYiISDG4SJZW_AMoM-4ZwWJOS30ASQA3IM1DrvS3cNeamN0vmy2W16z7PUQxfn3UpwhdalfbzZKgiPowTVnbMT8OZ0IL45VZCmqeikraFf7fUv0PPCk54c07A8mIpYepzyy4hUftsF-ILHDLU_iOMZDHPrMDpPeyFXgYjA1iv1AfgFj6lshA.CFjZ-C3qr_js2SqYJQruNQ.j12mMFCkJhwZpCJXE_JDaY1XgeCUkSwhowfAvMEFrxvTdeqGbeEaHiXN4-oXfM0FuPLNgfsJDTwmva-ekWTAeOtX4a3IBlJ0uuj65_tdMOw.NDTU5ISRijrUIUoDvdYXJw" + }, + + "record": { + "CNAME": "https://ninjaxility.github.io/" + } + } + \ No newline at end of file From 362296085a3ab4dd0b16999db84c51e25588a8f2 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 12:47:30 +1100 Subject: [PATCH 08/82] more record types + fixes? --- .github/workflows/publish.yml | 4 +- dnsconfig.js | 72 +++++++++++++---------------------- 2 files changed, 29 insertions(+), 47 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8577075f3..335a58668 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -26,7 +26,7 @@ jobs: - name: Publish uses: koenrh/dnscontrol-action@v3 env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} with: args: push - config_file: "dnsconfig.js" \ No newline at end of file + config_file: "dnsconfig.js" diff --git a/dnsconfig.js b/dnsconfig.js index 9fbbe8d8e..4b0a1942f 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -4,12 +4,6 @@ var providerCf = DnsProvider(NewDnsProvider("cloudflare")); var proxy = { on: { "cloudflare_proxy": "on" }, off: { "cloudflare_proxy": "off" } -}; - -// Function to validate filenames according to the given rules -function isValidFilename(filename) { - var regex = /\.json$/; - return regex.test(filename); } function getDomainsList(filesPath) { @@ -18,13 +12,8 @@ function getDomainsList(filesPath) { for (var i = 0; i < files.length; i++) { var basename = files[i].split('/').reverse()[0]; - - if (!isValidFilename(basename)) { - console.log("Skipping invalid file:" + basename); - continue; - } - var name = basename.split('.')[0]; + result.push({ name: name, data: require(files[i]) }); } @@ -35,21 +24,22 @@ var domains = getDomainsList('./domains'); var commit = {}; for (var idx in domains) { + var domainName = domains[idx].name; var domainData = domains[idx].data; - var proxyState = proxy.off; // disabled by default + var proxyState = proxy.on; // enabled by default - if (!commit[domainData.record.domain]) { - commit[domainData.record.domain] = []; + if (!commit[domainName]) { + commit[domainName] = []; } - if (domainData.record.proxied === false) { + if (domainData.proxied === false) { proxyState = proxy.off; } // Handle A records if (domainData.record.A) { for (var a in domainData.record.A) { - commit[domainData.record.domain].push( + commit[domainName].push( A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) ); } @@ -58,28 +48,33 @@ for (var idx in domains) { // Handle AAAA records if (domainData.record.AAAA) { for (var aaaa in domainData.record.AAAA) { - commit[domainData.record.domain].push( + commit[domainName].push( AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) ); } } - // Handle CNAME record - if (domainData.record.CNAME) { - if (domainData.subdomain && domainData.record.CNAME) { - var cnameTarget = domainData.record.CNAME.endsWith(".") ? domainData.record.CNAME : domainData.record.CNAME + "."; - commit[domainData.record.domain].push( - CNAME(domainData.subdomain, cnameTarget, proxyState) + // Handle CAA records + if (domainData.record.CAA) { + for (var caa in domainData.record.CAA) { + var caaRecord = domainData.record.CAA[caa]; + commit[domainName].push( + CAA(domainData.subdomain, caaRecord.flags, caaRecord.tag, caaRecord.value) ); - } else { - console.log("Invalid CNAME record for domain: " + domainData.record.domain); } } + // Handle CNAME records + if (domainData.record.CNAME) { + commit[domainName].push( + CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) + ); + } + // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { - commit[domainData.record.domain].push( + commit[domainName].push( MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") ); } @@ -88,7 +83,7 @@ for (var idx in domains) { // Handle NS records if (domainData.record.NS) { for (var ns in domainData.record.NS) { - commit[domainData.domain].push( + commit[domainName].push( NS(domainData.subdomain, domainData.record.NS[ns] + ".") ); } @@ -98,7 +93,7 @@ for (var idx in domains) { if (domainData.record.SRV) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; - commit[domainData.domain].push( + commit[domainName].push( SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") ); } @@ -106,25 +101,12 @@ for (var idx in domains) { // Handle TXT records if (domainData.record.TXT) { - if (Array.isArray(domainData.record.TXT)) { - for (var txt in domainData.record.TXT) { - commit[domainData.record.domain].push( - TXT(domainData.subdomain, domainData.record.TXT[txt]) - ); - } - } else { - commit[domainData.record.domain].push( - TXT(domainData.subdomain, domainData.record.TXT) + for (var txt in domainData.record.TXT) { + commit[domainName].push( + TXT(domainData.subdomain, domainData.record.TXT[txt]) ); } } - - // Handle URL records (redirect) - if (domainData.record.URL) { - commit[domainData.record.domain].push( - CNAME(domainData.subdomain, "redirect.is-a.dev.", proxyState) - ); - } } // Commit all DNS records From fcfc8ec9202e9423ce42817bfa9b1c7c83a6ae98 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 12:51:12 +1100 Subject: [PATCH 09/82] fixes? --- dnsconfig.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 4b0a1942f..509733463 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -24,7 +24,8 @@ var domains = getDomainsList('./domains'); var commit = {}; for (var idx in domains) { - var domainName = domains[idx].name; + var domainName = "is-a.dev"; + var subdomainName = domains[idx].name; var domainData = domains[idx].data; var proxyState = proxy.on; // enabled by default @@ -40,7 +41,7 @@ for (var idx in domains) { if (domainData.record.A) { for (var a in domainData.record.A) { commit[domainName].push( - A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) + A(subdomainName, IP(domainData.record.A[a]), proxyState) ); } } @@ -49,7 +50,7 @@ for (var idx in domains) { if (domainData.record.AAAA) { for (var aaaa in domainData.record.AAAA) { commit[domainName].push( - AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) + AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState) ); } } @@ -59,7 +60,7 @@ for (var idx in domains) { for (var caa in domainData.record.CAA) { var caaRecord = domainData.record.CAA[caa]; commit[domainName].push( - CAA(domainData.subdomain, caaRecord.flags, caaRecord.tag, caaRecord.value) + CAA(subdomainName, caaRecord.flags, caaRecord.tag, caaRecord.value) ); } } @@ -67,7 +68,7 @@ for (var idx in domains) { // Handle CNAME records if (domainData.record.CNAME) { commit[domainName].push( - CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) + CNAME(subdomainName, domainData.record.CNAME + ".", proxyState) ); } @@ -75,7 +76,7 @@ for (var idx in domains) { if (domainData.record.MX) { for (var mx in domainData.record.MX) { commit[domainName].push( - MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") + MX(subdomainName, 10, domainData.record.MX[mx] + ".") ); } } @@ -84,7 +85,7 @@ for (var idx in domains) { if (domainData.record.NS) { for (var ns in domainData.record.NS) { commit[domainName].push( - NS(domainData.subdomain, domainData.record.NS[ns] + ".") + NS(subdomainName, domainData.record.NS[ns] + ".") ); } } @@ -94,7 +95,7 @@ for (var idx in domains) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; commit[domainName].push( - SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") + SRV(subdomainName, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") ); } } @@ -103,7 +104,7 @@ for (var idx in domains) { if (domainData.record.TXT) { for (var txt in domainData.record.TXT) { commit[domainName].push( - TXT(domainData.subdomain, domainData.record.TXT[txt]) + TXT(subdomainName, domainData.record.TXT[txt]) ); } } From fe56885bcde28621da80e655a65d54f609a98680 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 12:53:24 +1100 Subject: [PATCH 10/82] fix? --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index 509733463..3903e79b0 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -24,8 +24,8 @@ var domains = getDomainsList('./domains'); var commit = {}; for (var idx in domains) { - var domainName = "is-a.dev"; var subdomainName = domains[idx].name; + var domainName = subdomainName + ".is-a.dev"; var domainData = domains[idx].data; var proxyState = proxy.on; // enabled by default From 899f730caa04a1fdeafcda28d6b6db8f8ecfdb90 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 12:57:05 +1100 Subject: [PATCH 11/82] fix txt error --- dnsconfig.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 3903e79b0..056fd3952 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -24,8 +24,8 @@ var domains = getDomainsList('./domains'); var commit = {}; for (var idx in domains) { + var domainName = "is-a.dev"; var subdomainName = domains[idx].name; - var domainName = subdomainName + ".is-a.dev"; var domainData = domains[idx].data; var proxyState = proxy.on; // enabled by default @@ -102,9 +102,15 @@ for (var idx in domains) { // Handle TXT records if (domainData.record.TXT) { - for (var txt in domainData.record.TXT) { + if (Array.isArray(domainData.record.TXT)) { + for (var txt in domainData.record.TXT) { + commit[domainName].push( + TXT(subdomainName, domainData.record.TXT[txt]) + ); + } + } else { commit[domainName].push( - TXT(subdomainName, domainData.record.TXT[txt]) + TXT(subdomainName, domainData.record.TXT) ); } } From a4e107681c5a2536439ce6d373bcd2c14193575a Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:01:38 +1100 Subject: [PATCH 12/82] fix domains --- domains/asnct.json | 2 +- domains/ehab.json | 2 +- domains/renzyx.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/domains/asnct.json b/domains/asnct.json index c5d53fced..b95023607 100644 --- a/domains/asnct.json +++ b/domains/asnct.json @@ -7,6 +7,6 @@ "record": { "URL": "https://asnct_bio.t.me", "TXT": ["mailru-domain: wDSaV835X4LZyKsP", "v=spf1 redirect=_spf.mail.ru"], - "MX": "emx.mail.ru" + "MX": ["emx.mail.ru"] } } diff --git a/domains/ehab.json b/domains/ehab.json index 64c1a4764..50e6321b3 100644 --- a/domains/ehab.json +++ b/domains/ehab.json @@ -6,6 +6,6 @@ "record": { "A": ["128.204.223.115"], "TXT": "v=spf1 mx a include:mail9.serv00.com -all", - "MX": "mail9.serv00.com" + "MX": ["mail9.serv00.com"] } } diff --git a/domains/renzyx.json b/domains/renzyx.json index e5fda8c71..a3e01087f 100644 --- a/domains/renzyx.json +++ b/domains/renzyx.json @@ -7,7 +7,7 @@ }, "record": { "A": ["75.2.60.5"], - "MX": "feedback-smtp.us-east-1.amazonses.com", + "MX": ["feedback-smtp.us-east-1.amazonses.com"], "TXT": [ "v=spf1 include:amazonses.com ~all", "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDl3uimKrfDsLkGKkuwIhxEi23dmRf1GTyrcfpzF/iSfGrMp5xbDo3+lqN4R3Dx48orvlGbtNxQevx4NPIHU+BAIfRyRkMDzP9X+elTMFkHqHtly5OswQJd0Jciax8WqPoTfLo7+cjDyY0lejoqadUK0gxRe5b5HOLGNUBOCgmCNQIDAQAB" From 9398d5a2cc81148957738d3e064ae9f93840cea6 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:05:09 +1100 Subject: [PATCH 13/82] url records --- dnsconfig.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dnsconfig.js b/dnsconfig.js index 056fd3952..64e595db9 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -72,6 +72,12 @@ for (var idx in domains) { ); } + if (domainData.record.URL) { + commit[domainName].push( + CNAME(subdomainName, "redirect.is-a.dev.", proxyState) + ); + } + // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { From ae905e36af2fdfb117c6fecd17c81fc66875a222 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:08:12 +1100 Subject: [PATCH 14/82] more fixes --- dnsconfig.js | 3 +-- domains/onvy.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 64e595db9..ea5efc330 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -11,8 +11,7 @@ function getDomainsList(filesPath) { 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]; + var name = files[i].split('.').slice(0, -1).join('.'); result.push({ name: name, data: require(files[i]) }); } diff --git a/domains/onvy.json b/domains/onvy.json index 42e0a84bf..9c63ed74c 100644 --- a/domains/onvy.json +++ b/domains/onvy.json @@ -6,7 +6,7 @@ "record": { "MX": [ "mx1.improvmx.com", - "mx1.improvmx.com" + "mx2.improvmx.com" ], "TXT": "v=spf1 include:spf.improvmx.com ~all" } From 6cf5aefc9346d0951699807f71629a15cd5feb65 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:10:53 +1100 Subject: [PATCH 15/82] fix url records --- dnsconfig.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index ea5efc330..58bf90b84 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -71,12 +71,6 @@ for (var idx in domains) { ); } - if (domainData.record.URL) { - commit[domainName].push( - CNAME(subdomainName, "redirect.is-a.dev.", proxyState) - ); - } - // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { @@ -119,6 +113,14 @@ for (var idx in domains) { ); } } + + // Handle URL records + // Note: URL records are not actual DNS records, we have a server configured to support them instead. + if (domainData.record.URL) { + commit[domainName].push( + A(subdomainName, "192.0.2.1", proxy.on) + ); + } } // Commit all DNS records From 35ec12d07e1e524496a9ce3d880894acbe1b87d4 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:14:43 +1100 Subject: [PATCH 16/82] remove acme challenge records + fix other domains --- domains/0v90.json | 2 +- domains/_acme-challenge.ai.esb.json | 13 ------------- domains/_acme-challenge.api.juststudio.json | 11 ----------- domains/_acme-challenge.cdn.esb.json | 13 ------------- domains/_acme-challenge.juqwtf.json | 12 ------------ domains/_acme-challenge.katz.json | 11 ----------- domains/_acme-challenge.oioioi.json | 9 --------- domains/_acme-challenge.parrot.json | 13 ------------- domains/_acme-challenge.raafey.json | 9 --------- domains/_acme-challenge.us.mcstatus.json | 13 ------------- domains/ashishagr.json | 2 +- domains/kuldeep.json | 2 +- domains/vbkg.json | 2 +- 13 files changed, 4 insertions(+), 108 deletions(-) delete mode 100644 domains/_acme-challenge.ai.esb.json delete mode 100644 domains/_acme-challenge.api.juststudio.json delete mode 100644 domains/_acme-challenge.cdn.esb.json delete mode 100644 domains/_acme-challenge.juqwtf.json delete mode 100644 domains/_acme-challenge.katz.json delete mode 100644 domains/_acme-challenge.oioioi.json delete mode 100644 domains/_acme-challenge.parrot.json delete mode 100644 domains/_acme-challenge.raafey.json delete mode 100644 domains/_acme-challenge.us.mcstatus.json diff --git a/domains/0v90.json b/domains/0v90.json index 98925033e..de32e280b 100644 --- a/domains/0v90.json +++ b/domains/0v90.json @@ -13,7 +13,7 @@ "185.199.108.153", "185.199.109.153", "185.199.110.153", - "185.199.110.153" + "185.199.111.153" ] } } diff --git a/domains/_acme-challenge.ai.esb.json b/domains/_acme-challenge.ai.esb.json deleted file mode 100644 index bef1435a1..000000000 --- a/domains/_acme-challenge.ai.esb.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "EducatedSuddenBucket", - "email": "", - "discord": "1167825360151380032", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" - }, - - "record": { - "CNAME": "af252befb545b3b27e96b5b9._acme.deno.dev" - } - } - diff --git a/domains/_acme-challenge.api.juststudio.json b/domains/_acme-challenge.api.juststudio.json deleted file mode 100644 index 1d3e92ea1..000000000 --- a/domains/_acme-challenge.api.juststudio.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "JustStudio.API", - "owner": { - "username": "JustDeveloper1", - "email": "support@juststudio.is-a.dev", - "discord": "1117482901353812088" - }, - "record": { - "CNAME": "ec675496b91489e24d221965._acme.deno.dev" - } -} diff --git a/domains/_acme-challenge.cdn.esb.json b/domains/_acme-challenge.cdn.esb.json deleted file mode 100644 index 00111381b..000000000 --- a/domains/_acme-challenge.cdn.esb.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "EducatedSuddenBucket", - "email": "", - "discord": "1167825360151380032", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" - }, - - "record": { - "CNAME": "fe4cfa72d5862865fb2759c8._acme.deno.dev" - } - } - diff --git a/domains/_acme-challenge.juqwtf.json b/domains/_acme-challenge.juqwtf.json deleted file mode 100644 index e8fc66acc..000000000 --- a/domains/_acme-challenge.juqwtf.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "denboy0123", - "email": "pochtaproverka01@gmail.com" - }, - "record": { - "TXT": [ - "FZo9g0GqRYR-fhmWc1QzbycfV5UZIE4bwh42BI81NDQ", - "V1N8tuJvEcUtltxMXLRvP0U1_jaAgsSJJ89MgyxpWUk" - ] - } -} diff --git a/domains/_acme-challenge.katz.json b/domains/_acme-challenge.katz.json deleted file mode 100644 index 434720b24..000000000 --- a/domains/_acme-challenge.katz.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Bananalolok", - "email": "", - "discord": "bananalol7678" - }, - - "record": { - "CNAME": "77c60266e3d311053d5b2fe1._acme.deno.dev" - } -} diff --git a/domains/_acme-challenge.oioioi.json b/domains/_acme-challenge.oioioi.json deleted file mode 100644 index 1bb254789..000000000 --- a/domains/_acme-challenge.oioioi.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "VaibhavSys", - "email": "vaibhavsys@protonmail.com" - }, - "record": { - "CNAME": "b00be066-ce45-455f-bb4a-de9f6dc14e0c.acmedns.infinityfree.net" - } -} diff --git a/domains/_acme-challenge.parrot.json b/domains/_acme-challenge.parrot.json deleted file mode 100644 index 4e34f2525..000000000 --- a/domains/_acme-challenge.parrot.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "EducatedSuddenBucket", - "email": "", - "discord": "1167825360151380032", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" - }, - - "record": { - "CNAME": "51de1eeaf31ce67a1c3f69aa._acme.deno.dev" - } - } - diff --git a/domains/_acme-challenge.raafey.json b/domains/_acme-challenge.raafey.json deleted file mode 100644 index 59d86c9fe..000000000 --- a/domains/_acme-challenge.raafey.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "RaafeyRaza", - "email": "raafeyraza1@gmail.com" - }, - "record": { - "CNAME": "dc6fbbae-3aba-4a5d-9741-4b7a386b9151.acmedns.infinityfree.net" - } -} diff --git a/domains/_acme-challenge.us.mcstatus.json b/domains/_acme-challenge.us.mcstatus.json deleted file mode 100644 index 55ec2e523..000000000 --- a/domains/_acme-challenge.us.mcstatus.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "EducatedSuddenBucket", - "email": "", - "discord": "1167825360151380032", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" - }, - - "record": { - "CNAME": "e6797667cd820de372823eb4._acme.deno.dev" - } - } - \ No newline at end of file diff --git a/domains/ashishagr.json b/domains/ashishagr.json index 181618046..78946238d 100644 --- a/domains/ashishagr.json +++ b/domains/ashishagr.json @@ -5,8 +5,8 @@ }, "record": { "A": [ + "185.199.108.153", "185.199.109.153", - "185.199.111.153", "185.199.110.153", "185.199.111.153" ], diff --git a/domains/kuldeep.json b/domains/kuldeep.json index a772ebcaf..06fccac98 100644 --- a/domains/kuldeep.json +++ b/domains/kuldeep.json @@ -7,7 +7,7 @@ }, "record": { - "A": ["185.199.108.153","185.199.109.153","185.199.110.153","185.199.110.153"] + "A": ["185.199.108.153","185.199.109.153","185.199.110.153","185.199.111.153"] } } diff --git a/domains/vbkg.json b/domains/vbkg.json index a5d5e977b..7d55662bf 100644 --- a/domains/vbkg.json +++ b/domains/vbkg.json @@ -6,7 +6,7 @@ "record": { "MX": [ "mx1.improvmx.com", - "mx1.improvmx.com" + "mx2.improvmx.com" ], "TXT": "v=spf1 include:spf.improvmx.com ~all" } From e773d40b545a0f0d9b862f16cc6191dcd780a84d Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:13 +1100 Subject: [PATCH 17/82] Discard changes to domains/_acme-challenge.ai.esb.json --- domains/_acme-challenge.ai.esb.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/_acme-challenge.ai.esb.json diff --git a/domains/_acme-challenge.ai.esb.json b/domains/_acme-challenge.ai.esb.json new file mode 100644 index 000000000..bef1435a1 --- /dev/null +++ b/domains/_acme-challenge.ai.esb.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "EducatedSuddenBucket", + "email": "", + "discord": "1167825360151380032", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" + }, + + "record": { + "CNAME": "af252befb545b3b27e96b5b9._acme.deno.dev" + } + } + From dd6b6d16b30a837d3d73bfcaf0b4c0edbdb43d55 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:17 +1100 Subject: [PATCH 18/82] Discard changes to domains/_acme-challenge.api.juststudio.json --- domains/_acme-challenge.api.juststudio.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 domains/_acme-challenge.api.juststudio.json diff --git a/domains/_acme-challenge.api.juststudio.json b/domains/_acme-challenge.api.juststudio.json new file mode 100644 index 000000000..1d3e92ea1 --- /dev/null +++ b/domains/_acme-challenge.api.juststudio.json @@ -0,0 +1,11 @@ +{ + "description": "JustStudio.API", + "owner": { + "username": "JustDeveloper1", + "email": "support@juststudio.is-a.dev", + "discord": "1117482901353812088" + }, + "record": { + "CNAME": "ec675496b91489e24d221965._acme.deno.dev" + } +} From ddd7f26df15ee81b42497a8efbe8f53ce37a6f9a Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:21 +1100 Subject: [PATCH 19/82] Discard changes to domains/_acme-challenge.cdn.esb.json --- domains/_acme-challenge.cdn.esb.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/_acme-challenge.cdn.esb.json diff --git a/domains/_acme-challenge.cdn.esb.json b/domains/_acme-challenge.cdn.esb.json new file mode 100644 index 000000000..00111381b --- /dev/null +++ b/domains/_acme-challenge.cdn.esb.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "EducatedSuddenBucket", + "email": "", + "discord": "1167825360151380032", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" + }, + + "record": { + "CNAME": "fe4cfa72d5862865fb2759c8._acme.deno.dev" + } + } + From 4381b335a5309e85a2c82a155ffe49d8f5cd411b Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:24 +1100 Subject: [PATCH 20/82] Discard changes to domains/_acme-challenge.juqwtf.json --- domains/_acme-challenge.juqwtf.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 domains/_acme-challenge.juqwtf.json diff --git a/domains/_acme-challenge.juqwtf.json b/domains/_acme-challenge.juqwtf.json new file mode 100644 index 000000000..e8fc66acc --- /dev/null +++ b/domains/_acme-challenge.juqwtf.json @@ -0,0 +1,12 @@ +{ + "owner": { + "username": "denboy0123", + "email": "pochtaproverka01@gmail.com" + }, + "record": { + "TXT": [ + "FZo9g0GqRYR-fhmWc1QzbycfV5UZIE4bwh42BI81NDQ", + "V1N8tuJvEcUtltxMXLRvP0U1_jaAgsSJJ89MgyxpWUk" + ] + } +} From 2bf9b0758e81c74b0c8c2788b5e4e3a9ea985221 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:28 +1100 Subject: [PATCH 21/82] Discard changes to domains/_acme-challenge.katz.json --- domains/_acme-challenge.katz.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 domains/_acme-challenge.katz.json diff --git a/domains/_acme-challenge.katz.json b/domains/_acme-challenge.katz.json new file mode 100644 index 000000000..434720b24 --- /dev/null +++ b/domains/_acme-challenge.katz.json @@ -0,0 +1,11 @@ +{ + "owner": { + "username": "Bananalolok", + "email": "", + "discord": "bananalol7678" + }, + + "record": { + "CNAME": "77c60266e3d311053d5b2fe1._acme.deno.dev" + } +} From 3f3e5c7972f13af78eb66388c992159cd0554621 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:31 +1100 Subject: [PATCH 22/82] Discard changes to domains/_acme-challenge.oioioi.json --- domains/_acme-challenge.oioioi.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/_acme-challenge.oioioi.json diff --git a/domains/_acme-challenge.oioioi.json b/domains/_acme-challenge.oioioi.json new file mode 100644 index 000000000..1bb254789 --- /dev/null +++ b/domains/_acme-challenge.oioioi.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "VaibhavSys", + "email": "vaibhavsys@protonmail.com" + }, + "record": { + "CNAME": "b00be066-ce45-455f-bb4a-de9f6dc14e0c.acmedns.infinityfree.net" + } +} From d4476683d774bc5f45a6681d8105f283ec225262 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:35 +1100 Subject: [PATCH 23/82] Discard changes to domains/_acme-challenge.parrot.json --- domains/_acme-challenge.parrot.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/_acme-challenge.parrot.json diff --git a/domains/_acme-challenge.parrot.json b/domains/_acme-challenge.parrot.json new file mode 100644 index 000000000..4e34f2525 --- /dev/null +++ b/domains/_acme-challenge.parrot.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "EducatedSuddenBucket", + "email": "", + "discord": "1167825360151380032", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" + }, + + "record": { + "CNAME": "51de1eeaf31ce67a1c3f69aa._acme.deno.dev" + } + } + From 1ce2e508f51f879fb62068ac3c027957fdc2e182 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:40 +1100 Subject: [PATCH 24/82] Discard changes to domains/_acme-challenge.raafey.json --- domains/_acme-challenge.raafey.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/_acme-challenge.raafey.json diff --git a/domains/_acme-challenge.raafey.json b/domains/_acme-challenge.raafey.json new file mode 100644 index 000000000..59d86c9fe --- /dev/null +++ b/domains/_acme-challenge.raafey.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "RaafeyRaza", + "email": "raafeyraza1@gmail.com" + }, + "record": { + "CNAME": "dc6fbbae-3aba-4a5d-9741-4b7a386b9151.acmedns.infinityfree.net" + } +} From 3b5a92b0c3e870edcb34f2f646a8706387ac90c7 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 13:16:43 +1100 Subject: [PATCH 25/82] Discard changes to domains/_acme-challenge.us.mcstatus.json --- domains/_acme-challenge.us.mcstatus.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/_acme-challenge.us.mcstatus.json diff --git a/domains/_acme-challenge.us.mcstatus.json b/domains/_acme-challenge.us.mcstatus.json new file mode 100644 index 000000000..55ec2e523 --- /dev/null +++ b/domains/_acme-challenge.us.mcstatus.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "EducatedSuddenBucket", + "email": "", + "discord": "1167825360151380032", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.guUEvTOIBPJv8oJfvZdvgudRQpsBlIxnKLhef83On6LPv7t8yR4GXWxwwRWUmwlpsPJBLJBSzV1AZS26i7dgezj5k4-gfQdhr1ZKUz_w5T7JgQ9MIbWeOo5ocEMcMjmkC6WLesVMwH5cfCoOJeW097Gr6of_60Jt1JcpyNRX3s5zySh9cVb1p3_II0jrPbQ1Nj8ZqwNJhiRNT8xCdHt1cfsYi76RgFRx2iTsYbEmL0v933CCeqD75aYnlVmCqyKD-dv41QBhuq9dfUwKnJusArtxtbNC9h4EwX2Y9MnoIg7nKKLrOSllSS8tRIiVw2oHv_jHm3XRJascmoni2EzdmA.5waf0tgo5uTY4rjfw8gJUA.O0wUU5TTcpQ_8wkwEeKUsSX6wKEtwVZ-G0k1R0zjhAU9hXsii5BiittxlrdR2JKP_917n2rUCN7NKnYAFIg5acwvJS8NmZlvNcTIRxb_yFmC7fRfQ6RqXGkYjc0EEDWS.bxYmFS-IlttaZTgqdZdnHQ" + }, + + "record": { + "CNAME": "e6797667cd820de372823eb4._acme.deno.dev" + } + } + \ No newline at end of file From 27c489888f7e04030ac38dcf781b42cd56d7bd8e Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 10:40:35 +0800 Subject: [PATCH 26/82] Update william.json --- domains/william.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domains/william.json b/domains/william.json index 2f3788f33..0dc69e1cc 100644 --- a/domains/william.json +++ b/domains/william.json @@ -1,10 +1,10 @@ { "owner": { "username": "wdhdev", - "email": "william@m.is-a.dev" + "email": "william@is-a.dev" }, "record": { - "CNAME": "hrsn.dev" + "NS": ["chuck.ns.cloudflare.com", "walk.ns.cloudflare.com"] } } From a21df76705f2c86e3cf296fab60fa88cf9663173 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 10:47:11 +0800 Subject: [PATCH 27/82] Update _github-pages-challenge-wdhdev.william.json --- domains/_github-pages-challenge-wdhdev.william.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/_github-pages-challenge-wdhdev.william.json b/domains/_github-pages-challenge-wdhdev.william.json index f9c6ef5ea..1e95f51b3 100644 --- a/domains/_github-pages-challenge-wdhdev.william.json +++ b/domains/_github-pages-challenge-wdhdev.william.json @@ -1,7 +1,7 @@ { "owner": { "username": "wdhdev", - "email": "william@m.is-a.dev" + "email": "william@is-a.dev" }, "record": { From 9e601857054a76fd83cc400930bbc53b34bd73c2 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 10:48:52 +0800 Subject: [PATCH 28/82] Update validate.yml --- .github/workflows/validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index b49211b69..9f45e5b0d 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -40,4 +40,4 @@ jobs: with: pattern: "\\.json$" env: - BASE: "domains/" \ No newline at end of file + BASE: "domains/" From 7ad328eea5857402a7a07d2c0035bf250249fda7 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 10:50:40 +0800 Subject: [PATCH 29/82] Update dnsconfig.js --- dnsconfig.js | 198 +++++++++++++++++++++++++++------------------------ 1 file changed, 103 insertions(+), 95 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 58bf90b84..ab57a4689 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -2,128 +2,136 @@ var regNone = NewRegistrar("none"); var providerCf = DnsProvider(NewDnsProvider("cloudflare")); var proxy = { - on: { "cloudflare_proxy": "on" }, - off: { "cloudflare_proxy": "off" } -} + on: { cloudflare_proxy: "on" }, + off: { cloudflare_proxy: "off" }, +}; 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 name = files[i].split('.').slice(0, -1).join('.'); + for (var i = 0; i < files.length; i++) { + var name = files[i].split(".").slice(0, -1).join("."); - result.push({ name: name, data: require(files[i]) }); - } + result.push({ name: name, data: require(files[i]) }); + } - return result; + return result; } -var domains = getDomainsList('./domains'); +var domains = getDomainsList("./domains"); var commit = {}; for (var idx in domains) { - var domainName = "is-a.dev"; - var subdomainName = domains[idx].name; - var domainData = domains[idx].data; - var proxyState = proxy.on; // enabled by default + var domainName = "is-a.dev"; + var subdomainName = domains[idx].name; + var domainData = domains[idx].data; + var proxyState = proxy.on; // enabled by default - if (!commit[domainName]) { - commit[domainName] = []; - } - - if (domainData.proxied === false) { - proxyState = proxy.off; - } - - // Handle A records - if (domainData.record.A) { - for (var a in domainData.record.A) { - commit[domainName].push( - A(subdomainName, IP(domainData.record.A[a]), proxyState) - ); + if (!commit[domainName]) { + commit[domainName] = []; } - } - // Handle AAAA records - if (domainData.record.AAAA) { - for (var aaaa in domainData.record.AAAA) { - commit[domainName].push( - AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState) - ); + if (domainData.proxied === false) { + proxyState = proxy.off; } - } - // Handle CAA records - if (domainData.record.CAA) { - for (var caa in domainData.record.CAA) { - var caaRecord = domainData.record.CAA[caa]; - commit[domainName].push( - CAA(subdomainName, caaRecord.flags, caaRecord.tag, caaRecord.value) - ); + // Handle A records + if (domainData.record.A) { + for (var a in domainData.record.A) { + commit[domainName].push( + A(subdomainName, IP(domainData.record.A[a]), proxyState), + ); + } } - } - // Handle CNAME records - if (domainData.record.CNAME) { - commit[domainName].push( - CNAME(subdomainName, domainData.record.CNAME + ".", proxyState) - ); - } - - // Handle MX records - if (domainData.record.MX) { - for (var mx in domainData.record.MX) { - commit[domainName].push( - MX(subdomainName, 10, domainData.record.MX[mx] + ".") - ); + // Handle AAAA records + if (domainData.record.AAAA) { + for (var aaaa in domainData.record.AAAA) { + commit[domainName].push( + AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState), + ); + } } - } - // Handle NS records - if (domainData.record.NS) { - for (var ns in domainData.record.NS) { - commit[domainName].push( - NS(subdomainName, domainData.record.NS[ns] + ".") - ); + // Handle CAA records + if (domainData.record.CAA) { + for (var caa in domainData.record.CAA) { + var caaRecord = domainData.record.CAA[caa]; + commit[domainName].push( + CAA( + subdomainName, + caaRecord.flags, + caaRecord.tag, + caaRecord.value, + ), + ); + } } - } - // Handle SRV records - if (domainData.record.SRV) { - for (var srv in domainData.record.SRV) { - var srvRecord = domainData.record.SRV[srv]; - commit[domainName].push( - SRV(subdomainName, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") - ); - } - } - - // Handle TXT records - if (domainData.record.TXT) { - if (Array.isArray(domainData.record.TXT)) { - for (var txt in domainData.record.TXT) { + // Handle CNAME records + if (domainData.record.CNAME) { commit[domainName].push( - TXT(subdomainName, domainData.record.TXT[txt]) + CNAME(subdomainName, domainData.record.CNAME + ".", proxyState), ); - } - } else { - commit[domainName].push( - TXT(subdomainName, domainData.record.TXT) - ); } - } - // Handle URL records - // Note: URL records are not actual DNS records, we have a server configured to support them instead. - if (domainData.record.URL) { - commit[domainName].push( - A(subdomainName, "192.0.2.1", proxy.on) - ); - } + // Handle MX records + if (domainData.record.MX) { + for (var mx in domainData.record.MX) { + commit[domainName].push( + MX(subdomainName, 10, domainData.record.MX[mx] + "."), + ); + } + } + + // Handle NS records + if (domainData.record.NS) { + for (var ns in domainData.record.NS) { + commit[domainName].push( + NS(subdomainName, domainData.record.NS[ns] + "."), + ); + } + } + + // Handle SRV records + if (domainData.record.SRV) { + for (var srv in domainData.record.SRV) { + var srvRecord = domainData.record.SRV[srv]; + commit[domainName].push( + SRV( + subdomainName, + srvRecord.priority, + srvRecord.weight, + srvRecord.port, + srvRecord.target + ".", + ), + ); + } + } + + // Handle TXT records + if (domainData.record.TXT) { + if (Array.isArray(domainData.record.TXT)) { + for (var txt in domainData.record.TXT) { + commit[domainName].push( + TXT(subdomainName, domainData.record.TXT[txt]), + ); + } + } else { + commit[domainName].push(TXT(subdomainName, domainData.record.TXT)); + } + } + + // Handle URL records + // Note: URL records are not actual DNS records, we have a server configured to support them instead. + if (domainData.record.URL) { + // Use 192.0.2.1 until server is deployed. + commit[domainName].push(A(subdomainName, "192.0.2.1", proxy.on)); + } } // Commit all DNS records for (var domainName in commit) { - D(domainName, regNone, providerCf, commit[domainName]); + D(domainName, regNone, providerCf, commit[domainName]); } From 0c88ce420fe43a06c7583cd2b9a652601b8098e3 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 10:51:38 +0800 Subject: [PATCH 30/82] Delete zone.js --- zone.js | 129 -------------------------------------------------------- 1 file changed, 129 deletions(-) delete mode 100644 zone.js diff --git a/zone.js b/zone.js deleted file mode 100644 index fb49a395b..000000000 --- a/zone.js +++ /dev/null @@ -1,129 +0,0 @@ -const fs = require('fs'); // Required for writing JSON to file - -var proxy = { - on: { "cloudflare_proxy": "on" }, - off: { "cloudflare_proxy": "off" } -}; - -// Function to validate filenames according to the given rules -function isValidFilename(filename) { - var regex = /^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)*\.json$/; - return regex.test(filename); -} - -// Function to get the domains list from the domains folder -function getDomainsList(filesPath) { - 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]; - - if (!isValidFilename(basename)) { - console.log(`Skipping invalid file: ${basename}`); - continue; - } - - var name = basename.split('.')[0]; - result.push({ name: name, data: require(files[i]) }); - } - - return result; -} - -var domains = getDomainsList('./domains'); -var zoneFile = {}; // JSON object to hold all the DNS records - -for (var idx in domains) { - var domainData = domains[idx].data; - var proxyState = proxy.on; // enabled by default - - // Initialize the domain entry in the zone file if not already there - if (!zoneFile[domainData.record.domain]) { - zoneFile[domainData.record.domain] = []; - } - - // Check if proxy should be turned off - if (domainData.record.proxied === false) { - proxyState = proxy.off; - } - - // Handle CNAME record - if (domainData.record.CNAME) { - zoneFile[domainData.record.domain].push({ - type: "CNAME", - subdomain: domainData.subdomain, - value: domainData.record.CNAME + ".", - proxy: proxyState - }); - } - - // Handle A records - if (domainData.record.A) { - for (var a in domainData.record.A) { - zoneFile[domainData.record.domain].push({ - type: "A", - subdomain: domainData.subdomain, - value: domainData.record.A[a], - proxy: proxyState - }); - } - } - - // Handle AAAA records - if (domainData.record.AAAA) { - for (var aaaa in domainData.record.AAAA) { - zoneFile[domainData.record.domain].push({ - type: "AAAA", - subdomain: domainData.subdomain, - value: domainData.record.AAAA[aaaa], - proxy: proxyState - }); - } - } - - // Handle MX records - if (domainData.record.MX) { - for (var mx in domainData.record.MX) { - zoneFile[domainData.record.domain].push({ - type: "MX", - subdomain: domainData.subdomain, - value: domainData.record.MX[mx] + ".", - priority: 10 - }); - } - } - - // Handle URL records (redirect) - if (domainData.record.URL) { - zoneFile[domainData.record.domain].push({ - type: "URL", - subdomain: domainData.subdomain, - value: domainData.record.URL - }); - } - - // Handle TXT records - if (domainData.record.TXT) { - if (Array.isArray(domainData.record.TXT)) { - for (var txt in domainData.record.TXT) { - zoneFile[domainData.record.domain].push({ - type: "TXT", - subdomain: domainData.subdomain, - value: domainData.record.TXT[txt] - }); - } - } else { - zoneFile[domainData.record.domain].push({ - type: "TXT", - subdomain: domainData.subdomain, - value: domainData.record.TXT - }); - } - } -} - -// Write the JSON zone file to disk -fs.writeFileSync('zoneFile.json', JSON.stringify(zoneFile, null, 2), 'utf-8'); - -console.log("Zone file has been written to zoneFile.json"); From 0eda17df9bb50dac9b889de3cf3a38195d6f7740 Mon Sep 17 00:00:00 2001 From: orangc Date: Thu, 17 Oct 2024 10:49:58 +0300 Subject: [PATCH 31/82] Update c.json to use NS --- domains/c.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/c.json b/domains/c.json index da3053a49..d0d37c30b 100644 --- a/domains/c.json +++ b/domains/c.json @@ -5,6 +5,6 @@ "email": "orangc@proton.me" }, "record": { - "CNAME": "edge.redirect.pizza" + "NS": "nucum.ns.cloudflare.com" } } From 631b8db8e3a82f46adf7bc33c31ee48b63875a3f Mon Sep 17 00:00:00 2001 From: orangc Date: Thu, 17 Oct 2024 10:51:30 +0300 Subject: [PATCH 32/82] Update orangc.json to use NS --- domains/orangc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/orangc.json b/domains/orangc.json index da3053a49..d0d37c30b 100644 --- a/domains/orangc.json +++ b/domains/orangc.json @@ -5,6 +5,6 @@ "email": "orangc@proton.me" }, "record": { - "CNAME": "edge.redirect.pizza" + "NS": "nucum.ns.cloudflare.com" } } From 6f8dd0cef57d525b157059339533590f5ec295b0 Mon Sep 17 00:00:00 2001 From: orangc Date: Thu, 17 Oct 2024 10:53:02 +0300 Subject: [PATCH 33/82] Update orangc.json --- domains/orangc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/orangc.json b/domains/orangc.json index d0d37c30b..8fdc0ccc6 100644 --- a/domains/orangc.json +++ b/domains/orangc.json @@ -5,6 +5,6 @@ "email": "orangc@proton.me" }, "record": { - "NS": "nucum.ns.cloudflare.com" + "NS": ["nucum.ns.cloudflare.com", "tate.ns.cloudflare.com"] } } From 35dc44652d94746a62aa2dd69e228757e9f7442e Mon Sep 17 00:00:00 2001 From: orangc Date: Thu, 17 Oct 2024 10:53:27 +0300 Subject: [PATCH 34/82] Update c.json --- domains/c.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/c.json b/domains/c.json index d0d37c30b..8fdc0ccc6 100644 --- a/domains/c.json +++ b/domains/c.json @@ -5,6 +5,6 @@ "email": "orangc@proton.me" }, "record": { - "NS": "nucum.ns.cloudflare.com" + "NS": ["nucum.ns.cloudflare.com", "tate.ns.cloudflare.com"] } } From 5a3bac735ae349e96904539b554c84fcc7cc9c99 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 15:55:45 +0800 Subject: [PATCH 35/82] Update dnsconfig.js --- dnsconfig.js | 48 ++++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index ab57a4689..81c846dcf 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -2,16 +2,16 @@ var regNone = NewRegistrar("none"); var providerCf = DnsProvider(NewDnsProvider("cloudflare")); var proxy = { - on: { cloudflare_proxy: "on" }, - off: { cloudflare_proxy: "off" }, -}; + on: { "cloudflare_proxy": "on" }, + off: { "cloudflare_proxy": "off" } +} function getDomainsList(filesPath) { var result = []; - var files = glob.apply(null, [filesPath, true, ".json"]); + var files = glob.apply(null, [filesPath, true, '.json']); for (var i = 0; i < files.length; i++) { - var name = files[i].split(".").slice(0, -1).join("."); + var name = files[i].split('.').slice(0, -1).join('.'); result.push({ name: name, data: require(files[i]) }); } @@ -19,7 +19,7 @@ function getDomainsList(filesPath) { return result; } -var domains = getDomainsList("./domains"); +var domains = getDomainsList('./domains'); var commit = {}; for (var idx in domains) { @@ -40,7 +40,7 @@ for (var idx in domains) { if (domainData.record.A) { for (var a in domainData.record.A) { commit[domainName].push( - A(subdomainName, IP(domainData.record.A[a]), proxyState), + A(subdomainName, IP(domainData.record.A[a]), proxyState) ); } } @@ -49,7 +49,7 @@ for (var idx in domains) { if (domainData.record.AAAA) { for (var aaaa in domainData.record.AAAA) { commit[domainName].push( - AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState), + AAAA(subdomainName, domainData.record.AAAA[aaaa], proxyState) ); } } @@ -59,12 +59,7 @@ for (var idx in domains) { for (var caa in domainData.record.CAA) { var caaRecord = domainData.record.CAA[caa]; commit[domainName].push( - CAA( - subdomainName, - caaRecord.flags, - caaRecord.tag, - caaRecord.value, - ), + CAA(subdomainName, caaRecord.flags, caaRecord.tag, caaRecord.value) ); } } @@ -72,7 +67,7 @@ for (var idx in domains) { // Handle CNAME records if (domainData.record.CNAME) { commit[domainName].push( - CNAME(subdomainName, domainData.record.CNAME + ".", proxyState), + CNAME(subdomainName, domainData.record.CNAME + ".", proxyState) ); } @@ -80,7 +75,7 @@ for (var idx in domains) { if (domainData.record.MX) { for (var mx in domainData.record.MX) { commit[domainName].push( - MX(subdomainName, 10, domainData.record.MX[mx] + "."), + MX(subdomainName, 10, domainData.record.MX[mx] + ".") ); } } @@ -89,7 +84,7 @@ for (var idx in domains) { if (domainData.record.NS) { for (var ns in domainData.record.NS) { commit[domainName].push( - NS(subdomainName, domainData.record.NS[ns] + "."), + NS(subdomainName, domainData.record.NS[ns] + ".") ); } } @@ -99,13 +94,7 @@ for (var idx in domains) { for (var srv in domainData.record.SRV) { var srvRecord = domainData.record.SRV[srv]; commit[domainName].push( - SRV( - subdomainName, - srvRecord.priority, - srvRecord.weight, - srvRecord.port, - srvRecord.target + ".", - ), + SRV(subdomainName, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") ); } } @@ -115,19 +104,22 @@ for (var idx in domains) { if (Array.isArray(domainData.record.TXT)) { for (var txt in domainData.record.TXT) { commit[domainName].push( - TXT(subdomainName, domainData.record.TXT[txt]), + TXT(subdomainName, domainData.record.TXT[txt]) ); } } else { - commit[domainName].push(TXT(subdomainName, domainData.record.TXT)); + commit[domainName].push( + TXT(subdomainName, domainData.record.TXT) + ); } } // Handle URL records // Note: URL records are not actual DNS records, we have a server configured to support them instead. if (domainData.record.URL) { - // Use 192.0.2.1 until server is deployed. - commit[domainName].push(A(subdomainName, "192.0.2.1", proxy.on)); + commit[domainName].push( + A(subdomainName, "192.0.2.1", proxy.on) + ); } } From 7846887cad0a63e96304a06f0892f95e706c9a96 Mon Sep 17 00:00:00 2001 From: Stef_DP Date: Thu, 17 Oct 2024 10:10:28 +0200 Subject: [PATCH 36/82] Update stefdp.json --- domains/stefdp.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/domains/stefdp.json b/domains/stefdp.json index d301d97a5..9fe3d2b01 100644 --- a/domains/stefdp.json +++ b/domains/stefdp.json @@ -6,10 +6,9 @@ "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" }, "record": { - "A": [ - "194.60.201.37" - ], - "MX": ["mail.stefdp.lol"], - "TXT": ["v=spf1 mx ~all"] + "NS": [ + "jonah.ns.cloudflare.com", + "mary.ns.cloudflare.com" + ] } } From 37e4dba5948387797ad501a6c3ca9d3f78b920c0 Mon Sep 17 00:00:00 2001 From: om Date: Thu, 17 Oct 2024 13:42:18 +0530 Subject: [PATCH 37/82] add NS for om.is-a.dev --- domains/om.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/domains/om.json b/domains/om.json index 9eef67dec..1f097dafd 100644 --- a/domains/om.json +++ b/domains/om.json @@ -5,7 +5,6 @@ "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" }, "record": { - "MX": ["mx.zoho.in", "mx2.zoho.in", "mx3.zoho.in"], - "TXT": "v=spf1 include:zoho.in ~all" + "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"] } } From 87851a71372033691ae2990662987c25fe59fda5 Mon Sep 17 00:00:00 2001 From: om Date: Thu, 17 Oct 2024 13:46:17 +0530 Subject: [PATCH 38/82] add NS for o.is-a.dev --- domains/o.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/domains/o.json b/domains/o.json index b08792abe..1f097dafd 100644 --- a/domains/o.json +++ b/domains/o.json @@ -1,13 +1,10 @@ { "owner": { "username": "omsenjalia", - "email": "om@maintainers.is-a.dev" + "email": "", + "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" }, "record": { - "MX": [ - "mx1.improvmx.com", - "mx2.improvmx.com" - ], - "TXT": "v=spf1 include:spf.improvmx.com ~all" + "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"] } } From 24ce4db887e08d4636ccf1474e7beac30a01176c Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 19:26:16 +1100 Subject: [PATCH 39/82] updates --- MAINTAINERS.md | 1 - dnsconfig.js | 9 ++------ domains/@.json | 21 ++++++++++++++++--- ...-is-a-dev-o.m.json => _gh-is-a-dev-o.json} | 2 +- domains/_gh-is-a-dev-o.www.json | 10 --------- domains/_github-challenge-is-a-dev-org.json | 10 --------- ...github-pages-challenge-is-a-dev.docs.json} | 20 +++++++++--------- domains/discord.json | 4 ++-- domains/docs.json | 2 +- domains/m.json | 10 --------- domains/maintainers.json | 10 --------- domains/manage.json | 10 --------- domains/privacy.json | 9 -------- domains/redirect.json | 9 -------- domains/register.json | 10 --------- domains/www.json | 4 +--- 16 files changed, 35 insertions(+), 106 deletions(-) rename domains/{_gh-is-a-dev-o.m.json => _gh-is-a-dev-o.json} (77%) delete mode 100644 domains/_gh-is-a-dev-o.www.json delete mode 100644 domains/_github-challenge-is-a-dev-org.json rename domains/{_gh-is-a-dev-o.maintainers.json => _github-pages-challenge-is-a-dev.docs.json} (61%) delete mode 100644 domains/m.json delete mode 100644 domains/maintainers.json delete mode 100644 domains/manage.json delete mode 100644 domains/privacy.json delete mode 100644 domains/redirect.json delete mode 100644 domains/register.json diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 071673ba9..cb300be61 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -6,7 +6,6 @@ | CuteDog5695 | [@CuteDog5695](https://github.com/CuteDog5695) | Maintainer | | Daniel | [@hackermondev](https://github.com/hackermondev) | Maintainer | | DIBSTER | [@DEV-DIBSTER](https://github.com/DEV-DIBSTER) | Maintainer | -| MaskDuck | [@MaskDuck](https://github.com/MaskDuck) | Maintainer | | Om | [@omsenjalia](https://github.com/omsenjalia) | Maintainer | | orangc | [@orxngc](https://github.com/orxngc) | Maintainer | | Stef | [@Stef-00012](https://github.com/Stef-00012) | Maintainer | diff --git a/dnsconfig.js b/dnsconfig.js index 81c846dcf..ee1d9c8eb 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -28,13 +28,8 @@ for (var idx in domains) { var domainData = domains[idx].data; var proxyState = proxy.on; // enabled by default - if (!commit[domainName]) { - commit[domainName] = []; - } - - if (domainData.proxied === false) { - proxyState = proxy.off; - } + if (!commit[domainName]) commit[domainName] = []; + if (!domainData.proxied) proxyState = proxy.off; // Handle A records if (domainData.record.A) { diff --git a/domains/@.json b/domains/@.json index 4fe4c1133..0495405b7 100644 --- a/domains/@.json +++ b/domains/@.json @@ -1,11 +1,26 @@ { - "description": "The root domain for is-a.dev website", - "repo": "https://github.com/is-a-dev/is-a-dev.github.io", "owner": { "username": "is-a-dev", "email": "" }, "record": { - "URL": "http://www.is-a.dev" + "A": [ + "185.199.108.153", + "185.199.109.153", + "185.199.110.153", + "185.199.111.153" + ], + "AAAA": [ + "2606:50c0:8000::153", + "2606:50c0:8001::153", + "2606:50c0:8002::153", + "2606:50c0:8003::153" + ], + "MX": [ + "route1.mx.cloudflare.net", + "route2.mx.cloudflare.net", + "route3.mx.cloudflare.net" + ], + "TXT": "v=spf1 include:_spf.mx.cloudflare.net ~all" } } diff --git a/domains/_gh-is-a-dev-o.m.json b/domains/_gh-is-a-dev-o.json similarity index 77% rename from domains/_gh-is-a-dev-o.m.json rename to domains/_gh-is-a-dev-o.json index e7af9390b..804fb9f73 100644 --- a/domains/_gh-is-a-dev-o.m.json +++ b/domains/_gh-is-a-dev-o.json @@ -5,6 +5,6 @@ }, "record": { - "TXT": "e0ffcded3e" + "TXT": "9ac06a2c1c" } } diff --git a/domains/_gh-is-a-dev-o.www.json b/domains/_gh-is-a-dev-o.www.json deleted file mode 100644 index a93e75f33..000000000 --- a/domains/_gh-is-a-dev-o.www.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "1259c184c5" - } -} diff --git a/domains/_github-challenge-is-a-dev-org.json b/domains/_github-challenge-is-a-dev-org.json deleted file mode 100644 index d9ade36b1..000000000 --- a/domains/_github-challenge-is-a-dev-org.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "2c9dfbe7c8" - } -} diff --git a/domains/_gh-is-a-dev-o.maintainers.json b/domains/_github-pages-challenge-is-a-dev.docs.json similarity index 61% rename from domains/_gh-is-a-dev-o.maintainers.json rename to domains/_github-pages-challenge-is-a-dev.docs.json index e381c3c8c..65e45a0f8 100644 --- a/domains/_gh-is-a-dev-o.maintainers.json +++ b/domains/_github-pages-challenge-is-a-dev.docs.json @@ -1,10 +1,10 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "7b45eb688b" - } -} +{ + "owner": { + "username": "is-a-dev", + "email": "" + }, + + "record": { + "TXT": "c5409850ced5dfc8fb88283246972e" + } +} diff --git a/domains/discord.json b/domains/discord.json index 656c64a52..8020b2f1b 100644 --- a/domains/discord.json +++ b/domains/discord.json @@ -1,9 +1,9 @@ { "owner": { "username": "is-a-dev", - "email": "m@is-a.dev" + "email": "" }, "record": { - "CNAME": "edge.redirect.pizza" + "URL": "https://discord.gg/is-a-dev-830872854677422150" } } diff --git a/domains/docs.json b/domains/docs.json index 946773150..51b50f786 100644 --- a/domains/docs.json +++ b/domains/docs.json @@ -6,6 +6,6 @@ "email": "" }, "record": { - "URL": "https://www.is-a.dev/docs" + "CNAME": "is-a.dev" } } diff --git a/domains/m.json b/domains/m.json deleted file mode 100644 index ce1ab1851..000000000 --- a/domains/m.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "MX": ["mail.hrsn.net"], - "TXT": "v=spf1 include:_spf.hrsn.net ~all" - } -} diff --git a/domains/maintainers.json b/domains/maintainers.json deleted file mode 100644 index ce1ab1851..000000000 --- a/domains/maintainers.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "MX": ["mail.hrsn.net"], - "TXT": "v=spf1 include:_spf.hrsn.net ~all" - } -} diff --git a/domains/manage.json b/domains/manage.json deleted file mode 100644 index f27db0ab3..000000000 --- a/domains/manage.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "URL": "https://github.com/is-a-dev/register" - } -} diff --git a/domains/privacy.json b/domains/privacy.json deleted file mode 100644 index 6f3b6f9c6..000000000 --- a/domains/privacy.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "URL": "https://owl.is-a.dev" - } -} diff --git a/domains/redirect.json b/domains/redirect.json deleted file mode 100644 index 8b7a9f235..000000000 --- a/domains/redirect.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "TXT": "RESERVED FOR REDIRECT URLS" - } -} diff --git a/domains/register.json b/domains/register.json deleted file mode 100644 index f27db0ab3..000000000 --- a/domains/register.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "URL": "https://github.com/is-a-dev/register" - } -} diff --git a/domains/www.json b/domains/www.json index af576c718..d41bee02d 100644 --- a/domains/www.json +++ b/domains/www.json @@ -1,11 +1,9 @@ { - "description": "The is-a.dev website", - "repo": "https://github.com/is-a-dev/is-a-dev.github.io", "owner": { "username": "is-a-dev", "email": "" }, "record": { - "CNAME": "is-a-dev.github.io" + "CNAME": "is-a.dev" } } From eb6e3df7bb572038baaf25e00d00e0bd95b9515c Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 19:30:08 +1100 Subject: [PATCH 40/82] more updates --- .eslintrc.json | 31 ------------------------------- .github/CODEOWNERS | 2 +- .gitignore | 4 ---- README.md | 2 +- SECURITY.md | 2 +- domains/_dmarc.json | 9 +++++++++ domains/_psl.json | 4 ++-- 7 files changed, 14 insertions(+), 40 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 .gitignore create mode 100644 domains/_dmarc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index b35636417..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": [ - "eslint:recommended", - "plugin:node/recommended", - "plugin:json/recommended" - ], - "parserOptions": { - "ecmaVersion": 2020 - }, - "rules": { - "indent": ["error", 2], - "max-len": ["error", { - "code": 100, - "ignoreStrings": true, - "ignoreTemplateLiterals": true, - "ignoreTrailingComments": true - }], - "node/exports-style": ["error", "module.exports"], - "node/file-extension-in-import": ["error", "always"], - "node/prefer-global/buffer": ["error", "always"], - "node/prefer-global/console": ["error", "always"], - "node/prefer-global/process": ["error", "always"], - "node/prefer-global/url-search-params": ["error", "always"], - "node/prefer-global/url": ["error", "always"], - "node/prefer-promises/dns": "error", - "node/prefer-promises/fs": "error", - "no-process-exit": [0], - "node/no-unsupported-features/node-builtins": [0], - "node/no-unsupported-features/es-syntax": [0] - } -} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3747adddc..225185e50 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,6 +1,6 @@ * @phenax @wdhdev /.github/ @wdhdev -/domains/ @is-a-dev/maintainers @is-a-dev/trial-maintainers +/domains/ @is-a-dev/maintainers *.md @is-a-dev/maintainers diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 209d4adc4..000000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -*.env.production -*.log -is-a-dev-cert/ diff --git a/README.md b/README.md index 900c67950..638b18b5d 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Thank you for your co-operation. ## Issues If you have any problems, feel free to [open a issue](https://github.com/is-a-dev/register/issues/new/choose). -If you have an issue that contains confidental infomation, send an email to security@m.is-a.dev. +If you have an issue that contains confidental infomation, send an email to security@is-a.dev. ## Register ### Manual Registration diff --git a/SECURITY.md b/SECURITY.md index e6b236db7..4c96d8394 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -3,4 +3,4 @@ ## Reporting a vulnerability You can report low severity bugs as [issues](https://github.com/is-a-dev/register/issues/new/choose) on this repository. -However, for **higher severity vulnerabilities and bugs**, please email security@m.is-a.dev. +However, for **higher severity vulnerabilities and bugs**, please email security@is-a.dev. diff --git a/domains/_dmarc.json b/domains/_dmarc.json new file mode 100644 index 000000000..eb9be2da8 --- /dev/null +++ b/domains/_dmarc.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "is-a-dev", + "email": "" + }, + "record": { + "TXT": "v=DMARC1; p=reject; rua=mailto:b24ae2ebb6744451bec500b161916c03@dmarc-reports.cloudflare.net" + } +} diff --git a/domains/_psl.json b/domains/_psl.json index fd8db17bb..99f450e73 100644 --- a/domains/_psl.json +++ b/domains/_psl.json @@ -1,8 +1,8 @@ { - "description": "PSL validation record for is-a.dev", + "description": "PSL validation record", "owner": { "username": "is-a-dev", - "email": "phenax5@gmail.com" + "email": "" }, "record": { "TXT": "https://github.com/publicsuffix/list/pull/1949" From 1e18d259943b9573069f723594f68ee27ed0b357 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 19:32:32 +1100 Subject: [PATCH 41/82] add w.is-a.dev --- domains/w.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 domains/w.json diff --git a/domains/w.json b/domains/w.json new file mode 100644 index 000000000..7de0d3a5b --- /dev/null +++ b/domains/w.json @@ -0,0 +1,10 @@ +{ + "owner": { + "username": "wdhdev", + "email": "william@is-a.dev" + }, + + "record": { + "NS": ["chuck.ns.cloudflare.com", "walk.ns.cloudflare.com"] + } +} From 816750cbdbe415fe756c3d91f26e0d32b04182dc Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 19:43:56 +1100 Subject: [PATCH 42/82] move website to root --- README.md | 2 +- domains/docs.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 638b18b5d..349eca45a 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ If you have an issue that contains confidental infomation, send an email to secu - [Fork](https://github.com/is-a-dev/register/fork) and star this repository - Add a new file called `your-domain-name.json` in the `domains` folder to register `your-domain-name.is-a.dev` -- [Read the documentation](https://www.is-a.dev/docs) +- [Read the documentation](https://is-a.dev/docs) - Your pull request will be reviewed and merged. *Make sure to keep an eye on it incase we need you to make any changes!* - After the pull request is merged, please allow up to 24 hours for the changes to propagate - Enjoy your new `.is-a.dev` domain! diff --git a/domains/docs.json b/domains/docs.json index 51b50f786..e29fc733a 100644 --- a/domains/docs.json +++ b/domains/docs.json @@ -6,6 +6,6 @@ "email": "" }, "record": { - "CNAME": "is-a.dev" + "URL": "https://is-a.dev/docs" } } From 07af4ae55a88229b6ae6eea2ecdb5d2d29fdbe3c Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 16:44:36 +0800 Subject: [PATCH 43/82] Delete domains/_github-pages-challenge-is-a-dev.docs.json --- domains/_github-pages-challenge-is-a-dev.docs.json | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 domains/_github-pages-challenge-is-a-dev.docs.json diff --git a/domains/_github-pages-challenge-is-a-dev.docs.json b/domains/_github-pages-challenge-is-a-dev.docs.json deleted file mode 100644 index 65e45a0f8..000000000 --- a/domains/_github-pages-challenge-is-a-dev.docs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "c5409850ced5dfc8fb88283246972e" - } -} From 7b58ba835272d269f622603cd4fbed8816535618 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:17:30 +1100 Subject: [PATCH 44/82] delete nested subdomains of ns domains --- domains/_discord.api.stefdp.json | 11 ----------- domains/_discord.c.json | 10 ---------- domains/_discord.orangc.json | 10 ---------- domains/_discord.stefdp.json | 11 ----------- domains/_dmarc.om.json | 10 ---------- .../_github-pages-challenge-stef-00012.stefdp.json | 13 ------------- domains/_github-pages-challenge-wdhdev.william.json | 10 ---------- domains/api.spotify.stefdp.json | 12 ------------ domains/api.stefdp.json | 12 ------------ domains/choudery.json | 13 ------------- domains/dash.stefdp.json | 11 ----------- domains/data.om.json | 9 --------- domains/dkim._domainkey.om.json | 10 ---------- domains/dockge.stefdp.json | 12 ------------ domains/docs.stefdp.json | 11 ----------- domains/juniper.orangc.json | 10 ---------- domains/node.stefdp.json | 11 ----------- domains/ntfy.stefdp.json | 12 ------------ domains/panel.stefdp.json | 11 ----------- domains/portainer.stefdp.json | 12 ------------ domains/proxy.stefdp.json | 11 ----------- domains/spotify.stefdp.json | 11 ----------- domains/ss.stefdp.json | 12 ------------ domains/status.stefdp.json | 11 ----------- domains/tianji.stefdp.json | 11 ----------- domains/uptime.stefdp.json | 12 ------------ 26 files changed, 289 deletions(-) delete mode 100644 domains/_discord.api.stefdp.json delete mode 100644 domains/_discord.c.json delete mode 100644 domains/_discord.orangc.json delete mode 100644 domains/_discord.stefdp.json delete mode 100644 domains/_dmarc.om.json delete mode 100644 domains/_github-pages-challenge-stef-00012.stefdp.json delete mode 100644 domains/_github-pages-challenge-wdhdev.william.json delete mode 100644 domains/api.spotify.stefdp.json delete mode 100644 domains/api.stefdp.json delete mode 100644 domains/choudery.json delete mode 100644 domains/dash.stefdp.json delete mode 100644 domains/data.om.json delete mode 100644 domains/dkim._domainkey.om.json delete mode 100644 domains/dockge.stefdp.json delete mode 100644 domains/docs.stefdp.json delete mode 100644 domains/juniper.orangc.json delete mode 100644 domains/node.stefdp.json delete mode 100644 domains/ntfy.stefdp.json delete mode 100644 domains/panel.stefdp.json delete mode 100644 domains/portainer.stefdp.json delete mode 100644 domains/proxy.stefdp.json delete mode 100644 domains/spotify.stefdp.json delete mode 100644 domains/ss.stefdp.json delete mode 100644 domains/status.stefdp.json delete mode 100644 domains/tianji.stefdp.json delete mode 100644 domains/uptime.stefdp.json diff --git a/domains/_discord.api.stefdp.json b/domains/_discord.api.stefdp.json deleted file mode 100644 index b6e9ec775..000000000 --- a/domains/_discord.api.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "TXT": "dh=e71ddcd3beca6bbd44125eb4d861d4cf28eed0c8" - } -} diff --git a/domains/_discord.c.json b/domains/_discord.c.json deleted file mode 100644 index e0d3ad199..000000000 --- a/domains/_discord.c.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "orxngc", - "discord": "orangc", - "email": "orangc@proton.me" - }, - "record": { - "TXT": "dh=dff53e3c9534a4606fe07fef0142ab53acf4a0e4" - } -} diff --git a/domains/_discord.orangc.json b/domains/_discord.orangc.json deleted file mode 100644 index dcdfb506a..000000000 --- a/domains/_discord.orangc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "orxngc", - "discord": "orangc", - "email": "orangc@proton.me" - }, - "record": { - "TXT": "dh=d27c8c015aa5f1be96c0c468e091a0958dd1c1dc" - } -} diff --git a/domains/_discord.stefdp.json b/domains/_discord.stefdp.json deleted file mode 100644 index e0d13c96d..000000000 --- a/domains/_discord.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "TXT": "dh=f6d71b43aecaa5a4ea3534d21f11f6b0e4559d8a" - } -} diff --git a/domains/_dmarc.om.json b/domains/_dmarc.om.json deleted file mode 100644 index f3a7cf119..000000000 --- a/domains/_dmarc.om.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "omsenjalia", - "email": "", - "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" - }, - "record": { - "TXT": "v=DMARC1; p=quarantine; rua=mailto:omsenjalia@gmail.com; ruf=mailto:omsenjalia@gmail.com; sp=quarantine; adkim=r; aspf=r" - } -} diff --git a/domains/_github-pages-challenge-stef-00012.stefdp.json b/domains/_github-pages-challenge-stef-00012.stefdp.json deleted file mode 100644 index 372ad0c6d..000000000 --- a/domains/_github-pages-challenge-stef-00012.stefdp.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "TXT": [ - "27c2dc9cd3e8a0a37947e82ab6f637" - ] - } -} diff --git a/domains/_github-pages-challenge-wdhdev.william.json b/domains/_github-pages-challenge-wdhdev.william.json deleted file mode 100644 index 1e95f51b3..000000000 --- a/domains/_github-pages-challenge-wdhdev.william.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "wdhdev", - "email": "william@is-a.dev" - }, - - "record": { - "TXT": "6b3a5de4756e5840afc94698b74712" - } -} diff --git a/domains/api.spotify.stefdp.json b/domains/api.spotify.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/api.spotify.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/api.stefdp.json b/domains/api.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/api.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/choudery.json b/domains/choudery.json deleted file mode 100644 index e071797f1..000000000 --- a/domains/choudery.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "owner": { - "username": "Choudery", - "email": "blreaderdammy@gmail.com" - }, - "record": { - "MX": [ - "john.ns.cloudflare.com", - "sharon.ns.cloudflare.com" - ] - }, - "description": "Choudery coding" -} \ No newline at end of file diff --git a/domains/dash.stefdp.json b/domains/dash.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/dash.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/data.om.json b/domains/data.om.json deleted file mode 100644 index a55f3e7e8..000000000 --- a/domains/data.om.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "TerraPlayz", - "email": "omsenjalia+github@gmail.com" - }, - "record": { - "A": ["69.30.249.53"] - } -} diff --git a/domains/dkim._domainkey.om.json b/domains/dkim._domainkey.om.json deleted file mode 100644 index 110d3d905..000000000 --- a/domains/dkim._domainkey.om.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "omsenjalia", - "email": "", - "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" - }, - "record": { - "TXT": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApUFgIkG/8KdnGqL3WcvLCQFh/9q6DZ/PNTXErJOvEBbI1wjYLUeR/44tApOzj0pVqCG9sZ9zLariA6858kxKx0nW0YxRZDAbiUy90G5zP6xT7sHX1MyDiQdsc/1KTGnFsQKb7scdpmFWrRgRaU9V3+Apr3n6j9eX6ZytUsoWMCVAgUwCxNHXujy6xCTendN9yJGOPvHsedvnD0PNcYbbsstWKJ1/5mS+33Bqpb8m5x0r+i4cwUmsGkuNHcuvYzTaYXWz+ohdi369zvGkd22ZTcM0x6ygqUzmeO40OMxMa35bO5XWmc1vQDSV+zR71BzdxF38E+/nHEB/VJmNKKtt0QIDAQAB" - } -} diff --git a/domains/dockge.stefdp.json b/domains/dockge.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/dockge.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/docs.stefdp.json b/domains/docs.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/docs.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/juniper.orangc.json b/domains/juniper.orangc.json deleted file mode 100644 index 0c3b75689..000000000 --- a/domains/juniper.orangc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "orxngc", - "discord": "orangc", - "email": "orangc@proton.me" - }, - "record": { - "A": ["66.59.209.229"] - } -} diff --git a/domains/node.stefdp.json b/domains/node.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/node.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/ntfy.stefdp.json b/domains/ntfy.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/ntfy.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/panel.stefdp.json b/domains/panel.stefdp.json deleted file mode 100644 index 884b42e7a..000000000 --- a/domains/panel.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "A": ["194.60.201.37"] - } -} diff --git a/domains/portainer.stefdp.json b/domains/portainer.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/portainer.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/proxy.stefdp.json b/domains/proxy.stefdp.json deleted file mode 100644 index 884b42e7a..000000000 --- a/domains/proxy.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "A": ["194.60.201.37"] - } -} diff --git a/domains/spotify.stefdp.json b/domains/spotify.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/spotify.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/ss.stefdp.json b/domains/ss.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/ss.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/status.stefdp.json b/domains/status.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/status.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/tianji.stefdp.json b/domains/tianji.stefdp.json deleted file mode 100644 index 13881f84f..000000000 --- a/domains/tianji.stefdp.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} diff --git a/domains/uptime.stefdp.json b/domains/uptime.stefdp.json deleted file mode 100644 index 9f2b1dbbb..000000000 --- a/domains/uptime.stefdp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "Stef-00012", - "email": "", - "discord": "694986201739952229", - "github_id": 81536172, - "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.IpOYbPWBUcNp4Tgw32QASUSoI0QE_q5cFcyg6OXpDYy8Eg3QGBagIVG4mvt70DgnRFuK5IKE0NY9Bxr32RdWrBGDSUxlKtlJQ9WpQIkLV-I7A7F5Kym4QzM58anHX0fggGtzHi_TaXcZGI-1Rw0KMnaq91hHfnez4e3O_Q-Mf-SD55CPqwibG3YoXwWM-H3Q_iKWibEX5mzD1wppmT8IO_2lO5Ne1V8HKlZ5_SWd8t9JyEDB7CsGNcpTLnUMDwE67Pw_92FqU0iNDTwDKG7oZK1x4JG4rmZcvU0_CTOWW02TRWT_evf8XdAT9V6Me6OpCWvD1LlTgmdkYsResxTKxw.7rSUKyX20MsaT6H7mJFWJA.M-wdjyAOxmgWiRQbLzzMJDumoFfOzUYoXplEvrth469Ib361dIke2yOiFyk-PIMsds3-GQYnmujRqcn8wxzyKnaTapsC4g0aAit-DdtKv7s.iCc6o2XSd76RHqUN6a03og" - }, - "record": { - "CNAME": "proxy.stefdp.is-a.dev" - } -} From 4abeb11fa4be6469e7c431bc3a4fd6d709edf851 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:19:55 +1100 Subject: [PATCH 45/82] delete lingering acme records --- domains/_acme-challenge.juqwtf.json | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 domains/_acme-challenge.juqwtf.json diff --git a/domains/_acme-challenge.juqwtf.json b/domains/_acme-challenge.juqwtf.json deleted file mode 100644 index e8fc66acc..000000000 --- a/domains/_acme-challenge.juqwtf.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "owner": { - "username": "denboy0123", - "email": "pochtaproverka01@gmail.com" - }, - "record": { - "TXT": [ - "FZo9g0GqRYR-fhmWc1QzbycfV5UZIE4bwh42BI81NDQ", - "V1N8tuJvEcUtltxMXLRvP0U1_jaAgsSJJ89MgyxpWUk" - ] - } -} From 68384e1fb431d7bf68e8e4f750664bb4c1ba51f1 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 17 Oct 2024 13:11:08 +0300 Subject: [PATCH 46/82] Create potatoenergy.json --- domains/potatoenergy.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 domains/potatoenergy.json diff --git a/domains/potatoenergy.json b/domains/potatoenergy.json new file mode 100644 index 000000000..026dbe8d1 --- /dev/null +++ b/domains/potatoenergy.json @@ -0,0 +1,11 @@ +{ + "description": "Potato Energy Team Website Proxy", + "owner": { + "username": "ponfertato", + "email": "ponfertato@potatoenergy.ru" + "discord": "ponfertato", + }, + "record": { + "CNAME": "potatoenergy.ru" + } +} From 29d1cdc189861952242bb446c3e304090813c360 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 17 Oct 2024 13:20:12 +0300 Subject: [PATCH 47/82] Fix potatoenergy.json Oops... --- domains/potatoenergy.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domains/potatoenergy.json b/domains/potatoenergy.json index 026dbe8d1..38f1af671 100644 --- a/domains/potatoenergy.json +++ b/domains/potatoenergy.json @@ -2,8 +2,8 @@ "description": "Potato Energy Team Website Proxy", "owner": { "username": "ponfertato", - "email": "ponfertato@potatoenergy.ru" - "discord": "ponfertato", + "email": "ponfertato@potatoenergy.ru", + "discord": "ponfertato" }, "record": { "CNAME": "potatoenergy.ru" From 4437db7535529a69fc7f904bc6e7dd8fd7ac5206 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 18:26:04 +0800 Subject: [PATCH 48/82] Update _psl.json --- domains/_psl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/_psl.json b/domains/_psl.json index 99f450e73..79f23886c 100644 --- a/domains/_psl.json +++ b/domains/_psl.json @@ -5,6 +5,6 @@ "email": "" }, "record": { - "TXT": "https://github.com/publicsuffix/list/pull/1949" + "TXT": "https://github.com/publicsuffix/list/pull/2225" } } From d2685454faf13df326f9bd002cfa0200c2ea8d35 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 18:26:31 +0800 Subject: [PATCH 49/82] Update w.json --- domains/w.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/w.json b/domains/w.json index 7de0d3a5b..722adf218 100644 --- a/domains/w.json +++ b/domains/w.json @@ -5,6 +5,6 @@ }, "record": { - "NS": ["chuck.ns.cloudflare.com", "walk.ns.cloudflare.com"] + "URL": "https://william.is-a.dev" } } From 6dc65de528c81913d677dae3415b0cf8ce5d8b5a Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 18:32:34 +0800 Subject: [PATCH 50/82] Update dnsconfig.js --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index ee1d9c8eb..ad490b37d 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -11,7 +11,7 @@ function getDomainsList(filesPath) { var files = glob.apply(null, [filesPath, true, '.json']); for (var i = 0; i < files.length; i++) { - var name = files[i].split('.').slice(0, -1).join('.'); + var name = files[i].split('/').pop(); result.push({ name: name, data: require(files[i]) }); } From f93f784d4314f40162967ea1ff3b9f41b3968f0f Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 18:35:11 +0800 Subject: [PATCH 51/82] Update dnsconfig.js --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index ad490b37d..ecc1ea830 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -11,7 +11,7 @@ function getDomainsList(filesPath) { var files = glob.apply(null, [filesPath, true, '.json']); for (var i = 0; i < files.length; i++) { - var name = files[i].split('/').pop(); + var name = files[i].split('/').pop().replace(/\.json$/, ''); result.push({ name: name, data: require(files[i]) }); } From f09b13d11ee2e36df96b1d64fbacc27e78896153 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 22:27:01 +1100 Subject: [PATCH 52/82] fix stupid stuff stupid people approved smh --- domains/gauravgupta.json | 9 --------- domains/meywy.json | 4 ++-- domains/shockbs.json | 2 +- domains/sono.json | 2 +- 4 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 domains/gauravgupta.json diff --git a/domains/gauravgupta.json b/domains/gauravgupta.json deleted file mode 100644 index 571c2edf5..000000000 --- a/domains/gauravgupta.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "gauravgupta256", - "email": "gauravgupta8652@gmail.com" - }, - "record": { - "CNAME": "gauravgupta.is-a.dev" - } -} diff --git a/domains/meywy.json b/domains/meywy.json index 87a6c494e..4abdd5c12 100644 --- a/domains/meywy.json +++ b/domains/meywy.json @@ -8,8 +8,8 @@ }, "record": { "MX": [ - "mx1.improvmx.com.", - "mx2.improvmx.com." + "mx1.improvmx.com", + "mx2.improvmx.com" ], "TXT": "v=spf1 include:spf.improvmx.com ~all", "A": [ diff --git a/domains/shockbs.json b/domains/shockbs.json index 6174d5fce..3354c0d75 100644 --- a/domains/shockbs.json +++ b/domains/shockbs.json @@ -5,7 +5,7 @@ }, "record": { "A": ["76.76.21.21"], - "MX": ["mx1.improvmx.com","mx2.improvmx.com."], + "MX": ["mx1.improvmx.com","mx2.improvmx.com"], "TXT": "v=spf1 include:spf.improvmx.com ~all" } } diff --git a/domains/sono.json b/domains/sono.json index 626794992..246b44bcd 100644 --- a/domains/sono.json +++ b/domains/sono.json @@ -12,7 +12,7 @@ ], "MX": [ "mx1.improvmx.com", - "mx2.improvmx.com." + "mx2.improvmx.com" ], "TXT": [ "v=spf1 include:spf.improvmx.com ~all", From 6e48a071ca5347d5e617aadffb70c8421b11aaf5 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 19:28:03 +0800 Subject: [PATCH 53/82] Update README.md --- README.md | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/README.md b/README.md index 349eca45a..1cdb8598b 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,3 @@ -# Migration Downtime -Dear users, - -We are currently in the process of migrating our DNS services to Cloudflare, during this time there will be downtime for the entire is-a.dev domain as we migrate the zone file across. We understand your frustration with this, and we are working as fast as possible to get it migrated. - -**Do not expect any DNS records for any subdomain to resolve during this time.** - -No new pull requests will be merged either during the migration. - -Thank you for your co-operation. - -\- The is-a.dev Team - -*For any enquiries, please email william@williamharrison.dev or join the [Discord server](https://discord.gg/is-a-dev-830872854677422150) and ping or DM `@williamharrison`.* - ---- -

is-a.dev Banner

From d73d46d18f0ddcc508c7155d6916d47d7bfff506 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:04:48 +0800 Subject: [PATCH 54/82] Update dnsconfig.js --- dnsconfig.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index ecc1ea830..b703fac15 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -113,7 +113,8 @@ for (var idx in domains) { // Note: URL records are not actual DNS records, we have a server configured to support them instead. if (domainData.record.URL) { commit[domainName].push( - A(subdomainName, "192.0.2.1", proxy.on) + A(subdomainName, "45.85.238.5", proxy.on) + TXT("_redirect" + subdomainName, "v=txtv0;type=host;to=" + domainData.record.URL) ); } } From a8860b4fb95daf48009de4ab6621beea29221391 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:06:04 +0800 Subject: [PATCH 55/82] Update dnsconfig.js --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index b703fac15..a7dd902be 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -113,7 +113,7 @@ for (var idx in domains) { // Note: URL records are not actual DNS records, we have a server configured to support them instead. if (domainData.record.URL) { commit[domainName].push( - A(subdomainName, "45.85.238.5", proxy.on) + A(subdomainName, "45.85.238.5", proxy.on), TXT("_redirect" + subdomainName, "v=txtv0;type=host;to=" + domainData.record.URL) ); } From 1747685abf4bf9085ee4c4fe9cc552737e217828 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:08:02 +0800 Subject: [PATCH 56/82] Update dnsconfig.js --- dnsconfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnsconfig.js b/dnsconfig.js index a7dd902be..f22a4219a 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -114,7 +114,7 @@ for (var idx in domains) { if (domainData.record.URL) { commit[domainName].push( A(subdomainName, "45.85.238.5", proxy.on), - TXT("_redirect" + subdomainName, "v=txtv0;type=host;to=" + domainData.record.URL) + TXT("_redirect." + subdomainName, "v=txtv0;type=host;to=" + domainData.record.URL) ); } } From 6bd8e8b974df7db07ef9cd9fb4874981e7c5ce9f Mon Sep 17 00:00:00 2001 From: ukriu <80760888+ukriu@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:39:33 +0530 Subject: [PATCH 57/82] Update ukriu.json --- domains/ukriu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/ukriu.json b/domains/ukriu.json index af1b4f1d4..ee86dab3e 100644 --- a/domains/ukriu.json +++ b/domains/ukriu.json @@ -4,6 +4,6 @@ "email": "isadev@ukriu.com" }, "record": { - "URL": "https://ukriu.github.io" + "URL": "https://ukriu.com" } } From b12830c8fd455feae41a75cb984b160b5c2c0e86 Mon Sep 17 00:00:00 2001 From: ukriu <80760888+ukriu@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:40:13 +0530 Subject: [PATCH 58/82] Update uk.json --- domains/uk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/uk.json b/domains/uk.json index 458840eb2..c280fd33b 100644 --- a/domains/uk.json +++ b/domains/uk.json @@ -4,7 +4,7 @@ "email": "isadev@ukriu.com" }, "record": { - "URL": "https://ukriu.github.io/", + "URL": "https://ukriu.com/", "MX": [ "mx1.forwardemail.net", "mx2.forwardemail.net" From b43dbedb8564ad1b60ac08389f189e9c82100d10 Mon Sep 17 00:00:00 2001 From: ukriu <80760888+ukriu@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:40:47 +0530 Subject: [PATCH 59/82] Update ukrio.json --- domains/ukrio.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/ukrio.json b/domains/ukrio.json index 9604f8703..86419a250 100644 --- a/domains/ukrio.json +++ b/domains/ukrio.json @@ -5,7 +5,7 @@ "discord": "ukriu" }, "record": { - "URL": "https://ukriu.github.io", + "URL": "https://ukriu.com", "TXT": "v=spf1 include:spf.improvmx.com ~all", "MX": [ "mx1.improvmx.com", From 62b1680df6ce269f97e5fff533f3e60c77c88709 Mon Sep 17 00:00:00 2001 From: ukriu <80760888+ukriu@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:41:31 +0530 Subject: [PATCH 60/82] Update deko.json --- domains/deko.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/deko.json b/domains/deko.json index af1b4f1d4..ee86dab3e 100644 --- a/domains/deko.json +++ b/domains/deko.json @@ -4,6 +4,6 @@ "email": "isadev@ukriu.com" }, "record": { - "URL": "https://ukriu.github.io" + "URL": "https://ukriu.com" } } From f200d9592164d171a833507e09d432fa3eb93adc Mon Sep 17 00:00:00 2001 From: NinjaXility <103378267+NinjaXility@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:15:32 +0300 Subject: [PATCH 61/82] Update h3lios.json removed the protocol and slashes --- domains/h3lios.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domains/h3lios.json b/domains/h3lios.json index 7fa4c440b..fbce1b053 100644 --- a/domains/h3lios.json +++ b/domains/h3lios.json @@ -7,7 +7,7 @@ }, "record": { - "CNAME": "https://ninjaxility.github.io/" + "CNAME": "ninjaxility.github.io" } } - \ No newline at end of file + From 41df0b8a5c3a1137c284cc301e4b54a6711533db Mon Sep 17 00:00:00 2001 From: Kush-Dhingra Date: Thu, 17 Oct 2024 17:55:01 +0530 Subject: [PATCH 62/82] main --- domains/kushdhingra.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domains/kushdhingra.json b/domains/kushdhingra.json index e82c0ac9f..2754de6ca 100644 --- a/domains/kushdhingra.json +++ b/domains/kushdhingra.json @@ -1,13 +1,13 @@ { "owner": { "username": "Kush-Dhingra", - "email": "", + "email": "kushdhingra3112@gmail.com", "discord": "1035869217796403220", "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.gJTReSXxF-8BxDH8rn6i_DIx0XuVrc4yYnOEN1Awfp7mZcYPIgcPt4mvsScPbJYhZLN5XtDlxl0DcdU8Za12GCk-aIWegJ9-_32bdjw3agBzaJ-ltaslRoVpNJ3zfLaQ9V-BrhwVMEJhpz5-0eYeEiikL4tHAoPzzKMlYIf8f5l7IL6aMfhBZvIFf0B3upGg2FeOpFCXAsttU5QiKkjUt4BjetuYb29UJoNzDco1ZExLdudlKd_fz6IcaAsw2K1u6MMDDs2khsic9M42AE3pRFCP_hacdllY5Z66ATlmKhYAxFryJYWrgbfpGX2PxSrQalAao_IP1TIGgiq7ugiBDw.Lg-WIZSH_nzEfnLZct78Cg.soPtqjy32EA2Ew63dHQ8P8-dt4ZihvZpipBVkHyX_rlnv-y5YpS5v2-2d3O5hGHRfCKnfxQsvewDfcPSGa4_Oq8BN01Kzhbet8AXRCK6uOM.ouoa2YqHKAeX9lKWZoFaog" }, "record": { - "CNAME": "kush-dhingra.github.io" + "CNAME": "kushdhingra.netlify.app" } } From bc64b83f7a7566cda41b71ec8fc63003ff4778fb Mon Sep 17 00:00:00 2001 From: andrewstech Date: Thu, 17 Oct 2024 13:35:02 +0100 Subject: [PATCH 63/82] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 335a58668..45fac5162 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -24,7 +24,7 @@ jobs: - run: echo '{"cloudflare":{"TYPE":"CLOUDFLAREAPI","apitoken":"$CLOUDFLARE_API_TOKEN"}}' > ./creds.json - name: Publish - uses: koenrh/dnscontrol-action@v3 + uses: is-a-dev/dnscontrol-action@main env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} with: From 1399192a1b187dc00a50d12cbd16e46112305ac5 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:48:16 +0800 Subject: [PATCH 64/82] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 1cdb8598b..136d8fc55 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ Domains Open Pull Requests Open Issues +
+ Publish + Raw API

is-a.dev

@@ -16,6 +19,8 @@ Discord Server

+[![Publish](https://github.com/is-a-dev/register/actions/workflows/publish.yml/badge.svg)](https://github.com/is-a-dev/register/actions/workflows/publish.yml) + ## Issues If you have any problems, feel free to [open a issue](https://github.com/is-a-dev/register/issues/new/choose). From a2995d5a7eccfe94ae795b5dd8401e69088f2462 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:49:51 +0800 Subject: [PATCH 65/82] Update publish.yml --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 45fac5162..804af0ecc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,7 +21,8 @@ jobs: steps: - uses: actions/checkout@v4 - - run: echo '{"cloudflare":{"TYPE":"CLOUDFLAREAPI","apitoken":"$CLOUDFLARE_API_TOKEN"}}' > ./creds.json + - name: Generate creds.json + run: echo '{"cloudflare":{"TYPE":"CLOUDFLAREAPI","apitoken":"$CLOUDFLARE_API_TOKEN"}}' > ./creds.json - name: Publish uses: is-a-dev/dnscontrol-action@main @@ -29,4 +30,3 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} with: args: push - config_file: "dnsconfig.js" From 704d774ebe44ca497665aecfe9ce7b43fcaf9eaf Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:50:58 +0800 Subject: [PATCH 66/82] Update validate.yml --- .github/workflows/validate.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 9f45e5b0d..0ca0890ec 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -6,7 +6,7 @@ on: push: branches: [main] paths: - - "domains/**" + - "domains/*" - ".github/workflows/validation.yml" - "dnsconfig.js" @@ -24,10 +24,9 @@ jobs: - uses: actions/checkout@v4 - name: Check - uses: koenrh/dnscontrol-action@v3 + uses: is-a-dev/dnscontrol-action@main with: args: check - config_file: "dnsconfig.js" json: name: JSON From 05da5154666c24e2d12a2636261bff3abe3bce9b Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:51:10 +0800 Subject: [PATCH 67/82] Update publish.yml --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 804af0ecc..9622ebd4a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,7 +4,7 @@ on: push: branches: [main] paths: - - "domains/**" + - "domains/*" - ".github/workflows/publish.yml" - "dnsconfig.js" From 784158674ba30e702596f6d02970121481c19b73 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 23:55:10 +1100 Subject: [PATCH 68/82] Add files via upload --- media/cloudflare-logo-thumbnail.webp | Bin 0 -> 12752 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/cloudflare-logo-thumbnail.webp diff --git a/media/cloudflare-logo-thumbnail.webp b/media/cloudflare-logo-thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..fae2b96e9c93e0a354bc44eebc3388399fb38262 GIT binary patch literal 12752 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≺*o;Oi@Y7IH zKb&T-^A9C|2JPG{N&TE6?-7pfvpAj9&^qn6w{Hbu36l?TeTw_n$gC|kTtY;UIK<-7 zPO0LVpA>;tkUBD;9Do8Exi#FFj_Ge#bk2+ZMHmoxUWh~qPJ+q-Fb&xe{miR_4jz8J zJagkFeiaywNO?PQiM&!{r06&!j*ML}X$ep?sI>tdJKr<4qQ#10Da7PXtpxi8#-)CsaawU9F@dhtD=P~f zvS~a0ef1b%9j$Tz=k&0JQJX$uYt^}R*`&M9mB(;)vITmmeluuP;NziX3vN0po#Me$ldrVJY7JE_s@aJinPs`kI~?QzP)u@UJyYxMhs zezWsFo|?one~=L!u*|gc?c-ATxb^%QJe2L&= z7Gq{JNWuV<5k|5rJU&{Om6zG}eD2Tc2t z6|r$Mw7AR4`_*syp=gdfwO=G%tyx`!7NLPY3CueoA)r=9G6aCVNjAa88L`0iQx_l6 z*93|zvzlMAr}Hy>I1T=&dJzRKlXb(j*;muOPeR{Lo>xZUiq6~wX>rWN@2}m}?GCHs z`|BWVv2dbO8C)pt^cp+>(F)n_F6D#Ld(lNgro08=EG%dv>Rj*P>B}X>PIH!`;v~)K z%ivAnPEASg6QA~Daj%=V8j0@aBXMd^_4SGPcwHTP{`dSO(Q3FuhuiO`g=-w@nKGi z^af@9Jd!;+$;}eU@Eb3)W**t%-+mz#P1rRmgfc{eiIx9h&4Lujzr+VaNP3UQcBP&U z2Z21K%2S+c&$@qQd}BF+;zxzlbmTeZziR7oZAeP`!2TvdI34~iCM&N)N?aWrilW1} zH#Ur}nZv$nN=2n-9`yJ1CzXXVC)zJeIeYFQz{O+OU@Fd!K z!SHyJBIlL;rqqQ-o_aa#W`o+3nFOgKkTTOLcrTUy;ojM|o@3z1BO?(^L{-TY|nVb;FruLTbyzApi`)%jUGmA<1Ut#~RHUHC@pjKH| zUcUZvpN!{dfWsUI9lp_D-}=(^Cvz6Z%9EyvvId#Jh5g?-Z~gdSp<`B?HMh7&)j51( zrI*x0_x*q~T$p9pv|=XKUoa|XjW^WU8bPD7%Pw-hD(f=0V^>q_vB3qv+ zR9&_5z4_*UaJr!V%PHtH|8o!$t&jBCnKgF-ICPkyTF?t(0{;tRl!t$KbjRphiLyF?f)kLsBfd&uM2J(S_}W;m1Y6|d)=r3E#q_l3ny#-)r2Q&Kv&&2 z<9`NSaHW(c!G3~P=$Kq{3Wa;fZ{0gjx3ORt27X597@}Zlq+mEC04iXtQ9~+3a9y3a z3OjhB?omM~=|CiF>?-G0R1(C{-<`{_(rC!YbJ?jY_0K}$M`Pc$*{u0+(GNT+81lF> zGWd=?QrjRjYF>bUwLAsu?m)@~JghP7k99x_{UmjnyD_89 zMlcKNy)HY9U5s7ks_=F+h1zgi+&y=lN^3cOJ=p;JW~I$)jMz$p?QN*;ubAj!I_06< zXUNQfG@b1sc06HQ#T=W}?!o8$ut;clpCF*K^_&YVX%HVlwiy1Sz(2aN(GM^QgJy=6 zbi%c+tK`To#Ts$%`RDh0`!6<~7;vl4TK@@>+;IhmBB>A){dKzNVurO~!j+&aa^rJH z$svkbZ5K-aLE!Ms_>d^vukh0=pLB(KSQGY}k7($rI7*XTn6lxz&o(lF-QslD%Lbp! zQ<}jZ+4Yr!l~^oh2nVg{A30D-2cdH(TY>%Veo zlRH0jzYO?oRn}uRS(b&3(5rX#E$|^H;P4N*K4J~suu=lGl;7QgsGT#l0^5fMoQ!y= zzm1@TsegULT?-)Yp1K{a6QCJkilQ6JP*9V0C^j74y*+&>Z=cAoVXE(`VvzBf{^6nr zO&#eZO2=EY>2F`g@EgaHD&M8=HzjA|<1t8NL+!Q%Orlr|}iiB3-VWoh~`P=kq-FA$qUm2yD7 z`{!`I)QAzD{%4aiEs>w^2rw(f5f6aFUu_XEv<9b$%?e_lWXh`tmkwH<(qM|4S{!7P zxXAtokLXmq>dc~WlN}nB{!opbG#(%z(OA-i;o#y_6c4{+r%AASW|1-9@YP$os&@bj zPeu*E06_ZPcsa>dP2eGFgorCzCZ;GsFaTn8HwyUjGW$sU^T7-PXs^wa;z@GN$6$v} z1yHrTu0PgR~Ra zz?gjamwP+XBMd*3SUhS_V%ufr2!wE9+(8<=y)hkWIn~7k3KIZ>#107XUY8hv&bK|f zH1RAfYi%TT+H%UCtk9Wioz#indFa|*c#;*AYs=Bc(Qugsf1R#6(Yan^n>IrNJS{;c zX}4Sy0iP<%|p7ULu~V*b*yoE<$Q| zqp9Te(>CJ?tJ)q5&*b@G4cq#@Zkhj34!?c zA)P%kZ=zf&gm6#nzf7tZq*MR45 zj6`%`v`D;mJMIOc8&+vlM&PU~<+n3Ng%`-g$CY0}ghbshX22%^rIOBaREdPy`JHjp zRK54b_DFqTCi3D~OiHYD^mLu2z9SS8Go>{rz5w9ow|n}Z8EK>a#VAP;`icq4V#Spr zv1rnsR#y!RRwWd!?_|m-8m!0TSI^*VsVO!uZM8zJ&kjouaDtr-=Hq;}xR3%Fa3*jN z)-OP4xz-$6PLAGd(LbW23JhFfj}5g3x3Eu7ZLj6A@?tyBKXgJ+wD*L*QUMW7v9 z<<4%R+I0;02Wy#?RbYbSnHf`* zO(UE1MPY0sEYaCr%U($SZ4q;XRNc`|12_a5;|+;qTZh`DXT;)EtI!4f?4QL|XT4$W zS6O~w0t|Q>q&dSy09Q+Z)|IuW>SS3Q(Pk%7n@OCg)^wDgDh*h5PZ63ZScM)?Pm}FNOL`lo%|3q%q;21@;6<|FszDoA{0Ezv9dLV+YAxYEJj{$vC zSUE{MZzl{zBA0E%9urrd8?mDfgW{#x>YR!}Lo|)=VB$WMnA>ixB-aUoG zV)IGVdB15Dm2G^;!b-va8UT3(g`<$vV=$WJvj$ZivK*blh%fN zxPlORmv~OgCzkmjYUAAuGnO#e{5wFWl60X&A$<^> z_j?I_=dzb$l7z5?Qh2*w8%&5DGd)K*vfWyhHxo*ySG7b;oYj6Ey=`kjJJJtW{tCz` zvT-#K=2m1Z_T3T+e*!uSw%af{Ii2zER`d<6TxftE_^-kOQRAi9(Y>Q{ z)hYZ@BTHC9|1&A)RHTmJRRGd&f&w5ljtOnq7Q9)@Gj3%<3Q#o6?kKS}jq^|G0^b$h z^S<#jP%dU`9f=1ES?2O|H8dLy*r5VNTySfjla%t{Iq+ zOMi~Z%xT5;JgL!Pbq+{=iNJ_{GoD*x#AB4CRs9M+6N4hF?D3EIrAlzy;VR2$zgd72 z6LV^2#x7xzUgjl)9s2q{3hbG>{`+n{h~7)fst%WV&6e3BApRp9_m zA$_hie+IZ>?3ZO2mVDJ|bAW&t)NtYe3C8ypM3#X{II?DhU#QC7!ve+6f{5{>)%*F> z0EloA!7TSHLnH3fAh}Q=Ge$&KKa)Yg?j;o)WZ_PRx%fuBV#03`>G)1w=>u8JGU^+q zt5HRU7adTuU4mHh z+r^3w%Kd80s6P>*cdDHT+W`0=aAZZYCr0?id&J!(zR>6x5!=~!@~X~C+WSD)gikKw z^Mi(x^>%E;UC_dGOm(d1j`$%Mvj#*_!K#I3a~Cdm|zob5UT3KiwT z3$B0A0ub%cBl8||>>NTr6=Y>l-8UNWB7nKU*`rT+zK#zRc2&Yy(2WfDoM0sNZMV9} zmMo-DN-9EmgCpDqV!tlT=&7vN*nS!v3DdkylA!~a@LVn3M44G?g?3PVA44F3I6M?A zfG9VCt|yXQPkXz{65&77T$50PyYJKbEU22*PiZCX9r+UAAJAU|6yW=QOBt;g$i-b! z5|Sp&DefOiky5N43+Y65Nn$MukV-B*bd|@l-5OLU`EU9`bT%&z&($S>ErDm{1Z9y# z>iEoKCMql=Q!+s)VJ^olcUDCG3(-*OPQa!!X~hLS_voewr7x8oSh<@-&60>BAT9@~w`mQF1v zlTmgCeDD2)(KAq|6%2Qmgl6TW?lD#c%^>t96NxdvXqX-TVC+@Q78S^gyJSdVH*11F z^mcw^K!nVh4t}xhHh`8Fwp5(>IwH#o2 zS-xJ%Z6&%tc&tY5F?-CoU-WuDi(*Saxz3xU4>Ibn^%q-y0Fc~s{HK>f{h^C5`MH!0 z(jQlbj!+QbAWaR7z!dNHA67;1U-%MFy<$J`Y>7kC*|MMYw*>D~@HJKz5V@!We1~P8 zCIDf{SW(|Ot0Gop2CkMRB-Q^27jt%E=i!RI#E84!`;zQG10cV#KlE?@_J04LkZx?j F{|k3FQ{Dgo literal 0 HcmV?d00001 From 82b4baea5abad8356aafc64036f6e86f3d7a91a8 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 20:55:42 +0800 Subject: [PATCH 69/82] Delete media/cloudflare-logo-thumbnail.webp --- media/cloudflare-logo-thumbnail.webp | Bin 12752 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 media/cloudflare-logo-thumbnail.webp diff --git a/media/cloudflare-logo-thumbnail.webp b/media/cloudflare-logo-thumbnail.webp deleted file mode 100644 index fae2b96e9c93e0a354bc44eebc3388399fb38262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12752 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≺*o;Oi@Y7IH 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 F{|k3FQ{Dgo From f478388ef43cbf7b68526a2348d9c0bdea587c28 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 23:56:09 +1100 Subject: [PATCH 70/82] Add files via upload --- media/cloudflare.png | Bin 0 -> 62019 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/cloudflare.png diff --git a/media/cloudflare.png b/media/cloudflare.png new file mode 100644 index 0000000000000000000000000000000000000000..dc252a0a52c3e2dbf6541c009eccef6fecacc171 GIT binary patch literal 62019 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 z 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 z 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 qLm(3Eh{Wo}jL84FA?}+f2L1g1zhSuPF_0f{IK Date: Thu, 17 Oct 2024 20:59:46 +0800 Subject: [PATCH 71/82] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 136d8fc55..2a2f68204 100644 --- a/README.md +++ b/README.md @@ -49,5 +49,11 @@ If you like this project, please consider donating so we can keep this project r Buy Me a Coffee Liberapay +### Sponsors + + + Cloudflare Logo + + ### Similar Services If you want to find services similar to is-a.dev, take a look at [Free For Life](https://github.com/wdhdev/free-for-life#domains). From af135c9f6ae885ceccc83e9063623b6a2d9f0034 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:09:03 +0800 Subject: [PATCH 72/82] Create *.json --- domains/*.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/*.json diff --git a/domains/*.json b/domains/*.json new file mode 100644 index 000000000..def2efa74 --- /dev/null +++ b/domains/*.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "is-a-dev", + "email": "" + }, + "record": { + "URL": "https://is-a.dev" + } +} From fec24f02281df8d12f31cfb5e3dd6e9e001fa730 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:10:54 +0800 Subject: [PATCH 73/82] Update *.json --- domains/*.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/domains/*.json b/domains/*.json index def2efa74..92b29552b 100644 --- a/domains/*.json +++ b/domains/*.json @@ -4,6 +4,7 @@ "email": "" }, "record": { - "URL": "https://is-a.dev" - } + "A": ["45.85.238.5"] + }, + "proxied": true } From 7a3d97acb8b20e7378cafbd593e4f891ac25be44 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:11:57 +0800 Subject: [PATCH 74/82] Create _redirect._.json --- domains/_redirect._.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/_redirect._.json diff --git a/domains/_redirect._.json b/domains/_redirect._.json new file mode 100644 index 000000000..7a45bf8cb --- /dev/null +++ b/domains/_redirect._.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "is-a-dev", + "email": "" + }, + "record": { + "TXT": "v=txtv0;type=host;to=https://is-a.dev" + } +} From 9b36154caa6afe2dca6c846062fe4cb4e610adc2 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:20:11 +0800 Subject: [PATCH 75/82] Rename _redirect._.json to _redirect.json --- domains/{_redirect._.json => _redirect.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename domains/{_redirect._.json => _redirect.json} (100%) diff --git a/domains/_redirect._.json b/domains/_redirect.json similarity index 100% rename from domains/_redirect._.json rename to domains/_redirect.json From 383f799787593cf165d6cef148711d6c2d654813 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:23:16 +0800 Subject: [PATCH 76/82] Delete domains/*.json --- domains/*.json | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 domains/*.json diff --git a/domains/*.json b/domains/*.json deleted file mode 100644 index 92b29552b..000000000 --- a/domains/*.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "A": ["45.85.238.5"] - }, - "proxied": true -} From be3a62806f97509101c6e542f218d6d363487265 Mon Sep 17 00:00:00 2001 From: William Harrison Date: Thu, 17 Oct 2024 21:23:48 +0800 Subject: [PATCH 77/82] Delete domains/_redirect.json --- domains/_redirect.json | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 domains/_redirect.json diff --git a/domains/_redirect.json b/domains/_redirect.json deleted file mode 100644 index 7a45bf8cb..000000000 --- a/domains/_redirect.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - "record": { - "TXT": "v=txtv0;type=host;to=https://is-a.dev" - } -} From fc43ffd7801423ea67d65a7222d2ca53085b0281 Mon Sep 17 00:00:00 2001 From: ukriu <80760888+ukriu@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:23:57 +0530 Subject: [PATCH 78/82] Update ukriu.json --- domains/ukriu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/ukriu.json b/domains/ukriu.json index ee86dab3e..bd405f6e5 100644 --- a/domains/ukriu.json +++ b/domains/ukriu.json @@ -4,6 +4,6 @@ "email": "isadev@ukriu.com" }, "record": { - "URL": "https://ukriu.com" + "NS": ["love.ns.cloudflare.com", "pete.ns.cloudflare.com"] } } From 651d64237aefbf7f500ea7cbd552f80cc5a4ef89 Mon Sep 17 00:00:00 2001 From: om Date: Thu, 17 Oct 2024 19:43:15 +0530 Subject: [PATCH 79/82] NS for om --- domains/om.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/om.json b/domains/om.json index 1f097dafd..a31fc31ff 100644 --- a/domains/om.json +++ b/domains/om.json @@ -5,6 +5,6 @@ "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" }, "record": { - "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"] + "NS": ["raina.ns.cloudflare.com","sergi.ns.cloudflare.com"] } } From 30e3938a367c772236fa94632dd33bcf932b7782 Mon Sep 17 00:00:00 2001 From: om Date: Thu, 17 Oct 2024 20:42:35 +0530 Subject: [PATCH 80/82] Update o.json --- domains/o.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/o.json b/domains/o.json index 1f097dafd..a31fc31ff 100644 --- a/domains/o.json +++ b/domains/o.json @@ -5,6 +5,6 @@ "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" }, "record": { - "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"] + "NS": ["raina.ns.cloudflare.com","sergi.ns.cloudflare.com"] } } From 29eb72592a87c900765684869e1959c70818e3eb Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 17 Oct 2024 19:13:01 +0300 Subject: [PATCH 81/82] Create www.joe50097.json --- domains/www.joe50097.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 domains/www.joe50097.json diff --git a/domains/www.joe50097.json b/domains/www.joe50097.json new file mode 100644 index 000000000..0b7b943e6 --- /dev/null +++ b/domains/www.joe50097.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "Joe50097", + "email": "zcell9500@gmail.com" + }, + "record": { + "CNAME": "joe50097.netlify.app" + } +} From a9dff50b2d4cc1ba126d3f1306cf927d4b8d4b6b Mon Sep 17 00:00:00 2001 From: DIBSTER <76603072+DEV-DIBSTER@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:01:55 -0400 Subject: [PATCH 82/82] feat: creating my domain --- domains/dib.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 domains/dib.json diff --git a/domains/dib.json b/domains/dib.json new file mode 100644 index 000000000..a10343f91 --- /dev/null +++ b/domains/dib.json @@ -0,0 +1,13 @@ +{ + "description": "[MAINTANER] DEV-DIBSTER Site", + "owner": { + "username": "DEV-DIBSTER", + "email": "dibster+is-a-dev@danbot.host" + }, + "record": { + "NS": [ + "scott.ns.cloudflare.com", + "tessa.ns.cloudflare.com" + ] + } +}