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 @@
-## 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!
-
-
-
-`;
-
-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 };