Skip to content

Commit 38f82ed

Browse files
committed
Group authority validation
1 parent 72498a8 commit 38f82ed

File tree

10 files changed

+112
-44
lines changed

10 files changed

+112
-44
lines changed

dist/factory.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export declare const definition: Rule;
1212
export declare const duration: Rule;
1313
export declare const extensions: Rule;
1414
export declare const group: Rule;
15+
export declare const groupAuthority: Rule;
1516
export declare const imt: Rule;
1617
export declare const integerValue: Rule;
1718
export declare const interactionComponent: Rule;

dist/factory.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ exports.definition = requireRule('./schemaRules/definition');
2323
exports.duration = requireRule('./regexValues/duration');
2424
exports.extensions = requireMap(function (maps) { return maps.extensions; });
2525
exports.group = requireRule('./schemaRules/group');
26+
exports.groupAuthority = requireRule('./schemaRules/groupAuthority');
2627
exports.imt = requireRule('./regexValues/imt');
2728
exports.integerValue = values.integerValue;
2829
exports.interactionComponent = requireRule('./schemaRules/interactionComponent');

dist/schemaRules/authority.js

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
11
"use strict";
22
Object.defineProperty(exports, "__esModule", { value: true });
3-
var rulr_1 = require("rulr");
3+
var objectTypeFactory_1 = require("../helpers/objectTypeFactory");
44
var factory_1 = require("../factory");
5-
var MembersTypeWarning_1 = require("../warnings/MembersTypeWarning");
6-
var MembersLengthWarning_1 = require("../warnings/MembersLengthWarning");
7-
exports.default = rulr_1.composeRules([
8-
factory_1.actor,
9-
function (data, path) {
10-
if (data == null || data.constructor !== Object)
11-
return [];
12-
if (data.objectType === 'Group') {
13-
var members = Array.isArray(data.member) ? data.member.length : 0;
14-
if (members !== 2)
15-
return [new MembersTypeWarning_1.default(data, path)];
16-
var invalidMembers = data.member.filter(function (member) {
17-
return member.objectType !== 'Agent' && member.objectType !== undefined;
18-
});
19-
if (invalidMembers.length > 0)
20-
return [new MembersLengthWarning_1.default(data, path)];
21-
}
22-
return [];
23-
},
24-
]);
5+
exports.default = objectTypeFactory_1.default(function () { return ({
6+
Agent: factory_1.agent,
7+
Group: factory_1.groupAuthority,
8+
}); }, 'Agent');
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { Rule } from 'rulr';
2+
declare const _default: Rule;
3+
export default _default;

dist/schemaRules/groupAuthority.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
var rulr_1 = require("rulr");
4+
var factory_1 = require("../factory");
5+
var MembersTypeWarning_1 = require("../warnings/MembersTypeWarning");
6+
var MembersLengthWarning_1 = require("../warnings/MembersLengthWarning");
7+
var restrictToValue_1 = require("../helpers/restrictToValue");
8+
var lodash_1 = require("lodash");
9+
exports.default = rulr_1.composeRules([
10+
rulr_1.restrictToSchema({
11+
objectType: rulr_1.optional(restrictToValue_1.default('Group')),
12+
member: rulr_1.optional(rulr_1.restrictToCollection(function () { return factory_1.actor; }))
13+
}),
14+
function (data, path) {
15+
if (!lodash_1.isObject(data))
16+
return [];
17+
var members = Array.isArray(data.member) ? data.member.length : 0;
18+
if (members !== 2)
19+
return [new MembersTypeWarning_1.default(data, path)];
20+
var invalidMembers = data.member.filter(function (member) {
21+
return member.objectType !== 'Agent' && member.objectType !== undefined;
22+
});
23+
if (invalidMembers.length > 0)
24+
return [new MembersLengthWarning_1.default(data, path)];
25+
return [];
26+
}
27+
]);

