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/.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/.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..335a58668 --- /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.CLOUDFLARE_API_TOKEN }} + with: + args: push + config_file: "dnsconfig.js" diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 000000000..9f45e5b0d --- /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/" 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/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/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/README.md b/README.md index a2aff3b08..1cdb8598b 100644 --- a/README.md +++ b/README.md @@ -16,19 +16,10 @@ Discord Server

-## Phishing emails alert -**We have been notified of scammers using emails in this repository to send phishing emails. Do NOT click any links in suspicious emails.** - -If you would like to remove your email, remove it from your JSON file and provide a separate contact method (preferably Discord). - -Leave the email field there, but just blank. Then add a separate contact method to your file. - -Please see more information in issue https://github.com/is-a-dev/register/issues/14802. - ## 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 @@ -36,7 +27,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! @@ -47,9 +38,6 @@ If you have an issue that contains confidental infomation, send an email to secu Join our [Discord server](https://discord.gg/is-a-dev-830872854677422150), head to the commands channel and run `/register`. The bot will ask you a few questions then will generate your PR and domain automatically. The bot also allows for domain deletion and editing. -## Status -You can check the uptime of our services on our [status dashboard](https://is-a-dev.hrsn.dev). - ### Donate If you like this project, please consider donating so we can keep this project running forever! 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/bun.lockb b/bun.lockb deleted file mode 100755 index 502212010..000000000 Binary files a/bun.lockb and /dev/null differ diff --git a/default.nix b/default.nix deleted file mode 100644 index bc0f66aa3..000000000 --- a/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ nixpkgs ? import {} }: -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..b703fac15 --- /dev/null +++ b/dnsconfig.js @@ -0,0 +1,125 @@ +var regNone = NewRegistrar("none"); +var providerCf = DnsProvider(NewDnsProvider("cloudflare")); + +var proxy = { + on: { "cloudflare_proxy": "on" }, + off: { "cloudflare_proxy": "off" } +} + +function getDomainsList(filesPath) { + var result = []; + var files = glob.apply(null, [filesPath, true, '.json']); + + for (var i = 0; i < files.length; i++) { + var name = files[i].split('/').pop().replace(/\.json$/, ''); + + result.push({ name: name, data: require(files[i]) }); + } + + return result; +} + +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 + + if (!commit[domainName]) commit[domainName] = []; + if (!domainData.proxied) 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) + ); + } + } + + // 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 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 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 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) { + commit[domainName].push( + A(subdomainName, "45.85.238.5", proxy.on) + TXT("_redirect" + subdomainName, "v=txtv0;type=host;to=" + domainData.record.URL) + ); + } +} + +// 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/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/@.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/_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/_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.lingle.json b/domains/_discord.lingle.json new file mode 100644 index 000000000..29bb34749 --- /dev/null +++ b/domains/_discord.lingle.json @@ -0,0 +1,11 @@ +{ + "owner": { + "username": "lingledev", + "email": "gideon.lingle2023@gmail.com" + }, + "record": { + "TXT": [ + "dh=21d66ba4bca0c546fa80a877a6d3df57216bd5f5" + ] + } +} 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.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/_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/_gh-is-a-dev-o.www.json b/domains/_gh-is-a-dev-o.json similarity index 77% rename from domains/_gh-is-a-dev-o.www.json rename to domains/_gh-is-a-dev-o.json index a93e75f33..804fb9f73 100644 --- a/domains/_gh-is-a-dev-o.www.json +++ b/domains/_gh-is-a-dev-o.json @@ -5,6 +5,6 @@ }, "record": { - "TXT": "1259c184c5" + "TXT": "9ac06a2c1c" } } diff --git a/domains/_gh-is-a-dev-o.m.json b/domains/_gh-is-a-dev-o.m.json deleted file mode 100644 index e7af9390b..000000000 --- a/domains/_gh-is-a-dev-o.m.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "e0ffcded3e" - } -} diff --git a/domains/_gh-is-a-dev-o.maintainers.json b/domains/_gh-is-a-dev-o.maintainers.json deleted file mode 100644 index e381c3c8c..000000000 --- a/domains/_gh-is-a-dev-o.maintainers.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "is-a-dev", - "email": "" - }, - - "record": { - "TXT": "7b45eb688b" - } -} 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/_github-pages-challenge-Fluffythebunny.json b/domains/_github-pages-challenge-Fluffythebunny.json new file mode 100644 index 000000000..5519e8ef1 --- /dev/null +++ b/domains/_github-pages-challenge-Fluffythebunny.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "Fluffythebunny", + "email": "puglsytt@gmail.com" + }, + "record": { + "TXT": "beb68ebc988463b8b1753c41c14f9e" + } +} 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.w.json b/domains/_github-pages-challenge-wdhdev.w.json deleted file mode 100644 index 3976fa11f..000000000 --- a/domains/_github-pages-challenge-wdhdev.w.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "wdhdev", - "email": "william@m.is-a.dev" - }, - - "record": { - "TXT": "660ac3fbb8e294e077d68381ad6aeb" - } -} diff --git a/domains/_github-pages-challenge-wdhdev.william.json b/domains/_github-pages-challenge-wdhdev.william.json deleted file mode 100644 index f9c6ef5ea..000000000 --- a/domains/_github-pages-challenge-wdhdev.william.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "owner": { - "username": "wdhdev", - "email": "william@m.is-a.dev" - }, - - "record": { - "TXT": "6b3a5de4756e5840afc94698b74712" - } -} diff --git a/domains/_psl.json b/domains/_psl.json index fd8db17bb..79f23886c 100644 --- a/domains/_psl.json +++ b/domains/_psl.json @@ -1,10 +1,10 @@ { - "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" + "TXT": "https://github.com/publicsuffix/list/pull/2225" } } 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/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/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/c.json b/domains/c.json index da3053a49..8fdc0ccc6 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", "tate.ns.cloudflare.com"] } } diff --git a/domains/caenjones.json b/domains/caenjones.json new file mode 100644 index 000000000..50d6b79a3 --- /dev/null +++ b/domains/caenjones.json @@ -0,0 +1,12 @@ +{ + "description": "My personal website and blog", + "repo": "https://github.com/CaenJones/caenjones.github.io", + "owner": { + "username": "CaenJones", + "email": "cj@caenjones.com", + "twitter": "" + }, + "record": { + "CNAME": "caenjones.github.io" + } +} 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/dgs.json b/domains/dgs.json new file mode 100644 index 000000000..33e2d5040 --- /dev/null +++ b/domains/dgs.json @@ -0,0 +1,13 @@ +{ + "owner": { + "username": "victorydawn", + "email": "", + "discord": "857502876108193812", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.Mk7Ovfy1v5O45rik2XcBeQI94jklBWGmiCn27B2tMUKnwVKAQH5_fUE_DexQoYK6KgU9OgyBdzPtyTCGgYiFsAx-uRvdkt-EbMTF6rV1xNdEzmOKnCAUMdWAqb8pzGB32zQlJLNev7rhhqPgaLNd0GxuAMAsr9e1yuqjiabYtTHFiqRx_CITf1cr38q2Idgsb4QFkbaJCRuJ1WV5nuDGGftkI5FIrENB3BiauJ0kTA1cn_zxLS-kDCMwJ1vkmE2mW_2NBIEFfn-Eq9troZE2YICPBvKx9HcTnOQlP61mq3R8_ut7FoZeg8Ts44-1affR3OnbgAz_1Y_qT7ty9jnASg.Borc5KEWmWoWP6Af2GjWXw.OVNPGtv9qRGhSGqU39vXowD22fqLppnAHIlvDh24AAuHFYAmU0PpE3GuzbNo_RmuTlkx7TcEohJ3M_2sXtSshh6TkCYwZ2Edik5dh6ZFY50.6iMDFicGcVAP6sxWx_K1jQ" + }, + + "record": { + "CNAME": "mydgs.pages.dev" + } + } + \ No newline at end of file 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/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.json b/domains/docs.json index 946773150..e29fc733a 100644 --- a/domains/docs.json +++ b/domains/docs.json @@ -6,6 +6,6 @@ "email": "" }, "record": { - "URL": "https://www.is-a.dev/docs" + "URL": "https://is-a.dev/docs" } } 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/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/fluffythebunny.json b/domains/fluffythebunny.json new file mode 100644 index 000000000..091f3cee8 --- /dev/null +++ b/domains/fluffythebunny.json @@ -0,0 +1,12 @@ +{ + "description": "using it for my developer portfolio", + "repo": "https://github.com/Fluffythebunny/fluffythebunny.is-a.dev", + "owner": { + "username": "Fluffythebunny", + "email": "puglsytt@gmail.com", + "twitter": "pugls" + }, + "record": { + "CNAME": "fluffythebunny.github.io" + } +} 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/gs.json b/domains/gs.json new file mode 100644 index 000000000..0fbf2da2f --- /dev/null +++ b/domains/gs.json @@ -0,0 +1,12 @@ +{ + "owner": { + "username": "Newfies", + "email": "", + "twitter": "YeahItsGav", + "OWL": "eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.fraa7gfMOqQqWmbk-4fE5_pNd2zEvQ1K5w53QIHDTtr1C_Wu2Pzw-GfOlhxAtr7Af5ZIj_p7F5OOp6PwDxlKBXGt13e5l3Z9CQlYRclhfnaeYQm_xetYFlf9ucsYXVTfjFAeXxybT-RxbBjRl3Z48tSQaAto3E3Y-SbqwHPhjqh7-4tCpRZu5yc38Bx0_RHt95Ib2Mcg4cWShE-2ggvygSsonBuYBRGFqMIhM60tMA-cbJdQpvfVdZTJv0vHOtUJltv3eVzPpi4q5S5lWz3EKizGXuwAq3HLFycrBVrt5pegWLi1gId-urV9HGV1L3myGfQQSGwDVCEew9YKQFj71A.bxACuA7jrws9Z7z0oTx4wQ.fzzUvSGM_6ODHxUwg6vQvfJeI2kmUx5DW_4tIGVjPOymDplL8iBjzb5HIHhLqo_PlkcmGxeNr5DH4glPZdn1Dq2ywNTV90hWqpjfoHSOsYk.O8IBPKTRGwaH43VBg1rK3A", + "notes": "I never look at my emails, but I check on twitter alot, so if you need to contact, lmk your from is-a.dev" + }, + "record": { + "URL": "https://href.li/https://github.com/GsLibrary" + } +} 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/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/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/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/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/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"] } } 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"] } } 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" } diff --git a/domains/orangc.json b/domains/orangc.json index da3053a49..8fdc0ccc6 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", "tate.ns.cloudflare.com"] } } 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/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/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/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/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" 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", 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/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" + ] } } diff --git a/domains/test.json b/domains/test.json deleted file mode 100644 index b62378c74..000000000 --- a/domains/test.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "owner": { - "username": "TerraPlayz", - "email": "omsenjalia@gmail.com", - "discord": "248470317540966443" - }, - - "record": { - "A": ["11.11.11.11"] - } -} 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/ujjwal.json b/domains/ujjwal.json new file mode 100644 index 000000000..783f87b0d --- /dev/null +++ b/domains/ujjwal.json @@ -0,0 +1,9 @@ +{ + "owner": { + "username": "ujjwalshriwal", + "email": "ujjwalshrivastav16@gmail.com" + }, + "record": { + "CNAME": "ujjwalshriwal.github.io" + } +} 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" - } -} 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" } diff --git a/domains/w.json b/domains/w.json index 2f3788f33..722adf218 100644 --- a/domains/w.json +++ b/domains/w.json @@ -1,10 +1,10 @@ -{ - "owner": { - "username": "wdhdev", - "email": "william@m.is-a.dev" - }, - - "record": { - "CNAME": "hrsn.dev" - } -} +{ + "owner": { + "username": "wdhdev", + "email": "william@is-a.dev" + }, + + "record": { + "URL": "https://william.is-a.dev" + } +} 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"] } } 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" } } 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 };