Skip to content

Commit b38c5bf

Browse files
authored
Release v3.0.0-alpha.5 (#31)
- feat(lib/zone): added, with tests, fixes #22 - feat(lib/zone_record): added, with tests, fixes #23 - feat: default GET sets deleted=false - group, nameserver, permission, user, zone - sql: return indicative boolean for delete - test(zr): added maps from NT SQL 2 to dns-rr std formats * feat(zr): added dbToObject and objectToDb * user: avoid logging auth data * feat(zrs): test every type of zone record
1 parent ad0f021 commit b38c5bf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1044
-108
lines changed

.github/FUNDING.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# These are supported funding model platforms
2+
3+
github: msimerson

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ name: CI
22

33
on:
44
push:
5+
paths-ignore:
6+
- '*.md'
57
pull_request:
68

79
env:

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33
### Unreleased
44

55

6+
### [3.0.0-alpha.5] - 2024-03-06
7+
8+
- feat(lib/zone): added, with tests, fixes #22
9+
- feat(lib/zone_record): added, with tests, fixes #23
10+
- feat: default GET sets deleted=false
11+
- group, nameserver, permission, user, zone
12+
- sql: return indicative boolean for delete
13+
- test(zr): added maps from NT SQL 2 to dns-rr std formats
14+
615
### [3.0.0-alpha.4] - 2024-03-05
716

817
- feat(lib/nameserver): added, with tests
@@ -21,3 +30,4 @@
2130

2231
[3.0.0-alpha.3]: https://github.com/NicTool/api/releases/tag/3.0.0-alpha.3
2332
[3.0.0-alpha.4]: https://github.com/NicTool/api/releases/tag/3.0.0-alpha.4
33+
[3.0.0-alpha.5]: https://github.com/NicTool/api/releases/tag/3.0.0-alpha.5

lib/group.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ class Group {
2121
}
2222

2323
async get(args) {
24+
args = JSON.parse(JSON.stringify(args))
25+
if (args.deleted === undefined) args.deleted = false
26+
2427
const rows = await Mysql.execute(
2528
...Mysql.select(
2629
`SELECT nt_group_id AS id
@@ -31,10 +34,11 @@ class Group {
3134
mapToDbColumn(args, groupDbMap),
3235
),
3336
)
34-
for (const r of rows) {
37+
for (const row of rows) {
3538
for (const b of boolFields) {
36-
r[b] = r[b] === 1
39+
row[b] = row[b] === 1
3740
}
41+
if (args.deleted === false) delete row.deleted
3842
}
3943
return rows
4044
}
@@ -43,30 +47,30 @@ class Group {
4347
if (!args.id) return false
4448
const id = args.id
4549
delete args.id
46-
// Mysql.debug(1)
4750
const r = await Mysql.execute(
4851
...Mysql.update(
4952
`nt_group`,
5053
`nt_group_id=${id}`,
5154
mapToDbColumn(args, groupDbMap),
5255
),
5356
)
54-
// console.log(r)
5557
return r.changedRows === 1
5658
}
5759

5860
async delete(args) {
59-
await Mysql.execute(`UPDATE nt_group SET deleted=? WHERE nt_group_id=?`, [
60-
args.deleted ?? 1,
61-
args.id,
62-
])
63-
return true
61+
const r = await Mysql.execute(
62+
...Mysql.update(`nt_group`, `nt_group_id=${args.id}`, {
63+
deleted: args.deleted ?? 1,
64+
}),
65+
)
66+
return r.changedRows === 1
6467
}
6568

6669
async destroy(args) {
67-
return await Mysql.execute(
70+
const r = await Mysql.execute(
6871
...Mysql.delete(`nt_group`, { nt_group_id: args.id }),
6972
)
73+
return r.affectedRows === 1
7074
}
7175
}
7276

lib/group.test.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ describe('group', function () {
2020
id: testCase.id,
2121
name: testCase.name,
2222
parent_gid: 0,
23-
deleted: false,
2423
})
2524
})
2625

@@ -30,7 +29,6 @@ describe('group', function () {
3029
id: testCase.id,
3130
name: testCase.name,
3231
parent_gid: 0,
33-
deleted: false,
3432
})
3533
})
3634

@@ -41,7 +39,6 @@ describe('group', function () {
4139
id: testCase.id,
4240
name: 'example.net',
4341
parent_gid: 0,
44-
deleted: false,
4542
},
4643
])
4744
assert.ok(await Group.put({ id: testCase.id, name: testCase.name }))
@@ -53,6 +50,6 @@ describe('group', function () {
5350
assert.equal(g[0]?.deleted, true)
5451
await Group.delete({ id: testCase.id, deleted: 0 }) // restore
5552
g = await Group.get({ id: testCase.id })
56-
assert.equal(g[0].deleted, false)
53+
assert.equal(g[0].deleted, undefined)
5754
})
5855
})

lib/nameserver.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class Nameserver {
3535
}
3636

3737
async get(args) {
38+
args = JSON.parse(JSON.stringify(args))
39+
if (args.deleted === undefined) args.deleted = false
40+
3841
if (args.name !== undefined) {
3942
args['ns.name'] = args.name
4043
delete args.name
@@ -61,10 +64,11 @@ class Nameserver {
6164
mapToDbColumn(args, nsDbMap),
6265
),
6366
)
64-
for (const r of rows) {
67+
for (const row of rows) {
6568
for (const b of boolFields) {
66-
r[b] = r[b] === 1
69+
row[b] = row[b] === 1
6770
}
71+
if (args.deleted === false) delete row.deleted
6872
}
6973
return dbToObject(rows)
7074
}
@@ -81,22 +85,23 @@ class Nameserver {
8185
mapToDbColumn(args, nsDbMap),
8286
),
8387
)
84-
// console.log(r)
8588
return r.changedRows === 1
8689
}
8790

8891
async delete(args) {
89-
await Mysql.execute(
90-
`UPDATE nt_nameserver SET deleted=? WHERE nt_nameserver_id=?`,
91-
[args.deleted ?? 1, args.id],
92+
const r = await Mysql.execute(
93+
...Mysql.update(`nt_nameserver`, `nt_nameserver_id=${args.id}`, {
94+
deleted: args.deleted ?? 1,
95+
}),
9296
)
93-
return true
97+
return r.changedRows === 1
9498
}
9599

96100
async destroy(args) {
97-
return await Mysql.execute(
101+
const r = await Mysql.execute(
98102
...Mysql.delete(`nt_nameserver`, { nt_nameserver_id: args.id }),
99103
)
104+
return r.affectedRows === 1
100105
}
101106
}
102107

lib/nameserver.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ describe('nameserver', function () {
4141
assert.equal(g[0]?.deleted, true)
4242
await Nameserver.delete({ id: testCase.id, deleted: 0 }) // restore
4343
g = await Nameserver.get({ id: testCase.id })
44-
assert.equal(g[0].deleted, false)
44+
assert.equal(g[0].deleted, undefined)
4545
})
4646
})

lib/permission.js

Lines changed: 54 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class Permission {
2626
}
2727

2828
async get(args) {
29+
args = JSON.parse(JSON.stringify(args))
30+
if (args.deleted === undefined) args.deleted = false
31+
2932
const query = `SELECT p.nt_perm_id AS id
3033
, p.nt_user_id AS uid
3134
, p.nt_group_id AS gid
@@ -34,8 +37,6 @@ class Permission {
3437
${getPermFields()}
3538
, p.deleted
3639
FROM nt_perm p`
37-
// Mysql.debug(1)
38-
if (args.deleted === undefined) args.deleted = false
3940

4041
const rows = await Mysql.execute(
4142
...Mysql.select(query, mapToDbColumn(args, permDbMap)),
@@ -46,7 +47,9 @@ class Permission {
4647
`permissions.get found ${rows.length} rows for uid ${args.uid}`,
4748
)
4849
}
49-
return dbToObject(rows[0])
50+
const row = dbToObject(rows[0])
51+
if (args.deleted === false) delete row.deleted
52+
return row
5053
}
5154

5255
async getGroup(args) {
@@ -59,18 +62,19 @@ class Permission {
5962
, p.deleted
6063
FROM nt_perm p
6164
INNER JOIN nt_user u ON p.nt_group_id = u.nt_group_id
62-
WHERE p.deleted=0
65+
WHERE p.deleted=${args.deleted === true ? 1 : 0}
6366
AND u.deleted=0
6467
AND u.nt_user_id=?`
6568
const rows = await Mysql.execute(...Mysql.select(query, [args.uid]))
66-
return dbToObject(rows[0])
69+
const row = dbToObject(rows[0])
70+
if ([false, undefined].includes(args.deleted)) delete row.deleted
71+
return row
6772
}
6873

6974
async put(args) {
7075
if (!args.id) return false
7176
const id = args.id
7277
delete args.id
73-
// Mysql.debug(1)
7478
const r = await Mysql.execute(
7579
...Mysql.update(
7680
`nt_perm`,
@@ -82,17 +86,20 @@ class Permission {
8286
}
8387

8488
async delete(args) {
85-
await Mysql.execute(`UPDATE nt_perm SET deleted=? WHERE nt_perm_id=?`, [
86-
args.deleted ?? 1,
87-
args.id,
88-
])
89-
return true
89+
if (!args.id) return false
90+
const r = await Mysql.execute(
91+
...Mysql.update(`nt_perm`, `nt_perm_id=${args.id}`, {
92+
deleted: args.deleted ?? 1,
93+
}),
94+
)
95+
return r.changedRows === 1
9096
}
9197

9298
async destroy(args) {
93-
return await Mysql.execute(
99+
const r = await Mysql.execute(
94100
...Mysql.delete(`nt_perm`, mapToDbColumn(args, permDbMap)),
95101
)
102+
return r.affectedRows === 1
96103
}
97104
}
98105

@@ -185,60 +192,61 @@ JSON object format:
185192
const boolFields = ['self_write', 'inherit', 'deleted']
186193

187194
function dbToObject(row) {
188-
const newRow = JSON.parse(JSON.stringify(row))
195+
row = JSON.parse(JSON.stringify(row))
189196
for (const f of ['group', 'nameserver', 'zone', 'zonerecord', 'user']) {
190197
for (const p of ['create', 'write', 'delete', 'delegate']) {
191-
if (newRow[`${f}_${p}`] !== undefined) {
192-
if (newRow[f] === undefined) newRow[f] = {}
193-
newRow[f][p] = newRow[`${f}_${p}`] === 1
194-
delete newRow[`${f}_${p}`]
198+
if (row[`${f}_${p}`] !== undefined) {
199+
if (row[f] === undefined) row[f] = {}
200+
row[f][p] = row[`${f}_${p}`] === 1
201+
delete row[`${f}_${p}`]
195202
}
196203
}
197204
}
198205
for (const b of boolFields) {
199-
newRow[b] = newRow[b] === 1
206+
row[b] = row[b] === 1
200207
}
201-
if (newRow.uid !== undefined) {
202-
newRow.user.id = newRow.uid
203-
delete newRow.uid
208+
209+
if (row.uid !== undefined) {
210+
row.user.id = row.uid
211+
delete row.uid
204212
}
205-
if (newRow.gid !== undefined) {
206-
newRow.group.id = newRow.gid
207-
delete newRow.gid
213+
if (row.gid !== undefined) {
214+
row.group.id = row.gid
215+
delete row.gid
208216
}
209-
newRow.nameserver.usable = []
210-
if (![undefined, ''].includes(newRow.usable_ns)) {
211-
newRow.nameserver.usable = newRow.usable_ns.split(',')
217+
row.nameserver.usable = []
218+
if (![undefined, ''].includes(row.usable_ns)) {
219+
row.nameserver.usable = row.usable_ns.split(',')
212220
}
213-
delete newRow.usable_ns
214-
return newRow
221+
delete row.usable_ns
222+
return row
215223
}
216224

217225
function objectToDb(row) {
218-
const newRow = JSON.parse(JSON.stringify(row))
219-
if (newRow?.user?.id !== undefined) {
220-
newRow.uid = newRow.user.id
221-
delete newRow.user.id
226+
row = JSON.parse(JSON.stringify(row))
227+
if (row?.user?.id !== undefined) {
228+
row.uid = row.user.id
229+
delete row.user.id
222230
}
223-
if (newRow?.group?.id !== undefined) {
224-
newRow.gid = newRow.group.id
225-
delete newRow.group.id
231+
if (row?.group?.id !== undefined) {
232+
row.gid = row.group.id
233+
delete row.group.id
226234
}
227-
if (newRow?.nameserver?.usable !== undefined) {
228-
newRow.usable_ns = newRow.nameserver.usable.join(',')
229-
delete newRow.nameserver.usable
235+
if (row?.nameserver?.usable !== undefined) {
236+
row.usable_ns = row.nameserver.usable.join(',')
237+
delete row.nameserver.usable
230238
}
231239
for (const f of ['group', 'nameserver', 'zone', 'zonerecord', 'user']) {
232240
for (const p of ['create', 'write', 'delete', 'delegate']) {
233-
if (newRow[f] === undefined) continue
234-
if (newRow[f][p] === undefined) continue
235-
newRow[`${f}_${p}`] = newRow[f][p] === true ? 1 : 0
236-
delete newRow[f][p]
241+
if (row[f] === undefined) continue
242+
if (row[f][p] === undefined) continue
243+
row[`${f}_${p}`] = row[f][p] === true ? 1 : 0
244+
delete row[f][p]
237245
}
238-
delete newRow[f]
246+
delete row[f]
239247
}
240248
for (const b of boolFields) {
241-
newRow[b] = newRow[b] === true ? 1 : 0
249+
row[b] = row[b] === true ? 1 : 0
242250
}
243-
return newRow
251+
return row
244252
}

lib/permission.test.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,11 @@ describe('permission', function () {
6666
assert.equal(p?.deleted, true)
6767
await Permission.delete({ id: permTestCase.id, deleted: 0 }) // restore
6868
p = await Permission.get({ id: permTestCase.id })
69-
assert.equal(p.deleted, false)
69+
assert.equal(p.deleted, undefined)
7070
})
7171

7272
it('destroys a permission', async () => {
73-
const r = await Permission.destroy({ id: permTestCase.id })
74-
assert.equal(r.affectedRows, 1)
73+
assert.ok(await Permission.destroy({ id: permTestCase.id }))
7574
const p = await Permission.get({ id: permTestCase.id })
7675
assert.equal(p, undefined)
7776
})

0 commit comments

Comments
 (0)