Skip to content

Commit 391aae2

Browse files
add delegation validation schemas
Joi schemas for delegation CRUD (GET, POST, PUT, DELETE) and updated index exports. Bump to 0.8.10. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent f7268c7 commit 391aae2

4 files changed

Lines changed: 83 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
66

77
### Unreleased
88

9+
### [0.8.10] - 2026-04-12
10+
11+
- delegation: add validation schemas for GET, POST, PUT, DELETE (#22)
12+
913
### [0.8.9] - 2026-03-29
1014

1115
- group: GET can return one group or array

index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as delegation from './lib/delegation.js'
12
import * as group from './lib/group.js'
23
import * as nameserver from './lib/nameserver.js'
34
import * as permission from './lib/permission.js'
@@ -6,9 +7,10 @@ import * as user from './lib/user.js'
67
import * as zone from './lib/zone.js'
78
import * as zone_record from './lib/zone_record.js'
89

9-
export { group, nameserver, permission, session, user, zone, zone_record }
10+
export { delegation, group, nameserver, permission, session, user, zone, zone_record }
1011

1112
export default {
13+
delegation,
1214
group,
1315
nameserver,
1416
permission,

lib/delegation.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import Joi from 'joi'
2+
3+
import * as shared from './shared.js'
4+
5+
const objectType = Joi.string().valid('ZONE', 'ZONERECORD', 'NAMESERVER', 'GROUP')
6+
7+
const permBool = Joi.boolean().default(true)
8+
9+
const delegationPerms = {
10+
perm_write: permBool,
11+
perm_delete: permBool,
12+
perm_delegate: permBool,
13+
zone_perm_add_records: permBool,
14+
zone_perm_delete_records: permBool,
15+
}
16+
17+
const delegationObj = Joi.object({
18+
nt_group_id: shared.uint32,
19+
nt_object_id: shared.uint32,
20+
nt_object_type: objectType,
21+
group_name: Joi.string().allow('', null),
22+
delegated_by_id: shared.uint32.allow(null),
23+
delegated_by_name: Joi.string().allow('', null),
24+
25+
delegate_write: Joi.number().integer().min(0).max(1),
26+
delegate_delete: Joi.number().integer().min(0).max(1),
27+
delegate_delegate: Joi.number().integer().min(0).max(1),
28+
delegate_add_records: Joi.number().integer().min(0).max(1),
29+
delegate_delete_records: Joi.number().integer().min(0).max(1),
30+
31+
// zone fields from JOIN (when type=ZONE)
32+
nt_zone_id: shared.uint32,
33+
zone: Joi.string().allow('', null),
34+
description: Joi.string().allow('', null),
35+
36+
// zone record fields from JOIN (when type=ZONERECORD)
37+
nt_zone_record_id: shared.uint32,
38+
}).unknown(true)
39+
40+
export const POST = Joi.object({
41+
gid: shared.uint32.required(),
42+
oid: shared.uint32.required(),
43+
type: objectType.required(),
44+
delegated_by_id: shared.uint32,
45+
delegated_by_name: Joi.string().max(50),
46+
...delegationPerms,
47+
})
48+
49+
export const GET_req = Joi.object({
50+
gid: shared.uint32,
51+
oid: shared.uint32,
52+
type: objectType,
53+
})
54+
55+
export const GET_res = Joi.object({
56+
delegation: Joi.array().items(delegationObj),
57+
meta: shared.meta,
58+
})
59+
60+
export const PUT = Joi.object({
61+
gid: shared.uint32.required(),
62+
oid: shared.uint32.required(),
63+
type: objectType.required(),
64+
perm_write: Joi.boolean(),
65+
perm_delete: Joi.boolean(),
66+
perm_delegate: Joi.boolean(),
67+
zone_perm_add_records: Joi.boolean(),
68+
zone_perm_delete_records: Joi.boolean(),
69+
})
70+
71+
export const DELETE = Joi.object({
72+
gid: shared.uint32.required(),
73+
oid: shared.uint32.required(),
74+
type: objectType.required(),
75+
})

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@nictool/validate",
3-
"version": "0.8.9",
3+
"version": "0.8.10",
44
"description": "NicTool Object Validation",
55
"type": "module",
66
"files": [

0 commit comments

Comments
 (0)