Merge branch 'main' into main

This commit is contained in:
NinjaXility authored and GitHub committed 2024-10-17 15:04:56 +03:00
commit a5a7f6bbf7
108 files changed
+351 -2582

No files matched your search

-6
View File
@@ -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
-1
View File
@@ -1 +0,0 @@
use_nix
-31
View File
@@ -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]
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
* @phenax @wdhdev * @phenax @wdhdev
/.github/ @wdhdev /.github/ @wdhdev
/domains/ @is-a-dev/maintainers @is-a-dev/trial-maintainers /domains/ @is-a-dev/maintainers
*.md @is-a-dev/maintainers *.md @is-a-dev/maintainers
-18
View File
@@ -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
-30
View File
@@ -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
+32
View File
@@ -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"
+43
View File
@@ -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/"
-4
View File
@@ -1,4 +0,0 @@
node_modules/
*.env.production
*.log
is-a-dev-cert/
-22
View File
@@ -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"]
-1
View File
@@ -6,7 +6,6 @@
| CuteDog5695 | [@CuteDog5695](https://github.com/CuteDog5695) | Maintainer | | CuteDog5695 | [@CuteDog5695](https://github.com/CuteDog5695) | Maintainer |
| Daniel | [@hackermondev](https://github.com/hackermondev) | Maintainer | | Daniel | [@hackermondev](https://github.com/hackermondev) | Maintainer |
| DIBSTER | [@DEV-DIBSTER](https://github.com/DEV-DIBSTER) | Maintainer | | DIBSTER | [@DEV-DIBSTER](https://github.com/DEV-DIBSTER) | Maintainer |
| MaskDuck | [@MaskDuck](https://github.com/MaskDuck) | Maintainer |
| Om | [@omsenjalia](https://github.com/omsenjalia) | Maintainer | | Om | [@omsenjalia](https://github.com/omsenjalia) | Maintainer |
| orangc | [@orxngc](https://github.com/orxngc) | Maintainer | | orangc | [@orxngc](https://github.com/orxngc) | Maintainer |
| Stef | [@Stef-00012](https://github.com/Stef-00012) | Maintainer | | Stef | [@Stef-00012](https://github.com/Stef-00012) | Maintainer |
+2 -14
View File
@@ -16,19 +16,10 @@
<a href="https://discord.gg/is-a-dev-830872854677422150"><img alt="Discord Server" src="https://invidget.switchblade.xyz/is-a-dev-830872854677422150"></a> <a href="https://discord.gg/is-a-dev-830872854677422150"><img alt="Discord Server" src="https://invidget.switchblade.xyz/is-a-dev-830872854677422150"></a>
</p> </p>
## 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 ## 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 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 ## Register
### Manual Registration ### 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 - [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` - 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!* - 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 - After the pull request is merged, please allow up to 24 hours for the changes to propagate
- Enjoy your new `.is-a.dev` domain! - 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. 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 ### Donate
If you like this project, please consider donating so we can keep this project running forever! If you like this project, please consider donating so we can keep this project running forever!
+1 -1
View File
@@ -3,4 +3,4 @@
## Reporting a vulnerability ## Reporting a vulnerability
You can report low severity bugs as [issues](https://github.com/is-a-dev/register/issues/new/choose) on this repository. 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.
BIN
View File
Binary file not shown.
-15
View File
@@ -1,15 +0,0 @@
{ nixpkgs ? import <nixpkgs> {} }:
let
inherit (nixpkgs) pkgs;
nixPackages = with pkgs; [
yarn
docker-compose
dnsutils
bun
];
in
pkgs.stdenv.mkDerivation {
name = "env";
buildInputs = nixPackages;
}
+125
View File
@@ -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]);
}
-8
View File
@@ -1,8 +0,0 @@
version: '3'
services:
dev:
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./:/opt/app/code
+1 -1
View File
@@ -13,7 +13,7 @@
"185.199.108.153", "185.199.108.153",
"185.199.109.153", "185.199.109.153",
"185.199.110.153", "185.199.110.153",
"185.199.110.153" "185.199.111.153"
] ]
} }
} }
+18 -3
View File
@@ -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": { "owner": {
"username": "is-a-dev", "username": "is-a-dev",
"email": "" "email": ""
}, },
"record": { "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"
} }
} }
-12
View File
@@ -1,12 +0,0 @@
{
"owner": {
"username": "denboy0123",
"email": "pochtaproverka01@gmail.com"
},
"record": {
"TXT": [
"FZo9g0GqRYR-fhmWc1QzbycfV5UZIE4bwh42BI81NDQ",
"V1N8tuJvEcUtltxMXLRvP0U1_jaAgsSJJ89MgyxpWUk"
]
}
}
-11
View File
@@ -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"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "orxngc",
"discord": "orangc",
"email": "orangc@proton.me"
},
"record": {
"TXT": "dh=dff53e3c9534a4606fe07fef0142ab53acf4a0e4"
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"owner": {
"username": "lingledev",
"email": "gideon.lingle2023@gmail.com"
},
"record": {
"TXT": [
"dh=21d66ba4bca0c546fa80a877a6d3df57216bd5f5"
]
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "orxngc",
"discord": "orangc",
"email": "orangc@proton.me"
},
"record": {
"TXT": "dh=d27c8c015aa5f1be96c0c468e091a0958dd1c1dc"
}
}
-11
View File
@@ -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"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"TXT": "v=DMARC1; p=reject; rua=mailto:b24ae2ebb6744451bec500b161916c03@dmarc-reports.cloudflare.net"
}
}
-10
View File
@@ -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"
}
}
@@ -5,6 +5,6 @@
}, },
"record": { "record": {
"TXT": "1259c184c5" "TXT": "9ac06a2c1c"
} }
} }
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"TXT": "e0ffcded3e"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"TXT": "7b45eb688b"
}
}
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"TXT": "2c9dfbe7c8"
}
}
@@ -0,0 +1,9 @@
{
"owner": {
"username": "Fluffythebunny",
"email": "puglsytt@gmail.com"
},
"record": {
"TXT": "beb68ebc988463b8b1753c41c14f9e"
}
}
@@ -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"
]
}
}
@@ -1,10 +0,0 @@
{
"owner": {
"username": "wdhdev",
"email": "william@m.is-a.dev"
},
"record": {
"TXT": "660ac3fbb8e294e077d68381ad6aeb"
}
}
@@ -1,10 +0,0 @@
{
"owner": {
"username": "wdhdev",
"email": "william@m.is-a.dev"
},
"record": {
"TXT": "6b3a5de4756e5840afc94698b74712"
}
}
+3 -3
View File
@@ -1,10 +1,10 @@
{ {
"description": "PSL validation record for is-a.dev", "description": "PSL validation record",
"owner": { "owner": {
"username": "is-a-dev", "username": "is-a-dev",
"email": "phenax5@gmail.com" "email": ""
}, },
"record": { "record": {
"TXT": "https://github.com/publicsuffix/list/pull/1949" "TXT": "https://github.com/publicsuffix/list/pull/2225"
} }
} }
-12
View File
@@ -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"
}
}
-12
View File
@@ -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"
}
}
+1 -1
View File
@@ -5,8 +5,8 @@
}, },
"record": { "record": {
"A": [ "A": [
"185.199.108.153",
"185.199.109.153", "185.199.109.153",
"185.199.111.153",
"185.199.110.153", "185.199.110.153",
"185.199.111.153" "185.199.111.153"
], ],
+1 -1
View File
@@ -7,6 +7,6 @@
"record": { "record": {
"URL": "https://asnct_bio.t.me", "URL": "https://asnct_bio.t.me",
"TXT": ["mailru-domain: wDSaV835X4LZyKsP", "v=spf1 redirect=_spf.mail.ru"], "TXT": ["mailru-domain: wDSaV835X4LZyKsP", "v=spf1 redirect=_spf.mail.ru"],
"MX": "emx.mail.ru" "MX": ["emx.mail.ru"]
} }
} }
+1 -1
View File
@@ -5,6 +5,6 @@
"email": "orangc@proton.me" "email": "orangc@proton.me"
}, },
"record": { "record": {
"CNAME": "edge.redirect.pizza" "NS": ["nucum.ns.cloudflare.com", "tate.ns.cloudflare.com"]
} }
} }
+12
View File
@@ -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"
}
}
-13
View File
@@ -1,13 +0,0 @@
{
"owner": {
"username": "Choudery",
"email": "blreaderdammy@gmail.com"
},
"record": {
"MX": [
"john.ns.cloudflare.com",
"sharon.ns.cloudflare.com"
]
},
"description": "Choudery coding"
}
-11
View File
@@ -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"
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"owner": {
"username": "TerraPlayz",
"email": "omsenjalia+github@gmail.com"
},
"record": {
"A": ["69.30.249.53"]
}
}
+13
View File
@@ -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"
}
}
+2 -2
View File
@@ -1,9 +1,9 @@
{ {
"owner": { "owner": {
"username": "is-a-dev", "username": "is-a-dev",
"email": "m@is-a.dev" "email": ""
}, },
"record": { "record": {
"CNAME": "edge.redirect.pizza" "URL": "https://discord.gg/is-a-dev-830872854677422150"
} }
} }
-10
View File
@@ -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"
}
}
-12
View File
@@ -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"
}
}
+1 -1
View File
@@ -6,6 +6,6 @@
"email": "" "email": ""
}, },
"record": { "record": {
"URL": "https://www.is-a.dev/docs" "URL": "https://is-a.dev/docs"
} }
} }
-11
View File
@@ -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"
}
}
+1 -1
View File
@@ -6,6 +6,6 @@
"record": { "record": {
"A": ["128.204.223.115"], "A": ["128.204.223.115"],
"TXT": "v=spf1 mx a include:mail9.serv00.com -all", "TXT": "v=spf1 mx a include:mail9.serv00.com -all",
"MX": "mail9.serv00.com" "MX": ["mail9.serv00.com"]
} }
} }
+12
View File
@@ -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"
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"owner": {
"username": "gauravgupta256",
"email": "gauravgupta8652@gmail.com"
},
"record": {
"CNAME": "gauravgupta.is-a.dev"
}
}
+12
View File
@@ -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"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "orxngc",
"discord": "orangc",
"email": "orangc@proton.me"
},
"record": {
"A": ["66.59.209.229"]
}
}
+1 -1
View File
@@ -7,7 +7,7 @@
}, },
"record": { "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"]
} }
} }
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"MX": ["mail.hrsn.net"],
"TXT": "v=spf1 include:_spf.hrsn.net ~all"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"MX": ["mail.hrsn.net"],
"TXT": "v=spf1 include:_spf.hrsn.net ~all"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"URL": "https://github.com/is-a-dev/register"
}
}
+2 -2
View File
@@ -8,8 +8,8 @@
}, },
"record": { "record": {
"MX": [ "MX": [
"mx1.improvmx.com.", "mx1.improvmx.com",
"mx2.improvmx.com." "mx2.improvmx.com"
], ],
"TXT": "v=spf1 include:spf.improvmx.com ~all", "TXT": "v=spf1 include:spf.improvmx.com ~all",
"A": [ "A": [
-11
View File
@@ -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"
}
}
-12
View File
@@ -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"
}
}
+3 -6
View File
@@ -1,13 +1,10 @@
{ {
"owner": { "owner": {
"username": "omsenjalia", "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": { "record": {
"MX": [ "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"]
"mx1.improvmx.com",
"mx2.improvmx.com"
],
"TXT": "v=spf1 include:spf.improvmx.com ~all"
} }
} }
+1 -2
View File
@@ -5,7 +5,6 @@
"OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q" "OWL":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiUlNBLU9BRVAiLCJraWQiOiJaa1VsRmRqVThiUEstLXVVM2JJR09PVHFYYVFFS1ZINFVXOW53MTR6WTJnIn0.RROLuTVz1Yiu7gYQ78NhdEWblxDBcdAtgXSrSKBX4s-6C15Gbg1gvdalVJRUFfhvt7FQ1HEtB7Wwz0Rdn1Jxk7Eqxp2s116sCmWwviCoh8RfWUEkWt9k4csRDjBtnwijFrfSv5gjf67gAe1dyoryQjg1ZFf9dlmwmaQtiJNKVkjlBsNAYNph9-CsYK8a0-TI-GVXung0rFjd-222TQij66CYBd7qitAvTPEypCBarB2SyBrN30wLTS9NjB-bSpmJZwcZO8CQ2obcYdMfVQ0nZgXBJhkbwjtGWfWTS-3AnCeLF48mT-9DCsVoraLb6DLoJoPB-9g4dim-tSZwC5pQ.OsIglUJ8OXge3R5CTVoEEw.YS-YtdmeJZKK1TEkERBJlH9RKdKcMynvcB5PrUsKXY4FJhgfrPoqF_JOAXO4tyYqwJzWnNM0hfd4WxqLi3KmjXToHxRAzdiFu1f4iiBfX68ABHoycHXkose4AHWe54a8.UazMc8kLEVvxHs2YN0DC3Q"
}, },
"record": { "record": {
"MX": ["mx.zoho.in", "mx2.zoho.in", "mx3.zoho.in"], "NS": ["austin.ns.cloudflare.com","sima.ns.cloudflare.com"]
"TXT": "v=spf1 include:zoho.in ~all"
} }
} }
+1 -1
View File
@@ -6,7 +6,7 @@
"record": { "record": {
"MX": [ "MX": [
"mx1.improvmx.com", "mx1.improvmx.com",
"mx1.improvmx.com" "mx2.improvmx.com"
], ],
"TXT": "v=spf1 include:spf.improvmx.com ~all" "TXT": "v=spf1 include:spf.improvmx.com ~all"
} }
+1 -1
View File
@@ -5,6 +5,6 @@
"email": "orangc@proton.me" "email": "orangc@proton.me"
}, },
"record": { "record": {
"CNAME": "edge.redirect.pizza" "NS": ["nucum.ns.cloudflare.com", "tate.ns.cloudflare.com"]
} }
} }
-11
View File
@@ -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"]
}
}
-12
View File
@@ -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"
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"URL": "https://owl.is-a.dev"
}
}
-11
View File
@@ -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"]
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"TXT": "RESERVED FOR REDIRECT URLS"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"owner": {
"username": "is-a-dev",
"email": ""
},
"record": {
"URL": "https://github.com/is-a-dev/register"
}
}
+1 -1
View File
@@ -7,7 +7,7 @@
}, },
"record": { "record": {
"A": ["75.2.60.5"], "A": ["75.2.60.5"],
"MX": "feedback-smtp.us-east-1.amazonses.com", "MX": ["feedback-smtp.us-east-1.amazonses.com"],
"TXT": [ "TXT": [
"v=spf1 include:amazonses.com ~all", "v=spf1 include:amazonses.com ~all",
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDl3uimKrfDsLkGKkuwIhxEi23dmRf1GTyrcfpzF/iSfGrMp5xbDo3+lqN4R3Dx48orvlGbtNxQevx4NPIHU+BAIfRyRkMDzP9X+elTMFkHqHtly5OswQJd0Jciax8WqPoTfLo7+cjDyY0lejoqadUK0gxRe5b5HOLGNUBOCgmCNQIDAQAB" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDl3uimKrfDsLkGKkuwIhxEi23dmRf1GTyrcfpzF/iSfGrMp5xbDo3+lqN4R3Dx48orvlGbtNxQevx4NPIHU+BAIfRyRkMDzP9X+elTMFkHqHtly5OswQJd0Jciax8WqPoTfLo7+cjDyY0lejoqadUK0gxRe5b5HOLGNUBOCgmCNQIDAQAB"
+1 -1
View File
@@ -5,7 +5,7 @@
}, },
"record": { "record": {
"A": ["76.76.21.21"], "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" "TXT": "v=spf1 include:spf.improvmx.com ~all"
} }
} }
+1 -1
View File
@@ -12,7 +12,7 @@
], ],
"MX": [ "MX": [
"mx1.improvmx.com", "mx1.improvmx.com",
"mx2.improvmx.com." "mx2.improvmx.com"
], ],
"TXT": [ "TXT": [
"v=spf1 include:spf.improvmx.com ~all", "v=spf1 include:spf.improvmx.com ~all",
-11
View File
@@ -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"
}
}
-12
View File
@@ -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"
}
}
-11
View File
@@ -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"
}
}
+4 -5
View File
@@ -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" "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": { "record": {
"A": [ "NS": [
"194.60.201.37" "jonah.ns.cloudflare.com",
], "mary.ns.cloudflare.com"
"MX": ["mail.stefdp.lol"], ]
"TXT": ["v=spf1 mx ~all"]
} }
} }
-11
View File
@@ -1,11 +0,0 @@
{
"owner": {
"username": "TerraPlayz",
"email": "omsenjalia@gmail.com",
"discord": "248470317540966443"
},
"record": {
"A": ["11.11.11.11"]
}
}
-11
View File
@@ -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"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"owner": {
"username": "ujjwalshriwal",
"email": "ujjwalshrivastav16@gmail.com"
},
"record": {
"CNAME": "ujjwalshriwal.github.io"
}
}
-12
View File
@@ -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"
}
}
+1 -1
View File
@@ -6,7 +6,7 @@
"record": { "record": {
"MX": [ "MX": [
"mx1.improvmx.com", "mx1.improvmx.com",
"mx1.improvmx.com" "mx2.improvmx.com"
], ],
"TXT": "v=spf1 include:spf.improvmx.com ~all" "TXT": "v=spf1 include:spf.improvmx.com ~all"
} }
+10 -10
View File
@@ -1,10 +1,10 @@
{ {
"owner": { "owner": {
"username": "wdhdev", "username": "wdhdev",
"email": "william@m.is-a.dev" "email": "william@is-a.dev"
}, },
"record": { "record": {
"CNAME": "hrsn.dev" "URL": "https://william.is-a.dev"
} }
} }
+2 -2
View File
@@ -1,10 +1,10 @@
{ {
"owner": { "owner": {
"username": "wdhdev", "username": "wdhdev",
"email": "william@m.is-a.dev" "email": "william@is-a.dev"
}, },
"record": { "record": {
"CNAME": "hrsn.dev" "NS": ["chuck.ns.cloudflare.com", "walk.ns.cloudflare.com"]
} }
} }
+1 -3
View File
@@ -1,11 +1,9 @@
{ {
"description": "The is-a.dev website",
"repo": "https://github.com/is-a-dev/is-a-dev.github.io",
"owner": { "owner": {
"username": "is-a-dev", "username": "is-a-dev",
"email": "" "email": ""
}, },
"record": { "record": {
"CNAME": "is-a-dev.github.io" "CNAME": "is-a.dev"
} }
} }
-27
View File
@@ -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 <phenax5@gmail.com>",
"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"
}
}
-8
View File
@@ -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);
},
};
-17
View File
@@ -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;
-91
View File
@@ -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
-76
View File
@@ -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 };
}
-48
View File
@@ -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!
<a href="https://www.buymeacoffee.com/phenax" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="28" width="119"></a> <a href="https://liberapay.com/phenax" target="_blank"><img src="https://img.shields.io/badge/liberapay-donate-yellow.svg?style=for-the-badge" alt="Liberapay recurring donation button" /></a>
`;
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(),
});
},
};
-11
View File
@@ -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;
-210
View File
@@ -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" });
});
});
});
-421
View File
@@ -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}` },
]);
});
});
});
-8
View File
@@ -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);
});
});
-37
View File
@@ -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);
});
});
-242
View File
@@ -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 }],
]);
});
});
Loaded 100 of 108 files, more files were not shown because too many files have changed in this diff. Show more