feat: adds support for dots in subdomain names

This commit is contained in:
Akshay Nair
2022-03-05 12:52:49 +05:30
parent d08276ed36
commit fccfc53b81
3 changed files with 20 additions and 6 deletions
+4 -1
View File
@@ -4,6 +4,9 @@ To register `my-domain.is-a.dev`, you need to create a `domains/my-domain.json`
### Filename
The file name must pass the following criteria -
> NOTE: You can use `.` (dots) in your file name (for registering `blog.mysubdomain.is-a.dev`) but each of the following criteria must be valid for all part of your subdomain
* Must be alpha-numeric in lowercase with dashes as seperators
* Must be more than 2 characters long
* Must have a `.json` file extension
@@ -25,7 +28,7 @@ In the owner object, the fields `username` and `email` are required. You can how
}
```
If you don't wish to share your email address here, please share your twitter or any other social media account.
If you don't wish to share your email address here, please share your twitter, discord or any other social media account.
```json
{
"owner": {
+5
View File
@@ -55,6 +55,9 @@ describe('validateDomainData', () => {
{ ...defaultDomain, record: { CNAME: 'foobar.com', MX: ['ALT4.ASPMX.L.GOOGLE.COM'] } },
...INVALID_NAMES.map(name => ({ ...defaultDomain, name })).slice(0, 1),
{ ...defaultDomain, record: { TXT: ['foobar wow nice!!!'] } },
{ ...defaultDomain, name: 'a.b' },
{ ...defaultDomain, name: 'ww2.baa' },
{ ...defaultDomain, name: 'help.baa' },
];
const validCases = [
@@ -73,6 +76,8 @@ describe('validateDomainData', () => {
{ ...defaultDomain, record: { MX: ['ALT4.ASPMX.L.GOOGLE.COM'] } },
{ ...defaultDomain, record: { TXT: 'foobar wow nice!!!' } },
{ ...defaultDomain, record: { A: ['1.1.1.1'], MX: ['mx1.example.com'] } },
{ ...defaultDomain, name: 'gogo.foo.bar' },
{ ...defaultDomain, name: 'ww9.baa' },
];
it('should return false for invalid data', () => {
+11 -5
View File
@@ -5,7 +5,7 @@ const INVALID_NAMES = require('./invalid-domains.json');
const isValidURL = and([R.is(String), testRegex(/^https?:\/\//ig)]);
const isValidDomain = and([R.is(String), testRegex(/^(([a-z0-9\-]+)\.)+[a-z]+$/ig)]);
const isValidDomain = and([R.is(String), testRegex(/^(([a-z0-9-]+)\.)+[a-z]+$/ig)]);
const validateCnameRecord = type => and([
R.propIs(String, type),
@@ -27,13 +27,19 @@ const validateMXRecord = type => and([
const validateDomainData = validate({
name: {
reason: 'The name of the file is invalid. It must be lowercased, alphanumeric and more than 2 characters long',
reason: 'The name of the file is invalid. It must be lowercased, alphanumeric and each component must be more than 2 characters long',
fn: or([
R.equals('@'),
and([
R.compose(between(2, 100), R.length),
testRegex(/^[a-z0-9-]+$/g),
R.complement(R.includes(R.__, INVALID_NAMES)),
R.is(String),
R.compose(
R.all(and([
R.compose(between(2, 100), R.length),
testRegex(/^[a-z0-9-]+$/g),
R.complement(R.includes(R.__, INVALID_NAMES)),
])),
R.split('.'),
),
])
]),
},