Skip to content

Commit

Permalink
feat(nameserver): added NS validation
Browse files Browse the repository at this point in the history
  • Loading branch information
msimerson committed Feb 7, 2024
1 parent 7874c83 commit 8578e07
Show file tree
Hide file tree
Showing 9 changed files with 455 additions and 10 deletions.
103 changes: 100 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,104 @@ Validation class for objects in NicTool. Analgous to Nictool/../\*/Sanity in v2.
✔ rejects if first character is not alphanumeric: .test
✔ rejects if first character is not alphanumeric: @test
nameserver
name
✔ rejects missing
✔ accepts valid: good-ns.tld.
✔ accepts valid: a.b.c.
✔ accepts valid: host.tld.
✔ accepts valid: host.name.
✔ accepts valid: valid-ns.sld.
✔ accepts valid: wooki.tld.
✔ rejects invalid: -bad_ns
✔ rejects invalid: bad.-domain
✔ rejects invalid: host
✔ rejects invalid: bad_ns
✔ rejects invalid: über
✔ rejects invalid: ns..somewhere.com.
✔ rejects invalid: ns.-something.com.
✔ rejects invalid: a.b~d.com.
✔ rejects invalid: a.b`d.com.
✔ rejects invalid: a.b!d.com.
✔ rejects invalid: a.b@d.com.
✔ rejects invalid: a.b$d.com.
✔ rejects invalid: a.b%d.com.
✔ rejects invalid: a.b^d.com.
✔ rejects invalid: a.b&d.com.
✔ rejects invalid: a.b*d.com.
✔ rejects invalid: a.b(d.com.
✔ rejects invalid: a.b)d.com.
✔ rejects invalid: a.b_d.com.
✔ rejects invalid: a.b+d.com.
✔ rejects invalid: a.b=d.com.
✔ rejects invalid: a.b[d.com.
✔ rejects invalid: a.b]d.com.
✔ rejects invalid: a.b\d.com.
✔ rejects invalid: a.b/d.com.
✔ rejects invalid: a.b|d.com.
✔ rejects invalid: a.b?d.com.
✔ rejects invalid: a.b>d.com.
✔ rejects invalid: a.b<d.com.
✔ rejects invalid: a.b"d.com.
✔ rejects invalid: a.b'd.com.
✔ rejects invalid: a.b:d.com.
✔ rejects invalid: a.b;d.com.
✔ rejects invalid: a.b,d.com.
✔ rejects invalid: a.b#d.com.
✔ rejects invalid: a.b{d.com.
✔ rejects invalid: a.b}d.com.
✔ rejects invalid: a.b d.com.
✔ rejects invalid: a.b
d.com.
export_type
✔ rejects missing
✔ accepts valid: bind
✔ accepts valid: djbdns
✔ accepts valid: knot
✔ accepts valid: nsd
✔ accepts valid: maradns
✔ accepts valid: powerdns
✔ accepts valid: dynect
✔ rejects invalid: cryptic
✔ rejects invalid: fuzzy
✔ rejects invalid: yitizg
✔ rejects invalid: bin
✔ rejects invalid: djbs
✔ rejects invalid: DJB
✔ rejects invalid: BIND
✔ rejects invalid: NT
nt_group_id
✔ accepts valid
✔ rejects missing
✔ accepts valid: 1
✔ rejects invalid: abc
address
✔ accepts valid
✔ rejects missing
✔ accepts valid: 1.2.3.4
✔ rejects invalid: 1.x.2.3
✔ rejects invalid: .1.2.3
✔ rejects invalid: 1234.1.2.3
✔ rejects invalid: 256.2.3.4
✔ rejects invalid: 1.-.2.3
✔ rejects invalid: 1.2.3
✔ rejects invalid: 1.2
✔ rejects invalid: 1
✔ rejects invalid: 1.2.3.
✔ rejects invalid: -1.2.3.4
✔ rejects invalid: 1. .3.4
✔ rejects invalid: 1.2,3.4
✔ rejects invalid: 1.,.3.4
ttl
✔ accepts valid
✔ rejects missing
✔ rejects invalid: -299
✔ rejects invalid: -2592001
✔ rejects invalid: -2
✔ rejects invalid: -1
✔ rejects invalid: 2147483648
✔ rejects invalid: oops
user
username
✔ accepts valid
Expand Down Expand Up @@ -98,10 +196,9 @@ Validation class for objects in NicTool. Analgous to Nictool/../\*/Sanity in v2.
✔ accepts a strong password
✔ rejects missing
✔ rejects too short password
- rejects password contains username
rejects most common password strings
77 passing (17ms)
1 pending
168 passing (35ms)
```
2 changes: 1 addition & 1 deletion lib/group.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ exports.group = Joi.object({
name: Joi.string()
.min(3)
.max(255)
.pattern(new RegExp('^[a-zA-Z0-9 _.@\'\-]+$'))
.pattern(new RegExp("^[a-zA-Z0-9 _.@'-]+$"))
.pattern(new RegExp('^[a-zA-Z0-9]'))
.required(),
deleted: Joi.boolean(),
Expand Down
51 changes: 51 additions & 0 deletions lib/nameserver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const Joi = require('joi')

const permission = require('./permission')

exports.nameserver = Joi.object({
nt_nameserver_id: Joi.number().integer().greater(-1),

nt_group_id: Joi.number().integer().greater(0).required(),

name: Joi.string()
.min(2)
.max(127)
.domain({ allowFullyQualified: true, tlds: false })
.pattern(/\.$/)
.required(),

ttl: Joi.number().integer().greater(-1).max(2147483647).required(),

description: Joi.string().empty('').max(255),

address: Joi.string()
.ip({ version: ['ipv4'], cidr: 'forbidden' })
.min(7)
.max(15)
.required(),

address6: Joi.string()
.ip({ version: ['ipv6'], cidr: 'forbidden' })
.min(2)
.max(39),

remote_login: Joi.string().max(127),

logdir: Joi.string().empty('').max(255),

datadir: Joi.string().empty('').min(2).max(255),

export_interval: Joi.number().integer().greater(-1).max(65535),

export_serials: Joi.boolean(),

export_status: Joi.string().max(255),

export_type: Joi.string()
.valid('bind', 'djbdns', 'knot', 'nsd', 'maradns', 'powerdns', 'dynect')
.required(),

deleted: Joi.boolean(),

permission: permission.permission,
})
1 change: 1 addition & 0 deletions lib/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ exports.user = Joi.object({
.minOfLowercase(2)
.minOfUppercase(2)
.minOfNumeric(2)
.doesNotInclude(['password', 'abc', '123', 'asdf'])
.required(),

nt_user_id: Joi.number().integer().positive(),
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@nictool/nt-validate",
"version": "0.3.0",
"version": "0.4.0",
"description": "NicTool Object Validation",
"main": "index.js",
"directories": {
Expand Down Expand Up @@ -41,6 +41,6 @@
},
"dependencies": {
"joi": "^17.12.1",
"joi-password": "^4.1.1"
"joi-password": "^4.2.0"
}
}
9 changes: 9 additions & 0 deletions test/fixtures/nameserver.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"nt_nameserver_id": 3,
"nt_group_id": 1,
"name": "ns.tld.",
"address": "1.2.3.4",
"export_type": "djbdns",
"ttl": 3600,
"deleted": false
}
2 changes: 1 addition & 1 deletion test/group.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ describe('group', function () {
})
}

for (const t of [ '-test', '_test', `'test`, '.test', '@test' ]) {
for (const t of ['-test', '_test', `'test`, '.test', '@test']) {
it(`rejects if first character is not alphanumeric: ${t}`, () => {
const testCase = JSON.parse(JSON.stringify(testGroup))
testCase.name = t
Expand Down
Loading

0 comments on commit 8578e07

Please sign in to comment.