@nymphjs/tilmeld 1.0.0-alpha.2 → 1.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -0
- package/README.md +21 -16
- package/dist/Group.d.ts +1 -1
- package/dist/Group.js +11 -6
- package/dist/Group.js.map +1 -1
- package/dist/Group.test.js +8 -2
- package/dist/Group.test.js.map +1 -1
- package/dist/Tilmeld.d.ts +6 -7
- package/dist/Tilmeld.js +212 -91
- package/dist/Tilmeld.js.map +1 -1
- package/dist/User.d.ts +1 -1
- package/dist/User.js +20 -7
- package/dist/User.js.map +1 -1
- package/dist/User.test.js +8 -2
- package/dist/User.test.js.map +1 -1
- package/dist/conf/d.d.ts +3 -0
- package/dist/conf/defaults.js +25 -101
- package/dist/conf/defaults.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/tilmeldJoiProps.d.ts +12 -0
- package/dist/tilmeldJoiProps.js +20 -0
- package/dist/tilmeldJoiProps.js.map +1 -0
- package/package.json +14 -14
- package/src/Group.test.ts +10 -2
- package/src/Group.ts +22 -8
- package/src/Tilmeld.ts +334 -117
- package/src/User.test.ts +10 -2
- package/src/User.ts +31 -9
- package/src/conf/d.ts +30 -0
- package/src/conf/defaults.ts +12 -60
- package/src/index.ts +3 -1
- package/src/tilmeldJoiProps.ts +46 -0
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
14
|
};
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.User = exports.Tilmeld = exports.Group = exports.AbleObject = void 0;
|
|
16
|
+
exports.User = exports.tilmeldJoiProps = exports.Tilmeld = exports.Group = exports.AbleObject = void 0;
|
|
17
17
|
__exportStar(require("./conf"), exports);
|
|
18
18
|
__exportStar(require("./errors"), exports);
|
|
19
19
|
const AbleObject_1 = __importDefault(require("./AbleObject"));
|
|
@@ -23,8 +23,9 @@ const Group_1 = __importDefault(require("./Group"));
|
|
|
23
23
|
exports.Group = Group_1.default;
|
|
24
24
|
const Tilmeld_1 = __importDefault(require("./Tilmeld"));
|
|
25
25
|
exports.Tilmeld = Tilmeld_1.default;
|
|
26
|
-
exports.default = Tilmeld_1.default;
|
|
27
26
|
__exportStar(require("./Tilmeld.types"), exports);
|
|
27
|
+
const tilmeldJoiProps_1 = __importDefault(require("./tilmeldJoiProps"));
|
|
28
|
+
exports.tilmeldJoiProps = tilmeldJoiProps_1.default;
|
|
28
29
|
__exportStar(require("./User"), exports);
|
|
29
30
|
const User_1 = __importDefault(require("./User"));
|
|
30
31
|
exports.User = User_1.default;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AAEvB,2CAAyB;AAEzB,8DAAsC;AAC7B,qBADF,oBAAU,CACE;AAEnB,0CAAwB;AACxB,oDAA4B;AACnB,gBADF,eAAK,CACE;AAEd,wDAAgC;AACvB,kBADF,iBAAO,CACE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AAEvB,2CAAyB;AAEzB,8DAAsC;AAC7B,qBADF,oBAAU,CACE;AAEnB,0CAAwB;AACxB,oDAA4B;AACnB,gBADF,eAAK,CACE;AAEd,wDAAgC;AACvB,kBADF,iBAAO,CACE;AAEhB,kDAAgC;AAEhC,wEAAgD;AACvC,0BADF,yBAAe,CACE;AAExB,yCAAuB;AACvB,kDAA0B;AACjB,eADF,cAAI,CACE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Joi from 'joi';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
user: Joi.ObjectSchema<any>;
|
|
4
|
+
group: Joi.ObjectSchema<any>;
|
|
5
|
+
acUser: Joi.NumberSchema;
|
|
6
|
+
acGroup: Joi.NumberSchema;
|
|
7
|
+
acOther: Joi.NumberSchema;
|
|
8
|
+
acRead: Joi.ArraySchema;
|
|
9
|
+
acWrite: Joi.ArraySchema;
|
|
10
|
+
acFull: Joi.ArraySchema;
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const nymph_1 = require("@nymphjs/nymph");
|
|
7
|
+
const joi_1 = __importDefault(require("joi"));
|
|
8
|
+
const User_1 = __importDefault(require("./User"));
|
|
9
|
+
const Group_1 = __importDefault(require("./Group"));
|
|
10
|
+
exports.default = {
|
|
11
|
+
user: joi_1.default.object().instance(User_1.default),
|
|
12
|
+
group: joi_1.default.object().instance(Group_1.default),
|
|
13
|
+
acUser: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
|
|
14
|
+
acGroup: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
|
|
15
|
+
acOther: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
|
|
16
|
+
acRead: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
|
|
17
|
+
acWrite: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
|
|
18
|
+
acFull: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=tilmeldJoiProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tilmeldJoiProps.js","sourceRoot":"","sources":["../src/tilmeldJoiProps.ts"],"names":[],"mappings":";;;;;AAAA,0CAAqD;AACrD,8CAAsB;AAEtB,kDAA0B;AAC1B,oDAA4B;AAE5B,kBAAe;IACb,IAAI,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC;IACjC,KAAK,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC;IACnC,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACxB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,MAAM,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;IACD,OAAO,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACxB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;IACD,MAAM,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nymphjs/tilmeld",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.23",
|
|
4
4
|
"description": "NymphJS - Tilmeld User and Group System",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -31,34 +31,34 @@
|
|
|
31
31
|
},
|
|
32
32
|
"license": "Apache-2.0",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@nymphjs/nymph": "^1.0.0-alpha.
|
|
34
|
+
"@nymphjs/nymph": "^1.0.0-alpha.23",
|
|
35
35
|
"crypto-js": "^4.1.1",
|
|
36
36
|
"email-templates": "^8.0.8",
|
|
37
37
|
"express": "^4.17.1",
|
|
38
|
-
"joi": "^17.
|
|
38
|
+
"joi": "^17.5.0",
|
|
39
39
|
"jsonwebtoken": "^8.5.1",
|
|
40
40
|
"locutus": "^2.0.15",
|
|
41
41
|
"lodash": "^4.17.21",
|
|
42
|
-
"nanoid": "^3.1.
|
|
42
|
+
"nanoid": "^3.1.30",
|
|
43
43
|
"nanoid-dictionary": "^4.3.0",
|
|
44
44
|
"pug": "^3.0.2"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@nymphjs/client": "^1.0.0-alpha.
|
|
48
|
-
"@nymphjs/client-node": "^1.0.0-alpha.
|
|
49
|
-
"@nymphjs/driver-sqlite3": "^1.0.0-alpha.
|
|
47
|
+
"@nymphjs/client": "^1.0.0-alpha.23",
|
|
48
|
+
"@nymphjs/client-node": "^1.0.0-alpha.23",
|
|
49
|
+
"@nymphjs/driver-sqlite3": "^1.0.0-alpha.23",
|
|
50
50
|
"@tsconfig/recommended": "^1.0.1",
|
|
51
51
|
"@types/crypto-js": "^4.0.2",
|
|
52
52
|
"@types/email-templates": "^8.0.4",
|
|
53
53
|
"@types/express": "^4.17.13",
|
|
54
|
-
"@types/jest": "^27.0.
|
|
55
|
-
"@types/jsonwebtoken": "^8.5.
|
|
54
|
+
"@types/jest": "^27.0.3",
|
|
55
|
+
"@types/jsonwebtoken": "^8.5.6",
|
|
56
56
|
"@types/locutus": "^0.0.6",
|
|
57
|
-
"@types/lodash": "^4.14.
|
|
57
|
+
"@types/lodash": "^4.14.178",
|
|
58
58
|
"@types/nanoid-dictionary": "^4.2.0",
|
|
59
|
-
"jest": "^27.
|
|
60
|
-
"ts-jest": "^27.
|
|
61
|
-
"typescript": "^4.
|
|
59
|
+
"jest": "^27.4.5",
|
|
60
|
+
"ts-jest": "^27.1.1",
|
|
61
|
+
"typescript": "^4.5.4"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "4d0ec97a49f09228581fbc3773d5709531ccab73"
|
|
64
64
|
}
|
package/src/Group.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
|
|
2
|
-
import
|
|
2
|
+
import { Nymph } from '@nymphjs/nymph';
|
|
3
3
|
|
|
4
4
|
import Tilmeld from './Tilmeld';
|
|
5
5
|
import defaults from './conf/defaults';
|
|
@@ -16,7 +16,7 @@ const tilmeld = new Tilmeld({
|
|
|
16
16
|
cancelChangeRedirect: 'http://localhost:8080',
|
|
17
17
|
jwtSecret: 'shhhhh',
|
|
18
18
|
});
|
|
19
|
-
|
|
19
|
+
const _nymph = new Nymph(
|
|
20
20
|
{},
|
|
21
21
|
new SQLite3Driver({
|
|
22
22
|
filename: ':memory:',
|
|
@@ -37,6 +37,14 @@ describe('Group', () => {
|
|
|
37
37
|
return newGroup;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
it('new group passes validation', async () => {
|
|
41
|
+
const validGroup = await makeNewGroup();
|
|
42
|
+
|
|
43
|
+
expect(() => {
|
|
44
|
+
defaults.validatorGroup(validGroup);
|
|
45
|
+
}).not.toThrow();
|
|
46
|
+
});
|
|
47
|
+
|
|
40
48
|
it("doesn't allow unknown keys", async () => {
|
|
41
49
|
const invalidGroup = await makeNewGroup();
|
|
42
50
|
|
package/src/Group.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import md5 from 'crypto-js/md5';
|
|
11
11
|
import { difference } from 'lodash';
|
|
12
12
|
|
|
13
|
+
import type Tilmeld from './Tilmeld';
|
|
13
14
|
import AbleObject from './AbleObject';
|
|
14
15
|
import {
|
|
15
16
|
BadDataError,
|
|
@@ -17,7 +18,6 @@ import {
|
|
|
17
18
|
BadUsernameError,
|
|
18
19
|
CouldNotChangeDefaultPrimaryGroupError,
|
|
19
20
|
} from './errors';
|
|
20
|
-
import Tilmeld from './Tilmeld';
|
|
21
21
|
import User, { UserData } from './User';
|
|
22
22
|
|
|
23
23
|
export type GroupData = {
|
|
@@ -72,11 +72,20 @@ export type GroupData = {
|
|
|
72
72
|
unverifiedSecondary?: boolean;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* A user group data model.
|
|
77
|
+
*
|
|
78
|
+
* Written by Hunter Perrin for SciActive.
|
|
79
|
+
*
|
|
80
|
+
* @author Hunter Perrin <hperrin@gmail.com>
|
|
81
|
+
* @copyright SciActive Inc
|
|
82
|
+
* @see http://nymph.io/
|
|
83
|
+
*/
|
|
75
84
|
export default class Group extends AbleObject<GroupData> {
|
|
76
85
|
/**
|
|
77
86
|
* The instance of Tilmeld to use for queries.
|
|
78
87
|
*/
|
|
79
|
-
|
|
88
|
+
static tilmeld: Tilmeld;
|
|
80
89
|
static ETYPE = 'tilmeld_group';
|
|
81
90
|
static class = 'Group';
|
|
82
91
|
|
|
@@ -97,9 +106,9 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
97
106
|
'getPrimaryGroups',
|
|
98
107
|
'getSecondaryGroups',
|
|
99
108
|
];
|
|
100
|
-
protected $privateData = Group.DEFAULT_PRIVATE_DATA;
|
|
101
|
-
public static searchRestrictedData = Group.DEFAULT_PRIVATE_DATA;
|
|
102
|
-
protected $allowlistData? = Group.DEFAULT_ALLOWLIST_DATA;
|
|
109
|
+
protected $privateData = [...Group.DEFAULT_PRIVATE_DATA];
|
|
110
|
+
public static searchRestrictedData = [...Group.DEFAULT_PRIVATE_DATA];
|
|
111
|
+
protected $allowlistData? = [...Group.DEFAULT_ALLOWLIST_DATA];
|
|
103
112
|
protected $allowlistTags?: string[] = [];
|
|
104
113
|
|
|
105
114
|
/**
|
|
@@ -285,8 +294,8 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
285
294
|
const tilmeld = this.$nymph.tilmeld as Tilmeld;
|
|
286
295
|
let user = givenUser ?? tilmeld.User.current();
|
|
287
296
|
|
|
288
|
-
this.$privateData = Group.DEFAULT_PRIVATE_DATA;
|
|
289
|
-
this.$allowlistData = Group.DEFAULT_ALLOWLIST_DATA;
|
|
297
|
+
this.$privateData = [...Group.DEFAULT_PRIVATE_DATA];
|
|
298
|
+
this.$allowlistData = [...Group.DEFAULT_ALLOWLIST_DATA];
|
|
290
299
|
|
|
291
300
|
if (tilmeld.config.emailUsernames) {
|
|
292
301
|
this.$privateData.push('groupname');
|
|
@@ -743,7 +752,9 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
743
752
|
}
|
|
744
753
|
|
|
745
754
|
const transaction = 'tilmeld-delete-' + this.guid;
|
|
746
|
-
const
|
|
755
|
+
const nymph = this.$nymph;
|
|
756
|
+
const tnymph = await nymph.startTransaction(transaction);
|
|
757
|
+
this.$nymph = tnymph;
|
|
747
758
|
|
|
748
759
|
// Delete descendants.
|
|
749
760
|
const descendants = await this.$getDescendants();
|
|
@@ -751,6 +762,7 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
751
762
|
for (let curGroup of descendants) {
|
|
752
763
|
if (!(await curGroup.$delete())) {
|
|
753
764
|
await tnymph.rollback(transaction);
|
|
765
|
+
this.$nymph = nymph;
|
|
754
766
|
return false;
|
|
755
767
|
}
|
|
756
768
|
}
|
|
@@ -771,6 +783,7 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
771
783
|
delete user.group;
|
|
772
784
|
if (!(await user.$save())) {
|
|
773
785
|
await tnymph.rollback(transaction);
|
|
786
|
+
this.$nymph = nymph;
|
|
774
787
|
return false;
|
|
775
788
|
}
|
|
776
789
|
}
|
|
@@ -801,6 +814,7 @@ export default class Group extends AbleObject<GroupData> {
|
|
|
801
814
|
} else {
|
|
802
815
|
await tnymph.rollback(transaction);
|
|
803
816
|
}
|
|
817
|
+
this.$nymph = nymph;
|
|
804
818
|
return success;
|
|
805
819
|
}
|
|
806
820
|
}
|