dist/tests/schemaRules/authority.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,26 @@ exports.default = function (test) {
2121
objectType: 'Group',
2222
member: [agentMember],
2323
}, 'contains too few members', test);
24+
itsInvalid_1.default({
25+
objectType: 'Group',
26+
member: [agentMember, agentMember],
27+
mbox: agentMember.mbox
28+
}, 'contains an mbox on a group', test);
29+
itsInvalid_1.default({
30+
objectType: 'Group',
31+
member: [agentMember, agentMember],
32+
account: { name: 'test', homePage: 'http://example.org' }
33+
}, 'contains an account on a group', test);
34+
itsInvalid_1.default({
35+
objectType: 'Group',
36+
member: [agentMember, agentMember],
37+
mbox_sha1sum: 'a9993e364706816aba3e25717850c26c9cd0d89d'
38+
}, 'contains an mbox_sha1sum on a group', test);
39+
itsInvalid_1.default({
40+
objectType: 'Group',
41+
member: [agentMember, agentMember],
42+
openid: 'http://example.org/test'
43+
}, 'contains an mbox on a group', test);
2444
itsInvalid_1.default({
2545
objectType: 'Group',
2646
member: [agentMember, agentMember, agentMember],

src/factory.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const definition = requireRule('./schemaRules/definition');
2222
export const duration = requireRule('./regexValues/duration');
2323
export const extensions = requireMap(maps => maps.extensions);
2424
export const group = requireRule('./schemaRules/group');
25+
export const groupAuthority = requireRule('./schemaRules/groupAuthority');
2526
export const imt = requireRule('./regexValues/imt');
2627
export const integerValue = values.integerValue;
2728
export const interactionComponent = requireRule('./schemaRules/interactionComponent');

src/schemaRules/authority.ts

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,8 @@
1-
import { composeRules, Rule } from 'rulr';
2-
import { actor } from '../factory';
3-
import MembersTypeWarning from '../warnings/MembersTypeWarning';
4-
import MembersLengthWarning from '../warnings/MembersLengthWarning';
5-
6-
export default composeRules([
7-
actor,
8-
(data, path) => {
9-
if (data == null || data.constructor !== Object) return [];
10-
if (data.objectType === 'Group') {
11-
const members = Array.isArray(data.member) ? data.member.length : 0;
12-
13-
if (members !== 2) return [new MembersTypeWarning(data, path)];
14-
15-
const invalidMembers = data.member.filter((member: any) =>
16-
member.objectType !== 'Agent' && member.objectType !== undefined
17-
);
18-
19-
if (invalidMembers.length > 0) return [new MembersLengthWarning(data, path)];
20-
}
21-
return [];
22-
},
23-
]) as Rule;
1+
import { Rule } from 'rulr';
2+
import objectTypeFactory from '../helpers/objectTypeFactory';
3+
import { agent, groupAuthority } from '../factory';
4+
5+
export default objectTypeFactory(() => ({
6+
Agent: agent,
7+
Group: groupAuthority,
8+
}), 'Agent') as Rule;

src/schemaRules/groupAuthority.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { composeRules, Rule, optional, restrictToSchema, restrictToCollection } from 'rulr';
2+
import { actor } from '../factory';
3+
import MembersTypeWarning from '../warnings/MembersTypeWarning';
4+
import MembersLengthWarning from '../warnings/MembersLengthWarning';
5+
import restrictToValue from '../helpers/restrictToValue';
6+
import { isObject } from 'lodash';
7+
8+
export default composeRules([
9+
restrictToSchema({
10+
objectType: optional(restrictToValue('Group')),
11+
member: optional(restrictToCollection(() => actor))
12+
}),
13+
(data, path) => {
14+
if (!isObject(data)) return [];
15+
const members = Array.isArray(data.member) ? data.member.length : 0;
16+
17+
if (members !== 2) return [new MembersTypeWarning(data, path)];
18+
19+
const invalidMembers = data.member.filter((member: any) =>
20+
member.objectType !== 'Agent' && member.objectType !== undefined
21+
);
22+
23+
if (invalidMembers.length > 0) return [new MembersLengthWarning(data, path)];
24+
return [];
25+
}
26+
]) as Rule;

src/tests/schemaRules/authority.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,26 @@ export default (test: Test) => {
2222
objectType: 'Group',
2323
member: [agentMember],
2424
}, 'contains too few members', test);
25+
itsInvalid({
26+
objectType: 'Group',
27+
member: [agentMember, agentMember],
28+
mbox: agentMember.mbox
29+
}, 'contains an mbox on a group', test);
30+
itsInvalid({
31+
objectType: 'Group',
32+
member: [agentMember, agentMember],
33+
account: {name: 'test', homePage: 'http://example.org'}
34+
}, 'contains an account on a group', test);
35+
itsInvalid({
36+
objectType: 'Group',
37+
member: [agentMember, agentMember],
38+
mbox_sha1sum: 'a9993e364706816aba3e25717850c26c9cd0d89d'
39+
}, 'contains an mbox_sha1sum on a group', test);
40+
itsInvalid({
41+
objectType: 'Group',
42+
member: [agentMember, agentMember],
43+
openid: 'http://example.org/test'
44+
}, 'contains an openid on a group', test);
2545
itsInvalid({
2646
objectType: 'Group',
2747
member: [agentMember, agentMember, agentMember],

0 commit comments

Comments
 (0)