mirror of
https://github.com/tiennm99/is-a-dev.git
synced 2026-10-14 20:17:19 +00:00
Merge branch 'main' into main
This commit is contained in:
108 files changed
+351
-2582
No files matched your search
@@ -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,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
@@ -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
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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"
|
||||||
@@ -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/"
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
node_modules/
|
|
||||||
*.env.production
|
|
||||||
*.log
|
|
||||||
is-a-dev-cert/
|
|
||||||
-22
@@ -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"]
|
|
||||||
|
|
||||||
@@ -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 |
|
||||||
@@ -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
@@ -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.
|
||||||
-15
@@ -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
@@ -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]);
|
||||||
|
}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
services:
|
|
||||||
dev:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./Dockerfile
|
|
||||||
volumes:
|
|
||||||
- ./:/opt/app/code
|
|
||||||
+1
-1
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "denboy0123",
|
|
||||||
"email": "pochtaproverka01@gmail.com"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"TXT": [
|
|
||||||
"FZo9g0GqRYR-fhmWc1QzbycfV5UZIE4bwh42BI81NDQ",
|
|
||||||
"V1N8tuJvEcUtltxMXLRvP0U1_jaAgsSJJ89MgyxpWUk"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "orxngc",
|
|
||||||
"discord": "orangc",
|
|
||||||
"email": "orangc@proton.me"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"TXT": "dh=dff53e3c9534a4606fe07fef0142ab53acf4a0e4"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"owner": {
|
||||||
|
"username": "lingledev",
|
||||||
|
"email": "gideon.lingle2023@gmail.com"
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"TXT": [
|
||||||
|
"dh=21d66ba4bca0c546fa80a877a6d3df57216bd5f5"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "orxngc",
|
|
||||||
"discord": "orangc",
|
|
||||||
"email": "orangc@proton.me"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"TXT": "dh=d27c8c015aa5f1be96c0c468e091a0958dd1c1dc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"owner": {
|
||||||
|
"username": "is-a-dev",
|
||||||
|
"email": ""
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"TXT": "v=DMARC1; p=reject; rua=mailto:b24ae2ebb6744451bec500b161916c03@dmarc-reports.cloudflare.net"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
|
|
||||||
"record": {
|
|
||||||
"TXT": "e0ffcded3e"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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,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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
@@ -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
@@ -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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "Choudery",
|
|
||||||
"email": "blreaderdammy@gmail.com"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"MX": [
|
|
||||||
"john.ns.cloudflare.com",
|
|
||||||
"sharon.ns.cloudflare.com"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"description": "Choudery coding"
|
|
||||||
}
|
|
||||||
@@ -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,9 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "TerraPlayz",
|
|
||||||
"email": "omsenjalia+github@gmail.com"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"A": ["69.30.249.53"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
@@ -6,6 +6,6 @@
|
|||||||
"email": ""
|
"email": ""
|
||||||
},
|
},
|
||||||
"record": {
|
"record": {
|
||||||
"URL": "https://www.is-a.dev/docs"
|
"URL": "https://is-a.dev/docs"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
@@ -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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "gauravgupta256",
|
|
||||||
"email": "gauravgupta8652@gmail.com"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"CNAME": "gauravgupta.is-a.dev"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "orxngc",
|
|
||||||
"discord": "orangc",
|
|
||||||
"email": "orangc@proton.me"
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"A": ["66.59.209.229"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"MX": ["mail.hrsn.net"],
|
|
||||||
"TXT": "v=spf1 include:_spf.hrsn.net ~all"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"MX": ["mail.hrsn.net"],
|
|
||||||
"TXT": "v=spf1 include:_spf.hrsn.net ~all"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
|
|
||||||
"record": {
|
|
||||||
"URL": "https://github.com/is-a-dev/register"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -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": [
|
||||||
|
|||||||
@@ -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,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
@@ -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
@@ -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
@@ -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
@@ -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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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,9 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"URL": "https://owl.is-a.dev"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
"record": {
|
|
||||||
"TXT": "RESERVED FOR REDIRECT URLS"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "is-a-dev",
|
|
||||||
"email": ""
|
|
||||||
},
|
|
||||||
|
|
||||||
"record": {
|
|
||||||
"URL": "https://github.com/is-a-dev/register"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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",
|
||||||
|
|||||||
@@ -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,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,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
@@ -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"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"owner": {
|
|
||||||
"username": "TerraPlayz",
|
|
||||||
"email": "omsenjalia@gmail.com",
|
|
||||||
"discord": "248470317540966443"
|
|
||||||
},
|
|
||||||
|
|
||||||
"record": {
|
|
||||||
"A": ["11.11.11.11"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"owner": {
|
||||||
|
"username": "ujjwalshriwal",
|
||||||
|
"email": "ujjwalshrivastav16@gmail.com"
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"CNAME": "ujjwalshriwal.github.io"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -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;
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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 };
|
|
||||||
}
|
|
||||||
@@ -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(),
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -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;
|
|
||||||
|
|
||||||
@@ -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" });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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}` },
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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
Reference in new issue
Block a user