commit fda164e41f0dee1fec4a9fdb5cd7fa175166a0b7 Author: andrewstech Date: Thu Dec 1 18:14:48 2022 +0000 Add files via upload diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e46ba3d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d72af94 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +
+ + + + +
+
+ +[![Tests Status][badge-tests]][actions] +[![Deploy Status][badge-deploy]][deploy] +
+ +Free subdomains for personal sites, open-source projects, and more. Here is a list of supported domain names: + +| Domain name | Features | +|:-------------------------------------:|:---------------------------------------------------------:| +| ⚡ [`*.localplayer.dev`](https://localplayer.dev/) | ![cf][badge-cf] ![dnssec][badge-dnssec] ![ssl][badge-ssl] | +| ⚡ [`*.is-not-a.dev`](https://is-not-a.dev/) | ![cf][badge-cf] ![dnssec][badge-dnssec] ![ssl][badge-ssl] | + +> Wildcards (like `*.foo.is-not-a.dev`) are supported too, but the reason for their registration should be very clear and described in detail. + +[badge-cf]:https://shields.io/badge/%20-cloudflare-blue?logo=cloudflare&style=plastic?cacheSeconds=3600 +[badge-dnssec]:https://shields.io/badge/%20-DNSSEC-blue?logo=moleculer&logoColor=white&style=plastic?cacheSeconds=3600 +[badge-ssl]:https://shields.io/badge/SSL-Required-blue?style=plastic?cacheSeconds=3600 + +## Why? + +First of all, I want to answer one important question - "Why are you giving out domains for free?". Because sometimes I need domains for my pet projects, and instead of buying new domains every time, I decided to buy one for everyone, and use subdomains. And why not share them with the community? + +## Domains settings + +| Option | `*.localplayer.dev` | `*.is-not-a.dev` | +|:--------------------------------------------------------------------------:|:-------------------------:|:-------------------------:| +| [DNSSEC][dnssec] | ✅ | ✅ | +| Email | ❌ | ❌ | +| SSL/TLS * | [Full][ssl-full] | [Full][ssl-full] | +| Always Use HTTPS * | ✅ | ✅ | +| HTTP Strict Transport Security (HSTS) | ✅ | ✅ | +| Minimum TLS Version * | TLS 1.2 | TLS 1.2 | +| Opportunistic Encryption, TLS 1.3 * | ✅ | ✅ | +| WAF (Web Application Firewall) * | ✅ (Medium Security Level) | ✅ (Medium Security Level) | +| Browser Integrity Check * | ✅ | ✅ | +| [Caching Level][caching-levels], Browser Cache TTL * | Standard, 4 hours | Standard, 4 hours | +| [Crawler Hints][crawler-hints] * | ✅ | ✅ | +| [HTTP/2][http2], [HTTP/2 to Origin][http2-to-origin], HTTP/3 (with QUIC) * | ✅ | ✅ | +| [0-RTT Connection Resumption][0rtt] * | ✅ | ✅ | +| [gRPC][grpc], WebSockets * | ✅ | ✅ | +| [Pseudo IPv4][pseudo-ipv4] * | Add header | Add header | +| IP Geolocation (HTTP header `CF-IPCountry`) * | ✅ | ✅ | +| Maximum Upload Size * | 100 MB | 100 MB | + +> `*` Available only when proxying (`"proxy": true`) is enabled + +[dnssec]:https://developers.cloudflare.com/dns/additional-options/dnssec +[ssl-full]:https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full/ +[ssl-flex]:https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/flexible/ +[caching-levels]:https://developers.cloudflare.com/cache/how-to/set-caching-levels +[crawler-hints]:https://blog.cloudflare.com/crawler-hints-how-cloudflare-is-reducing-the-environmental-impact-of-web-searches/ +[http2]:https://www.cloudflare.com/website-optimization/http2/what-is-http2/ +[http2-to-origin]:https://developers.cloudflare.com/cache/how-to/enable-http2-to-origin +[0rtt]:https://developers.cloudflare.com/fundamentals/network/0-rtt-connection-resumption/ +[grpc]:https://support.cloudflare.com/hc/en-us/articles/360050483011 +[pseudo-ipv4]:https://support.cloudflare.com/hc/en-us/articles/229666767 + +# How to get one? + +1. Star and [fork](https://github.com/open-domains/Register/fork) this repository (follow [this guide](https://github.com/firstcontributions/first-contributions) if you don't know how to make a contributions) +2. Add a new file called `..json` in the `./domains` folder to register `` subdomain +3. Edit it (below is just an **example**, provide a **valid** JSON file with your needs, the format is very strict; format you can [check here](https://jsonlint.com/)): + +```json +{ + "$schema": "../schemas/domain.schema.json", + "description": "", + "domain": "", + "subdomain": "", + "owner": { + "repo": "", + "email": "" + }, + "record": { + "CNAME": "", + "TXT": ["list", "of", "required", "txt", "records"], + "A": ["list", "of", "IPv4", "addresses", "like", "a", "127.0.0.1"], + "AAAA": ["list", "of", "IPv6", "addresses", "like", "a", "::1"], + "NS": ["list", "of", "nameservers"] + }, + "proxy": false // disable the CF proxy, proxying is always enabled by default +} +``` + +4. Your pull request will be reviewed and merged. Please, don't ignore the PR checklist. If you ignore this repository rules, your PR will be ignored too. _Make sure to keep an eye on it in case we need you to make any changes!_ +5. After the pull request is merged, please allow up to 24 hours for the changes to propagate _(usually, it takes 5..15 minutes)_ +6. Enjoy your new domain! + +> Domains, used for illegal purposes will be removed and permanently banned. Please, provide a clear description of your resource in the PR. + +## If you don't know... + +- What is GitHub pages and how to set up a custom domain, read the [docs here](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site) +- The difference between `A`, `CNAME`, and other record types, the article on Wikipedia [is here](https://en.wikipedia.org/wiki/List_of_DNS_record_types) + +> 🔍 A few similar services can be [found here](https://free-for.dev/#/?id=domain). + +[badge-tests]:https://img.shields.io/github/workflow/status/open-domains/Register/tests?label=tests&logo=github&style=for-the-badge +[badge-deploy]:https://img.shields.io/github/workflow/status/open-domains/Register/deploy?label=deploy&logo=github&style=for-the-badge + +[actions]:https://github.com/open-domains/Register/actions +[deploy]:https://github.com/open-domains/Register/actions/workflows/deploy.yml + +# This repo was forked from +https://github.com/tarampampam/free-domains diff --git a/dnsconfig.js b/dnsconfig.js new file mode 100644 index 0000000..a677310 --- /dev/null +++ b/dnsconfig.js @@ -0,0 +1,98 @@ +var regNone = NewRegistrar("none") +var providerCf = DnsProvider(NewDnsProvider("cloudflare")) + +var proxy = { // https://stackexchange.github.io/dnscontrol/providers/cloudflare + on: {"cloudflare_proxy": "on"}, + off: {"cloudflare_proxy": "off"} +} + +/** + * Note: glob() is only an internal undocumented helper function (maybe risky). + * + * @param {String} filesPath + * @returns {{ + * name: string, + * data: { + * description: string, + * domain: string, + * subdomain: string, + * owner?: {repo?: string, email?: string}, + * record: {TXT?: string[], A?: string[], AAAA?: string[], CNAME?: string, NS?: string[]}, + * proxy?: boolean + * }}[]} + */ +function getDomainsList(filesPath) { + var result = [] + var files = glob.apply(null, [filesPath, true, '.json']) + + for (var i = 0; i < files.length; i++) { + var basename = files[i].split('/').reverse()[0] + var name = basename.split('.')[0] + + result.push({name: name, data: require(files[i])}) + } + + return result +} + +var domains = getDomainsList('./domains') + +/** + * @type {{}} + */ +var commit = {} + +for (var idx in domains) { + var domainData = domains[idx].data + var proxyState = proxy.on // enabled by default + + if (!commit[domainData.domain]) { + commit[domainData.domain] = [] + } + + if (domainData.proxy === false) { + proxyState = proxy.off + } + + if (domainData.record.TXT) { + for (var txt in domainData.record.TXT) { + commit[domainData.domain].push( + TXT(domainData.subdomain, domainData.record.TXT[txt]) // https://stackexchange.github.io/dnscontrol/js#TXT + ) + } + } + + if (domainData.record.CNAME) { + commit[domainData.domain].push( + CNAME(domainData.subdomain, domainData.record.CNAME, proxyState) // https://stackexchange.github.io/dnscontrol/js#CNAME + ) + } + + if (domainData.record.A) { + for (var a in domainData.record.A) { + commit[domainData.domain].push( + A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) // https://stackexchange.github.io/dnscontrol/js#A + ) + } + } + + if (domainData.record.AAAA) { + for (var aaaa in domainData.record.AAAA) { + commit[domainData.domain].push( + AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) // https://stackexchange.github.io/dnscontrol/js#AAAA + ) + } + } + + if (domainData.record.NS) { + for (var ns in domainData.record.NS) { + commit[domainData.domain].push( + NS(domainData.subdomain, domainData.record.NS[ns]) // https://stackexchange.github.io/dnscontrol/js#NS + ) + } + } +} + +for (var domainName in commit) { + D(domainName, regNone, providerCf, commit[domainName]) +} diff --git a/domains/@.is-not-a.dev.json b/domains/@.is-not-a.dev.json new file mode 100644 index 0000000..6cc3438 --- /dev/null +++ b/domains/@.is-not-a.dev.json @@ -0,0 +1,15 @@ +{ + "$schema": "../schemas/domain.schema.json", + "description": "Root domain", + "domain": "is-not-a.dev", + "subdomain": "@", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=spf1 -all" + ] + }, + "proxy": false +} diff --git a/domains/@.localplayer.dev.json b/domains/@.localplayer.dev.json new file mode 100644 index 0000000..5f5e4ad --- /dev/null +++ b/domains/@.localplayer.dev.json @@ -0,0 +1,27 @@ +{ + "$schema": "../schemas/domain.schema.json", + "description": "Root domain", + "domain": "localplayer.dev", + "subdomain": "@", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=spf1 -all" + ], + "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" + ] + }, + "proxy": false +} diff --git a/domains/service/dkim.is-not-a.dev.json b/domains/service/dkim.is-not-a.dev.json new file mode 100644 index 0000000..a22a78d --- /dev/null +++ b/domains/service/dkim.is-not-a.dev.json @@ -0,0 +1,14 @@ +{ + "$schema": "../../schemas/domain.schema.json", + "description": "DKIM record", + "domain": "is-an.app", + "subdomain": "*._domainkey", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=DKIM1; p=" + ] + } +} diff --git a/domains/service/dkim.localplayer.dev.json b/domains/service/dkim.localplayer.dev.json new file mode 100644 index 0000000..88ccbbe --- /dev/null +++ b/domains/service/dkim.localplayer.dev.json @@ -0,0 +1,14 @@ +{ + "$schema": "../../schemas/domain.schema.json", + "description": "DKIM record", + "domain": "1bt.uk", + "subdomain": "*._domainkey", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=DKIM1; p=" + ] + } +} diff --git a/domains/service/dmarc.is-not-a.dev.json b/domains/service/dmarc.is-not-a.dev.json new file mode 100644 index 0000000..d035d67 --- /dev/null +++ b/domains/service/dmarc.is-not-a.dev.json @@ -0,0 +1,14 @@ +{ + "$schema": "../../schemas/domain.schema.json", + "description": "DMARC record", + "domain": "is-an.app", + "subdomain": "_dmarc", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;" + ] + } +} diff --git a/domains/service/dmarc.localplayer.dev.json b/domains/service/dmarc.localplayer.dev.json new file mode 100644 index 0000000..df36971 --- /dev/null +++ b/domains/service/dmarc.localplayer.dev.json @@ -0,0 +1,14 @@ +{ + "$schema": "../../schemas/domain.schema.json", + "description": "DMARC record", + "domain": "1bt.uk", + "subdomain": "_dmarc", + "owner": { + "repo": "https://github.com/open-domains/Register" + }, + "record": { + "TXT": [ + "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;" + ] + } +} diff --git a/schemas/domain.schema.json b/schemas/domain.schema.json new file mode 100644 index 0000000..d3a70ac --- /dev/null +++ b/schemas/domain.schema.json @@ -0,0 +1,398 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "description": "Path to the schema file" + }, + "description": { + "type": "string", + "minLength": 4 + }, + "domain": { + "type": "string", + "enum": [ + "1bt.uk", + "is-an.app" + ] + }, + "subdomain": { + "type": "string", + "pattern": "^([a-z0-9_*.-]{2,64}|@)$", + "not": { + "enum": [ + "*", + "a11y", + "about", + "account", + "accounts", + "ad", + "ads", + "admin", + "admins", + "answer", + "answers", + "api", + "apis", + "app", + "apps", + "archive", + "archives", + "array", + "arrays", + "asm", + "async", + "awesome", + "backup", + "backups", + "base", + "basic", + "basics", + "blog", + "blogs", + "book", + "books", + "bot", + "bots", + "browser", + "browsers", + "bug", + "bugs", + "build", + "builds", + "business", + "career", + "cdn", + "center", + "chat", + "chats", + "client", + "clients", + "cloud", + "code", + "company", + "console", + "contact", + "contacts", + "cookie", + "cookies", + "copyright", + "copyrights", + "core", + "css", + "data", + "db", + "ddns", + "deal", + "debug", + "demo", + "demos", + "dev", + "devs", + "develop", + "developer", + "developers", + "dir", + "dirs", + "dns", + "doc", + "docs", + "domain", + "domains", + "donate", + "dyn", + "ecma", + "editor", + "email", + "emails", + "es2015", + "faq", + "faqs", + "feed", + "file", + "find", + "free", + "front", + "ftp", + "function", + "functions", + "fund", + "funds", + "game", + "games", + "get", + "git", + "global", + "globals", + "group", + "groups", + "headquarter", + "help", + "home", + "homepage", + "host", + "hq", + "html", + "i18n", + "imap", + "index", + "info", + "io", + "js", + "json", + "l10n", + "legal", + "legals", + "libraries", + "lib", + "license", + "licenses", + "like", + "link", + "live", + "log", + "logs", + "login", + "logo", + "logos", + "logout", + "loop", + "love", + "mail", + "main", + "map", + "maps", + "market", + "master", + "media", + "meet", + "member", + "members", + "mobile", + "mobiles", + "mx", + "my", + "native", + "net", + "network", + "now", + "ns", + "ns1", + "ns2", + "online", + "open", + "orig", + "origin", + "page", + "pages", + "password", + "passwords", + "permalink", + "permalinks", + "plain", + "pop3", + "portal", + "portals", + "pub", + "pubs", + "raw", + "readme", + "regex", + "register", + "registration", + "remote", + "rest", + "root", + "roots", + "rss", + "run", + "script", + "scripts", + "secure", + "serv", + "server", + "servers", + "service", + "services", + "shop", + "shops", + "site", + "sites", + "smtp", + "socket", + "source", + "sources", + "ssh", + "standard", + "standards", + "store", + "stores", + "sub", + "subs", + "subdomain", + "subdomains", + "subscribe", + "support", + "sync", + "system", + "systems", + "tag", + "tags", + "team", + "teams", + "tech", + "terminal", + "test", + "this", + "that", + "tip", + "tool", + "tools", + "topic", + "topics", + "translate", + "trend", + "trends", + "trick", + "tricks", + "trust", + "trusted", + "tutorial", + "tutorials", + "tweak", + "tweaks", + "type", + "types", + "unit", + "units", + "united", + "unsubscribe", + "uri", + "uris", + "url", + "urls", + "user", + "users", + "util", + "utils", + "utility", + "validate", + "var", + "vars", + "virtual", + "vpn", + "vps", + "wasm", + "watch", + "web", + "webmail", + "webmaster", + "world", + "ww", + "ww1", + "ww2", + "ww3", + "www", + "www1", + "www2", + "www3", + "xml" + ] + } + }, + "owner": { + "type": "object", + "additionalProperties": false, + "properties": { + "repo": { + "type": "string", + "description": "Path to the github repository" + }, + "email": { + "type": "string", + "description": "Email address" + } + } + }, + "record": { + "type": "object", + "additionalProperties": false, + "properties": { + "TXT": { + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "A": { + "type": "array", + "items": { + "type": "string", + "pattern": "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$" + } + }, + "AAAA": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$" + } + }, + "CNAME": { + "type": "string", + "minLength": 1, + "pattern": "^[a-z0-9_./-]*\\.$" + }, + "NS": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-z0-9._-]{3,}$" + } + } + }, + "anyOf": [ + { + "required": [ + "TXT" + ] + }, + { + "required": [ + "A" + ] + }, + { + "required": [ + "AAAA" + ] + }, + { + "required": [ + "CNAME" + ] + }, + { + "required": [ + "NS" + ] + } + ] + }, + "proxy": { + "type": "boolean", + "default": true + } + }, + "required": [ + "$schema", + "description", + "domain", + "subdomain", + "record" + ] +} diff --git a/web/browserconfig.xml b/web/browserconfig.xml new file mode 100644 index 0000000..70cb989 --- /dev/null +++ b/web/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/web/favicon.ico b/web/favicon.ico new file mode 100644 index 0000000..a095089 Binary files /dev/null and b/web/favicon.ico differ diff --git a/web/favicon/android-chrome-144x144.png b/web/favicon/android-chrome-144x144.png new file mode 100644 index 0000000..a88644e Binary files /dev/null and b/web/favicon/android-chrome-144x144.png differ diff --git a/web/favicon/apple-touch-icon.png b/web/favicon/apple-touch-icon.png new file mode 100644 index 0000000..903e14b Binary files /dev/null and b/web/favicon/apple-touch-icon.png differ diff --git a/web/favicon/favicon-16x16.png b/web/favicon/favicon-16x16.png new file mode 100644 index 0000000..0e08cfc Binary files /dev/null and b/web/favicon/favicon-16x16.png differ diff --git a/web/favicon/favicon-32x32.png b/web/favicon/favicon-32x32.png new file mode 100644 index 0000000..b618167 Binary files /dev/null and b/web/favicon/favicon-32x32.png differ diff --git a/web/favicon/mstile-150x150.png b/web/favicon/mstile-150x150.png new file mode 100644 index 0000000..c866095 Binary files /dev/null and b/web/favicon/mstile-150x150.png differ diff --git a/web/favicon/safari-pinned-tab.svg b/web/favicon/safari-pinned-tab.svg new file mode 100644 index 0000000..e6def5d --- /dev/null +++ b/web/favicon/safari-pinned-tab.svg @@ -0,0 +1,17 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..8449404 --- /dev/null +++ b/web/index.html @@ -0,0 +1,165 @@ + + + + + + A free subdomain for developers on the web + + + + + + + + + + + + + +
+
+ https://.is-an.app +
+
+

+ Are you a developer exploring an awesome domain name for your application, personal website, or project? + You came to the right place! +

+

+ This service offers a handy subdomain service for you to have a subdomain via CNAME, + A, AAAA, or NS DNS records. + In limited cases, you can use a wildcard subdomain. +

+

+ Fork the repository, add a subdomain, and send a Pull Request. We will make it + work! +

+

+ Crafted with ❤ by @tarampampam +

+
+
+ + + + + diff --git a/web/robots.txt b/web/robots.txt new file mode 100644 index 0000000..bfa9a31 --- /dev/null +++ b/web/robots.txt @@ -0,0 +1,4 @@ +User-agent: ia_archiver +Disallow: / + +User-agent: * diff --git a/web/webmanifest.json b/web/webmanifest.json new file mode 100644 index 0000000..634e07a --- /dev/null +++ b/web/webmanifest.json @@ -0,0 +1,14 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/favicon/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +}