passbolt-browser-extension 5.12.1 → 5.13.0
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/.devcontainer/safe-chain-config.json +2 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +30 -22
- package/.github/ISSUE_TEMPLATE/config.yml +11 -0
- package/.jpmignore +0 -1
- package/CHANGELOG.md +82 -1
- package/CONTRIBUTING.md +1 -12
- package/README.md +5 -16
- package/RELEASE_NOTES.md +2 -3
- package/SECURITY.md +7 -0
- package/i18next.config.js +28 -0
- package/jest.config.json +1 -0
- package/package.json +20 -40
- package/src/all/background_page/controller/accountRecovery/reviewRequestController.test.js +1 -1
- package/src/all/background_page/{event → controller/actionLog}/findAllForActionLogController.js +1 -1
- package/src/all/background_page/{event → controller/actionLog}/findAllForActionLogController.test.js +4 -4
- package/src/all/background_page/controller/export/exportResourcesFileController.test.js +7 -2
- package/src/all/background_page/controller/folder/folderCreateController.js +3 -1
- package/src/all/background_page/controller/group/findMyGroupsController.test.js +2 -2
- package/src/all/background_page/controller/group/getOrFindGroupsController.js +61 -0
- package/src/all/background_page/controller/group/getOrFindGroupsController.test.js +69 -0
- package/src/all/background_page/controller/group/getOrFindGroupsUsersController.js +62 -0
- package/src/all/background_page/controller/group/getOrFindGroupsUsersController.test.js +69 -0
- package/src/all/background_page/controller/group/groupCreateController.js +1 -1
- package/src/all/background_page/controller/group/groupCreateController.test.js +1 -1
- package/src/all/background_page/controller/group/groupUpdateController.js +1 -1
- package/src/all/background_page/controller/group/updateAllGroupsLocalStorageController.test.js +1 -1
- package/src/all/background_page/controller/keyring/synchroniseKeyringController.js +51 -0
- package/src/all/background_page/controller/keyring/synchroniseKeyringController.test.js +49 -0
- package/src/all/background_page/controller/metadata/shareMetadataKeyPrivateController.test.js +1 -1
- package/src/all/background_page/controller/move/moveFolderController.js +0 -2
- package/src/all/background_page/controller/permission/FindAcoPermissionsForDisplayController.js +1 -1
- package/src/all/background_page/controller/permission/FindAcoPermissionsForDisplayController.test.js +2 -2
- package/src/all/background_page/controller/resource/findAllByIdsForDisplayPermissionsController.test.js +8 -3
- package/src/all/background_page/controller/resource/findAllIdsByIsSharedWithGroupController.test.js +9 -4
- package/src/all/background_page/controller/resource/resourceUpdateController.test.js +1 -2
- package/src/all/background_page/controller/resourceLocalStorage/resourceUpdateLocalStorageController.test.js +5 -2
- package/src/all/background_page/controller/share/findFoldersForShareController.js +66 -0
- package/src/all/background_page/controller/share/findFoldersForShareController.test.js +70 -0
- package/src/all/background_page/controller/share/searchUsersAndGroupsController.js +4 -4
- package/src/all/background_page/controller/share/searchUsersAndGroupsController.test.js +8 -23
- package/src/all/background_page/controller/share/shareResourcesController.test.js +2 -2
- package/src/all/background_page/controller/subscription/createSubscriptionKeyController.js +63 -0
- package/src/all/background_page/controller/subscription/createSubscriptionKeyController.test.js +56 -0
- package/src/all/background_page/controller/subscription/deleteSubscriptionKeyController.js +55 -0
- package/src/all/background_page/controller/subscription/deleteSubscriptionKeyController.test.js +50 -0
- package/src/all/background_page/controller/user/deleteUserController.test.js +1 -1
- package/src/all/background_page/controller/user/getOrFindUsersController.js +61 -0
- package/src/all/background_page/controller/user/getOrFindUsersController.test.js +69 -0
- package/src/all/background_page/error/deleteDryRunError.js +1 -1
- package/src/all/background_page/event/actionLogEvents.js +1 -1
- package/src/all/background_page/event/appEvents.js +25 -0
- package/src/all/background_page/event/groupEvents.js +26 -0
- package/src/all/background_page/event/keyringEvents.js +12 -0
- package/src/all/background_page/event/shareEvents.js +3 -9
- package/src/all/background_page/event/userEvents.js +13 -0
- package/src/all/background_page/model/config.js +12 -2
- package/src/all/background_page/model/entity/folder/folderEntity.js +2 -2
- package/src/all/background_page/model/entity/folder/folderEntity.test.js +2 -2
- package/src/all/background_page/model/entity/folder/foldersCollection.test.js +1 -1
- package/src/all/background_page/model/entity/group/update/groupUpdateEntity.js +1 -1
- package/src/all/background_page/model/entity/group/update/groupUpdateEntity.test.js +1 -1
- package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.js +2 -2
- package/src/all/background_page/model/entity/permission/actionLog/updatedPermissionEntity.test.data.js +1 -1
- package/src/all/background_page/model/entity/permission/change/permissionChangeEntity.js +1 -1
- package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.js +2 -2
- package/src/all/background_page/model/entity/permission/change/permissionChangesCollection.test.js +2 -2
- package/src/all/background_page/model/entity/resource/resourceEntity.js +2 -2
- package/src/all/background_page/model/entity/resource/resourceEntity.test.js +1 -1
- package/src/all/background_page/model/entity/user/userEntity.js +16 -377
- package/src/all/background_page/model/entity/user/userEntity.test.js +22 -297
- package/src/all/background_page/model/entity/userAndGroupSearchResultEntity/userAndGroupSearchResultEntity.js +1 -1
- package/src/all/background_page/model/folder/folderModel.js +5 -154
- package/src/all/background_page/model/group/groupModel.js +1 -1
- package/src/all/background_page/model/keyring.js +52 -17
- package/src/all/background_page/model/keyring.test.js +110 -0
- package/src/all/background_page/model/resource/resourceModel.js +2 -55
- package/src/all/background_page/model/setup/setupModel.js +2 -2
- package/src/all/background_page/model/user/userModel.js +18 -15
- package/src/all/background_page/model/user/userModel.test.js +1 -3
- package/src/all/background_page/service/api/abstract/abstractService.js +3 -17
- package/src/all/background_page/service/api/edition/passboltEditionApiService.js +64 -0
- package/src/all/background_page/service/api/edition/passboltEditionApiService.test.js +99 -0
- package/src/all/background_page/service/api/group/groupApiService.js +22 -23
- package/src/all/background_page/service/api/group/groupApiService.test.js +70 -0
- package/src/all/background_page/service/api/resource/resourceService.js +18 -12
- package/src/all/background_page/service/api/share/{shareService.js → shareApiService.js} +10 -7
- package/src/all/background_page/service/api/share/{shareService.test.js → shareApiService.test.js} +5 -5
- package/src/all/background_page/service/group/createGroupService.js +1 -1
- package/src/all/background_page/service/group/createGroupService.test.js +1 -1
- package/src/all/background_page/service/group/findAndUpdateGroupsLocalStorageService.js +56 -1
- package/src/all/background_page/service/group/findAndUpdateGroupsLocalStorageService.test.js +84 -2
- package/src/all/background_page/service/group/findGroupsService.js +5 -9
- package/src/all/background_page/service/group/findGroupsService.test.data.js +1 -1
- package/src/all/background_page/service/group/findGroupsService.test.js +10 -15
- package/src/all/background_page/service/group/getOrFindGroupsService.js +65 -0
- package/src/all/background_page/service/group/getOrFindGroupsService.test.js +168 -0
- package/src/all/background_page/service/group/getOrFindGroupsUsersService.js +51 -0
- package/src/all/background_page/service/group/getOrFindGroupsUsersService.test.js +94 -0
- package/src/all/background_page/service/group/groupUpdateService.js +5 -3
- package/src/all/background_page/service/group/groupUpdateService.test.js +10 -2
- package/src/all/background_page/service/local_storage/groupLocalStorage.js +2 -2
- package/src/all/background_page/service/local_storage/groupLocalStorage.test.js +3 -3
- package/src/all/background_page/service/local_storage/userLocalStorage.js +57 -36
- package/src/all/background_page/service/local_storage/userLocalStorage.test.js +282 -0
- package/src/all/background_page/service/metadata/createMetadataKeyService.test.js +1 -1
- package/src/all/background_page/service/metadata/saveMetadataSettingsService.test.js +1 -1
- package/src/all/background_page/service/metadata/shareMetadataKeyPrivateService.test.js +1 -1
- package/src/all/background_page/service/migrateMetadata/migrateMetadataResourcesService.js +1 -1
- package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.js +113 -0
- package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.test.data.js +38 -0
- package/src/all/background_page/service/move/calculatePermissionsChangesForMoveService.test.js +158 -0
- package/src/all/background_page/service/move/moveOneFolderService.js +6 -7
- package/src/all/background_page/service/move/moveOneFolderService.test.js +90 -90
- package/src/all/background_page/service/move/moveResourcesService.js +2 -5
- package/src/all/background_page/service/permission/findPermissionsService.js +1 -1
- package/src/all/background_page/service/resource/create/resourceCreateService.js +13 -31
- package/src/all/background_page/service/resource/create/resourceCreateService.test.js +25 -18
- package/src/all/background_page/service/resource/export/exportResourcesService.test.js +13 -4
- package/src/all/background_page/service/resource/findAndUpdateResourcesLocalStorageService.test.js +35 -28
- package/src/all/background_page/service/resource/findResourcesService.js +78 -2
- package/src/all/background_page/service/resource/findResourcesService.test.data.js +1 -1
- package/src/all/background_page/service/resource/findResourcesService.test.js +90 -31
- package/src/all/background_page/service/resource/getOrFindResourcesService.test.js +18 -8
- package/src/all/background_page/service/session_storage/keepSessionAliveService.js +3 -3
- package/src/all/background_page/service/session_storage/keepSessionAliveService.test.js +5 -3
- package/src/all/background_page/service/share/searchUsersAndGroupsService.js +41 -0
- package/src/all/background_page/service/share/searchUsersAndGroupsService.test.js +64 -0
- package/src/all/background_page/service/share/shareFoldersService.js +3 -3
- package/src/all/background_page/service/share/shareFoldersService.test.js +3 -3
- package/src/all/background_page/service/share/shareResourceService.js +4 -4
- package/src/all/background_page/service/share/shareResourceService.test.js +8 -8
- package/src/all/background_page/service/subscription/createSubscriptionKeyService.js +57 -0
- package/src/all/background_page/service/subscription/createSubscriptionKeyService.test.js +111 -0
- package/src/all/background_page/service/subscription/deleteSubscriptionKeyService.js +35 -0
- package/src/all/background_page/service/subscription/deleteSubscriptionKeyService.test.js +55 -0
- package/src/all/background_page/service/user/deleteUserService.js +4 -4
- package/src/all/background_page/service/user/deleteUserService.test.js +10 -10
- package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.js +81 -0
- package/src/all/background_page/service/user/findAndUpdateUsersLocalStorageService.test.js +132 -0
- package/src/all/background_page/service/user/findUsersService.js +6 -6
- package/src/all/background_page/service/user/findUsersService.test.js +39 -38
- package/src/all/background_page/service/user/getOrFindUsersService.js +60 -0
- package/src/all/background_page/service/user/getOrFindUsersService.test.js +110 -0
- package/src/all/background_page/utils/assertions.js +1 -0
- package/src/all/locales/ko-KR/common.json +1 -1
- package/src/chrome/manifest.json +1 -1
- package/src/chrome-mv3/manifest.json +1 -1
- package/src/firefox/manifest.json +3 -3
- package/src/safari/manifest.json +2 -2
- package/test/jest.env-setup.js +31 -0
- package/webpack/applyOutputClean.js +69 -0
- package/webpack/base.config.js +33 -0
- package/webpack/common-blocks.js +91 -0
- package/webpack/expectedBuildArtifacts.js +51 -0
- package/webpack/i18nextExtractionPlugin.js +43 -0
- package/webpack/passboltEnvPlugin.js +41 -0
- package/webpack/webExtPlugin/index.js +75 -0
- package/webpack.chromium-mv2.config.js +40 -0
- package/webpack.chromium-mv3.config.js +40 -0
- package/webpack.common.config.js +186 -0
- package/webpack.config.js +38 -0
- package/webpack.firefox.config.js +40 -0
- package/webpack.mv2.config.js +65 -0
- package/webpack.mv3.config.js +99 -0
- package/webpack.safari-background-page.config.js +66 -57
- package/webpack.safari.config.js +44 -0
- package/Gruntfile.js +0 -471
- package/am_i_compromised.py +0 -1036
- package/am_i_compromised.sh +0 -688
- package/i18next-parser.config.js +0 -22
- package/src/all/background_page/config/config.json +0 -7
- package/src/all/background_page/config/config.json.debug +0 -7
- package/src/all/background_page/config/config.json.default +0 -7
- package/src/all/background_page/model/entity/group/groupEntity.js +0 -241
- package/src/all/background_page/model/entity/group/groupEntity.test.js +0 -136
- package/src/all/background_page/model/entity/group/groupsCollection.js +0 -166
- package/src/all/background_page/model/entity/group/groupsCollection.test.data.js +0 -34
- package/src/all/background_page/model/entity/group/groupsCollection.test.js +0 -227
- package/src/all/background_page/model/entity/permission/permissionEntity.js +0 -485
- package/src/all/background_page/model/entity/permission/permissionEntity.test.js +0 -263
- package/src/all/background_page/model/entity/permission/permissionsCollection.js +0 -486
- package/src/all/background_page/model/entity/permission/permissionsCollection.test.js +0 -700
- package/src/all/background_page/model/entity/user/usersCollection.js +0 -147
- package/src/all/background_page/model/entity/user/usersCollection.test.js +0 -223
- package/src/all/background_page/model/share/shareModel.js +0 -183
- package/src/all/background_page/model/share/shareModel.test.js +0 -61
- package/src/all/background_page/service/api/user/userService.js +0 -260
- package/src/all/background_page/service/resource/create/resourceCreateService.test.data.js +0 -55
- package/webpack-content-scripts.browser-integration.config.js +0 -57
- package/webpack-content-scripts.config.js +0 -61
- package/webpack-content-scripts.public-website-sign-in.config.js +0 -57
- package/webpack-data.config.js +0 -102
- package/webpack-data.download.config.js +0 -59
- package/webpack-data.in-form-call-to-action.config.js +0 -97
- package/webpack-data.in-form-menu.config.js +0 -97
- package/webpack-offscreens.config.js +0 -55
- package/webpack.background-page.config.js +0 -62
- package/webpack.service-worker.config.js +0 -65
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 3.0.4
|
|
13
|
-
*/
|
|
14
|
-
import EntitySchema from "passbolt-styleguide/src/shared/models/entity/abstract/entitySchema";
|
|
15
|
-
import GroupsCollection from "./groupsCollection";
|
|
16
|
-
import { defaultGroupDto } from "passbolt-styleguide/src/shared/models/entity/group/groupEntity.test.data";
|
|
17
|
-
import { defaultGroupUser } from "passbolt-styleguide/src/shared/models/entity/groupUser/groupUserEntity.test.data.js";
|
|
18
|
-
import GroupEntity from "./groupEntity";
|
|
19
|
-
import { defaultGroupsDtos } from "./groupsCollection.test.data";
|
|
20
|
-
|
|
21
|
-
describe("GroupsCollection", () => {
|
|
22
|
-
it("schema must validate", () => {
|
|
23
|
-
EntitySchema.validateSchema(GroupsCollection.ENTITY_NAME, GroupsCollection.getSchema());
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe("GroupsCollection::constructor", () => {
|
|
27
|
-
it("works with empty collection", () => {
|
|
28
|
-
new GroupsCollection([]);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("works if valid minimal DTO is provided", () => {
|
|
32
|
-
const dto1 = defaultGroupDto({ name: "group1" });
|
|
33
|
-
const dto2 = defaultGroupDto({ name: "group2" });
|
|
34
|
-
const dto3 = defaultGroupDto({ name: "group3" });
|
|
35
|
-
const dtos = [dto1, dto2, dto3];
|
|
36
|
-
const collection = new GroupsCollection(dtos);
|
|
37
|
-
|
|
38
|
-
expect.assertions(10);
|
|
39
|
-
expect(collection.items).toHaveLength(3);
|
|
40
|
-
expect(collection.items[0]).toBeInstanceOf(GroupEntity);
|
|
41
|
-
expect(collection.items[0]._props.id).toEqual(dto1.id);
|
|
42
|
-
expect(collection.items[0]._props.name).toEqual(dto1.name);
|
|
43
|
-
expect(collection.items[1]).toBeInstanceOf(GroupEntity);
|
|
44
|
-
expect(collection.items[1]._props.id).toEqual(dto2.id);
|
|
45
|
-
expect(collection.items[1]._props.name).toEqual(dto2.name);
|
|
46
|
-
expect(collection.items[2]).toBeInstanceOf(GroupEntity);
|
|
47
|
-
expect(collection.items[2]._props.id).toEqual(dto3.id);
|
|
48
|
-
expect(collection.items[2]._props.name).toEqual(dto3.name);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it("works if valid group entities are provided", () => {
|
|
52
|
-
const entity1 = new GroupEntity(defaultGroupDto({ name: "group1" }));
|
|
53
|
-
const entity2 = new GroupEntity(defaultGroupDto({ name: "group2" }));
|
|
54
|
-
const entities = [entity1, entity2];
|
|
55
|
-
const collection = new GroupsCollection(entities);
|
|
56
|
-
|
|
57
|
-
expect.assertions(5);
|
|
58
|
-
expect(collection.items).toHaveLength(2);
|
|
59
|
-
expect(collection.items[0]).toBeInstanceOf(GroupEntity);
|
|
60
|
-
expect(collection.items[0]._props.name).toEqual(entity1.name);
|
|
61
|
-
expect(collection.items[1]).toBeInstanceOf(GroupEntity);
|
|
62
|
-
expect(collection.items[1]._props.name).toEqual(entity2.name);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it("works if valid maximum DTO is provided", () => {
|
|
66
|
-
const dto1 = defaultGroupDto({ name: "group1" }, { withGroupsUsers: true });
|
|
67
|
-
const dto2 = defaultGroupDto({ name: "group2" }, { withGroupsUsers: true });
|
|
68
|
-
const dto3 = defaultGroupDto({ name: "group3" }, { withGroupsUsers: true });
|
|
69
|
-
const dtos = [dto1, dto2, dto3];
|
|
70
|
-
const collection = new GroupsCollection(dtos);
|
|
71
|
-
|
|
72
|
-
expect.assertions(13);
|
|
73
|
-
expect(collection.items).toHaveLength(3);
|
|
74
|
-
expect(collection.items[0]._props.id).toEqual(dto1.id);
|
|
75
|
-
expect(collection.items[0]._props.name).toEqual(dto1.name);
|
|
76
|
-
expect(collection.items[0]._groups_users).toHaveLength(1);
|
|
77
|
-
expect(collection.items[0]._groups_users.items[0].id).toEqual(dto1.groups_users[0].id);
|
|
78
|
-
expect(collection.items[1]._props.id).toEqual(dto2.id);
|
|
79
|
-
expect(collection.items[1]._props.name).toEqual(dto2.name);
|
|
80
|
-
expect(collection.items[1]._groups_users).toHaveLength(1);
|
|
81
|
-
expect(collection.items[1]._groups_users.items[0].id).toEqual(dto2.groups_users[0].id);
|
|
82
|
-
expect(collection.items[2]._props.id).toEqual(dto3.id);
|
|
83
|
-
expect(collection.items[2]._props.name).toEqual(dto3.name);
|
|
84
|
-
expect(collection.items[2]._groups_users).toHaveLength(1);
|
|
85
|
-
expect(collection.items[2]._groups_users.items[0].id).toEqual(dto3.groups_users[0].id);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("should throw if the collection schema does not validate", () => {
|
|
89
|
-
expect.assertions(1);
|
|
90
|
-
expect(() => new GroupsCollection({})).toThrowEntityValidationError("items");
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it("should throw if one of data item does not validate the collection entity schema", () => {
|
|
94
|
-
const dto1 = defaultGroupDto();
|
|
95
|
-
const dto2 = defaultGroupDto({ name: 42 });
|
|
96
|
-
|
|
97
|
-
expect.assertions(1);
|
|
98
|
-
expect(() => new GroupsCollection([dto1, dto2])).toThrowCollectionValidationError("1.name.type");
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
/*
|
|
102
|
-
* @todo Associated entities validation error details to review when collection will aggregate them.
|
|
103
|
-
* @see EntityV2Collection.pushMany
|
|
104
|
-
*/
|
|
105
|
-
it("should throw if one of item has an associated item that does not validate the collection associated entity schema", () => {
|
|
106
|
-
const dto1 = defaultGroupDto();
|
|
107
|
-
const dto2 = defaultGroupDto({
|
|
108
|
-
name: "group 2",
|
|
109
|
-
groups_users: [defaultGroupUser({ group_id: 42, is_admin: true })],
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
expect.assertions(2);
|
|
113
|
-
// Should not throw
|
|
114
|
-
expect(() => new GroupsCollection([dto1, dto2])).toThrowCollectionValidationError("1.0.group_id.type");
|
|
115
|
-
// Should throw
|
|
116
|
-
expect(() => new GroupsCollection([dto1, dto2])).not.toThrowCollectionValidationError(
|
|
117
|
-
"1.groups_users.0.group_id.type",
|
|
118
|
-
);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it("should throw if one of data item does not validate the unique id build rule", () => {
|
|
122
|
-
const dto1 = defaultGroupDto();
|
|
123
|
-
const dto2 = defaultGroupDto({ name: "group 1" });
|
|
124
|
-
const dto3 = defaultGroupDto({ id: dto2.id, name: "group 2" });
|
|
125
|
-
|
|
126
|
-
expect.assertions(1);
|
|
127
|
-
expect(() => new GroupsCollection([dto1, dto2, dto3])).toThrowCollectionValidationError("2.id.unique");
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("should throw if one of data item does not validate the unique name build rule", () => {
|
|
131
|
-
const dto1 = defaultGroupDto();
|
|
132
|
-
const dto2 = defaultGroupDto({ name: "group 1" });
|
|
133
|
-
const dto3 = defaultGroupDto({ name: "group 1" });
|
|
134
|
-
|
|
135
|
-
expect.assertions(1);
|
|
136
|
-
expect(() => new GroupsCollection([dto1, dto2, dto3])).toThrowCollectionValidationError("2.name.unique");
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it("should, with enabling the ignore invalid option, ignore items which do not validate their schema", () => {
|
|
140
|
-
const dto1 = defaultGroupDto();
|
|
141
|
-
const dto2 = defaultGroupDto({ name: 42 });
|
|
142
|
-
const dto3 = defaultGroupDto({ name: "group 3" });
|
|
143
|
-
|
|
144
|
-
expect.assertions(3);
|
|
145
|
-
const collection = new GroupsCollection([dto1, dto2, dto3], { ignoreInvalidEntity: true });
|
|
146
|
-
expect(collection.items).toHaveLength(2);
|
|
147
|
-
expect(collection.items[0].id).toEqual(dto1.id);
|
|
148
|
-
expect(collection.items[1].id).toEqual(dto3.id);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it("should, with enabling the ignore invalid option, ignore items which do not validate the unique id build rule", () => {
|
|
152
|
-
const dto1 = defaultGroupDto();
|
|
153
|
-
const dto2 = defaultGroupDto({ id: dto1.id, name: "group 2" });
|
|
154
|
-
const dto3 = defaultGroupDto({ name: "group 3" });
|
|
155
|
-
|
|
156
|
-
expect.assertions(3);
|
|
157
|
-
const collection = new GroupsCollection([dto1, dto2, dto3], { ignoreInvalidEntity: true });
|
|
158
|
-
expect(collection.items).toHaveLength(2);
|
|
159
|
-
expect(collection.items[0].id).toEqual(dto1.id);
|
|
160
|
-
expect(collection.items[1].id).toEqual(dto3.id);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it("should, with enabling the ignore invalid option, ignore items which do not validate the unique name build rule", () => {
|
|
164
|
-
const dto1 = defaultGroupDto();
|
|
165
|
-
const dto2 = defaultGroupDto({ name: dto1.name });
|
|
166
|
-
const dto3 = defaultGroupDto({ name: "group 3" });
|
|
167
|
-
|
|
168
|
-
expect.assertions(3);
|
|
169
|
-
const collection = new GroupsCollection([dto1, dto2, dto3], { ignoreInvalidEntity: true });
|
|
170
|
-
expect(collection.items).toHaveLength(2);
|
|
171
|
-
expect(collection.items[0].id).toEqual(dto1.id);
|
|
172
|
-
expect(collection.items[1].id).toEqual(dto3.id);
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it("should, with enabling the ignore invalid option, ignore items associated groups users entities which do not validate the group users same id build rule", () => {
|
|
176
|
-
const dto1 = defaultGroupDto({}, { withGroupsUsers: true });
|
|
177
|
-
const dto2 = defaultGroupDto({
|
|
178
|
-
name: "group 2",
|
|
179
|
-
groups_users: [defaultGroupUser({ group_id: 42, is_admin: true })],
|
|
180
|
-
});
|
|
181
|
-
const dto3 = defaultGroupDto({ name: "group 3" }, { withGroupsUsers: true });
|
|
182
|
-
|
|
183
|
-
expect.assertions(7);
|
|
184
|
-
const collection = new GroupsCollection([dto1, dto2, dto3], { ignoreInvalidEntity: true });
|
|
185
|
-
expect(collection.items).toHaveLength(3);
|
|
186
|
-
expect(collection.items[0].id).toEqual(dto1.id);
|
|
187
|
-
expect(collection.items[0]._groups_users).toHaveLength(1);
|
|
188
|
-
expect(collection.items[1].id).toEqual(dto2.id);
|
|
189
|
-
expect(collection.items[1]._groups_users).toHaveLength(0);
|
|
190
|
-
expect(collection.items[2].id).toEqual(dto3.id);
|
|
191
|
-
expect(collection.items[2]._groups_users).toHaveLength(1);
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
describe("GroupsCollection:pushMany", () => {
|
|
196
|
-
it("[performance] should ensure performance adding large dataset remains effective.", async () => {
|
|
197
|
-
const groupsCount = 10_000;
|
|
198
|
-
const groupsUsersPerGroupCount = 5;
|
|
199
|
-
const groupsDtos = defaultGroupsDtos(groupsCount, {
|
|
200
|
-
withModifier: true,
|
|
201
|
-
withCreator: true,
|
|
202
|
-
withMyGroupUser: true,
|
|
203
|
-
withGroupsUsers: groupsUsersPerGroupCount,
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
const start = performance.now();
|
|
207
|
-
const collection = new GroupsCollection(groupsDtos, { ignoreInvalidEntity: true });
|
|
208
|
-
const time = performance.now() - start;
|
|
209
|
-
expect(collection).toHaveLength(groupsCount);
|
|
210
|
-
expect(time).toBeLessThan(5_000);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
describe("GroupsCollection:toDto", () => {
|
|
215
|
-
it("should transform the collection items in dto format", () => {
|
|
216
|
-
const dto1 = defaultGroupDto({ name: "group1" }, { withGroupsUsers: true });
|
|
217
|
-
const dto2p = defaultGroupDto({ name: "group2" }, { withGroupsUsers: true });
|
|
218
|
-
const dto3 = defaultGroupDto({ name: "group3" }, { withGroupsUsers: true });
|
|
219
|
-
const dtos = [dto1, dto2p, dto3];
|
|
220
|
-
const collection = new GroupsCollection(dtos);
|
|
221
|
-
|
|
222
|
-
expect.assertions(2);
|
|
223
|
-
expect(collection.toDto()).toEqual(dtos);
|
|
224
|
-
expect(JSON.stringify(collection)).toEqual(JSON.stringify(dtos));
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Passbolt ~ Open source password manager for teams
|
|
3
|
-
* Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under GNU Affero General Public License version 3 of the or any later version.
|
|
6
|
-
* For full copyright and license information, please see the LICENSE.txt
|
|
7
|
-
* Redistributions of files must retain the above copyright notice.
|
|
8
|
-
*
|
|
9
|
-
* @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
|
|
10
|
-
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
|
|
11
|
-
* @link https://www.passbolt.com Passbolt(tm)
|
|
12
|
-
* @since 2.13.0
|
|
13
|
-
*/
|
|
14
|
-
import GroupEntity from "../group/groupEntity";
|
|
15
|
-
import UserEntity from "../user/userEntity";
|
|
16
|
-
import Validator from "validator";
|
|
17
|
-
import EntityV2 from "passbolt-styleguide/src/shared/models/entity/abstract/entityV2";
|
|
18
|
-
|
|
19
|
-
const ENTITY_NAME = "Permission";
|
|
20
|
-
const PERMISSION_OWNER = 15;
|
|
21
|
-
const PERMISSION_UPDATE = 7;
|
|
22
|
-
const PERMISSION_READ = 1;
|
|
23
|
-
const ARO_GROUP = "Group";
|
|
24
|
-
const ARO_USER = "User";
|
|
25
|
-
const ACO_RESOURCE = "Resource";
|
|
26
|
-
const ACO_FOLDER = "Folder";
|
|
27
|
-
|
|
28
|
-
class PermissionEntity extends EntityV2 {
|
|
29
|
-
/**
|
|
30
|
-
* @inheritDoc
|
|
31
|
-
*/
|
|
32
|
-
constructor(dto, options = {}) {
|
|
33
|
-
super(dto, options);
|
|
34
|
-
|
|
35
|
-
// Associated models
|
|
36
|
-
if (this._props.user) {
|
|
37
|
-
this._user = new UserEntity(this._props.user, { ...options, clone: false });
|
|
38
|
-
delete this._props.user;
|
|
39
|
-
}
|
|
40
|
-
if (this._props.group) {
|
|
41
|
-
this._group = new GroupEntity(this._props.group, { ...options, clone: false });
|
|
42
|
-
delete this._props.group;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Get permission entity schema
|
|
48
|
-
*
|
|
49
|
-
* @returns {Object} schema
|
|
50
|
-
*/
|
|
51
|
-
static getSchema() {
|
|
52
|
-
return {
|
|
53
|
-
type: "object",
|
|
54
|
-
required: ["aco", "aro", "aco_foreign_key", "aro_foreign_key", "type"],
|
|
55
|
-
properties: {
|
|
56
|
-
id: {
|
|
57
|
-
type: "string",
|
|
58
|
-
format: "uuid",
|
|
59
|
-
},
|
|
60
|
-
aco: {
|
|
61
|
-
type: "string",
|
|
62
|
-
enum: [PermissionEntity.ACO_FOLDER, PermissionEntity.ACO_RESOURCE],
|
|
63
|
-
},
|
|
64
|
-
aco_foreign_key: {
|
|
65
|
-
type: "string",
|
|
66
|
-
format: "uuid",
|
|
67
|
-
},
|
|
68
|
-
aro: {
|
|
69
|
-
type: "string",
|
|
70
|
-
enum: [PermissionEntity.ARO_GROUP, PermissionEntity.ARO_USER],
|
|
71
|
-
},
|
|
72
|
-
aro_foreign_key: {
|
|
73
|
-
type: "string",
|
|
74
|
-
format: "uuid",
|
|
75
|
-
},
|
|
76
|
-
type: {
|
|
77
|
-
type: "integer",
|
|
78
|
-
enum: PermissionEntity.PERMISSION_TYPES,
|
|
79
|
-
},
|
|
80
|
-
created: {
|
|
81
|
-
type: "string",
|
|
82
|
-
format: "date-time",
|
|
83
|
-
},
|
|
84
|
-
modified: {
|
|
85
|
-
type: "string",
|
|
86
|
-
format: "date-time",
|
|
87
|
-
},
|
|
88
|
-
// Associated models
|
|
89
|
-
user: UserEntity.getSchema(),
|
|
90
|
-
group: GroupEntity.getSchema(),
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/*
|
|
96
|
-
* ==================================================
|
|
97
|
-
* Serialization
|
|
98
|
-
* ==================================================
|
|
99
|
-
*/
|
|
100
|
-
/**
|
|
101
|
-
* Return a DTO ready to be sent to API
|
|
102
|
-
*
|
|
103
|
-
* @param {object} [contain] optional
|
|
104
|
-
* @returns {object}
|
|
105
|
-
*/
|
|
106
|
-
toDto(contain) {
|
|
107
|
-
const result = Object.assign({}, this._props);
|
|
108
|
-
if (!contain) {
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
if (this._user && contain.user) {
|
|
112
|
-
if (contain.user === true) {
|
|
113
|
-
result.user = this._user.toDto();
|
|
114
|
-
} else {
|
|
115
|
-
result.user = this._user.toDto(contain.user);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (this._group && contain.group) {
|
|
119
|
-
result.group = this._group.toDto();
|
|
120
|
-
}
|
|
121
|
-
return result;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Customizes JSON stringification behavior
|
|
126
|
-
* @returns {*}
|
|
127
|
-
*/
|
|
128
|
-
toJSON() {
|
|
129
|
-
return this.toDto(PermissionEntity.ALL_CONTAIN_OPTIONS);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/*
|
|
133
|
-
* ==================================================
|
|
134
|
-
* Dynamic properties getters
|
|
135
|
-
* ==================================================
|
|
136
|
-
*/
|
|
137
|
-
/**
|
|
138
|
-
* Get permission id
|
|
139
|
-
* @returns {(string|null)} uuid if set
|
|
140
|
-
*/
|
|
141
|
-
get id() {
|
|
142
|
-
return this._props.id || null;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Get ACO - Access Control Object
|
|
147
|
-
* @returns {string} Folder or Resource
|
|
148
|
-
*/
|
|
149
|
-
get aco() {
|
|
150
|
-
return this._props.aco;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Get ARO - Access Request Object
|
|
155
|
-
* @returns {string} Groups or User
|
|
156
|
-
*/
|
|
157
|
-
get aro() {
|
|
158
|
-
return this._props.aro;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Get ARO id
|
|
163
|
-
* @returns {string} uuid
|
|
164
|
-
*/
|
|
165
|
-
get aroForeignKey() {
|
|
166
|
-
return this._props.aro_foreign_key;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Get ACO id
|
|
171
|
-
* @returns {string} uuid
|
|
172
|
-
*/
|
|
173
|
-
get acoForeignKey() {
|
|
174
|
-
return this._props.aco_foreign_key;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Get permission type
|
|
179
|
-
* @returns {int} 1: read, 5: update, 15: admin
|
|
180
|
-
*/
|
|
181
|
-
get type() {
|
|
182
|
-
return this._props.type;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Return true if owner permission
|
|
187
|
-
* @returns {boolean}
|
|
188
|
-
*/
|
|
189
|
-
isOwner() {
|
|
190
|
-
return this.type === PermissionEntity.PERMISSION_OWNER;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/*
|
|
194
|
-
* ==================================================
|
|
195
|
-
* Static properties getters
|
|
196
|
-
* ==================================================
|
|
197
|
-
*/
|
|
198
|
-
/**
|
|
199
|
-
* PermissionEntity.ENTITY_NAME
|
|
200
|
-
* @returns {string}
|
|
201
|
-
*/
|
|
202
|
-
static get ENTITY_NAME() {
|
|
203
|
-
return ENTITY_NAME;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* PermissionEntity.PERMISSION_OWNER
|
|
208
|
-
* @returns {number}
|
|
209
|
-
*/
|
|
210
|
-
static get PERMISSION_OWNER() {
|
|
211
|
-
return PERMISSION_OWNER;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* PermissionEntity.PERMISSION_UPDATE
|
|
216
|
-
* @returns {number}
|
|
217
|
-
*/
|
|
218
|
-
static get PERMISSION_UPDATE() {
|
|
219
|
-
return PERMISSION_UPDATE;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* PermissionEntity.PERMISSION_READ
|
|
224
|
-
* @returns {number}
|
|
225
|
-
*/
|
|
226
|
-
static get PERMISSION_READ() {
|
|
227
|
-
return PERMISSION_READ;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* PermissionEntity.ARO_GROUP
|
|
232
|
-
* @returns {string}
|
|
233
|
-
*/
|
|
234
|
-
static get ARO_GROUP() {
|
|
235
|
-
return ARO_GROUP;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* PermissionEntity.ARO_USER
|
|
240
|
-
* @returns {string}
|
|
241
|
-
*/
|
|
242
|
-
static get ARO_USER() {
|
|
243
|
-
return ARO_USER;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* PermissionEntity.ACO_RESOURCE
|
|
248
|
-
* @returns {string}
|
|
249
|
-
*/
|
|
250
|
-
static get ACO_RESOURCE() {
|
|
251
|
-
return ACO_RESOURCE;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* PermissionEntity.ACO_FOLDER
|
|
256
|
-
* @returns {string}
|
|
257
|
-
*/
|
|
258
|
-
static get ACO_FOLDER() {
|
|
259
|
-
return ACO_FOLDER;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* PermissionEntity.ALL_CONTAIN_OPTIONS
|
|
264
|
-
* @returns {object} all contain options that can be used in toDto()
|
|
265
|
-
*/
|
|
266
|
-
static get ALL_CONTAIN_OPTIONS() {
|
|
267
|
-
return { user: { profile: { avatar: true } }, group: true };
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* PermissionEntity.PERMISSION_TYPES
|
|
272
|
-
* @returns {number[]}
|
|
273
|
-
*/
|
|
274
|
-
static get PERMISSION_TYPES() {
|
|
275
|
-
return [PermissionEntity.PERMISSION_READ, PermissionEntity.PERMISSION_UPDATE, PermissionEntity.PERMISSION_OWNER];
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/*
|
|
279
|
-
* ==================================================
|
|
280
|
-
* Associated properties getters
|
|
281
|
-
* ==================================================
|
|
282
|
-
*/
|
|
283
|
-
/**
|
|
284
|
-
* Get associated user data
|
|
285
|
-
* @returns {(UserEntity|null)} user
|
|
286
|
-
*/
|
|
287
|
-
get user() {
|
|
288
|
-
return this._user || null;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Get associated group data
|
|
293
|
-
* @returns {(GroupEntity|null)} group
|
|
294
|
-
*/
|
|
295
|
-
get group() {
|
|
296
|
-
return this._group || null;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/*
|
|
300
|
-
* ==================================================
|
|
301
|
-
* Dynamic properties setters
|
|
302
|
-
* ==================================================
|
|
303
|
-
*/
|
|
304
|
-
/**
|
|
305
|
-
* Set the permission id
|
|
306
|
-
*
|
|
307
|
-
* @param {string} id
|
|
308
|
-
* @throws {TypeError} if permissions id is not UUID
|
|
309
|
-
*/
|
|
310
|
-
set id(id) {
|
|
311
|
-
if (!Validator.isUUID(id)) {
|
|
312
|
-
throw new TypeError("The permission id should be a valid UUID.");
|
|
313
|
-
}
|
|
314
|
-
this._props.id = id;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Set the permission type
|
|
319
|
-
*
|
|
320
|
-
* @param {int} type
|
|
321
|
-
* @param type
|
|
322
|
-
*/
|
|
323
|
-
set type(type) {
|
|
324
|
-
if (!type || !PermissionEntity.PERMISSION_TYPES.includes(type)) {
|
|
325
|
-
throw new TypeError("The type should be a valid integer.");
|
|
326
|
-
}
|
|
327
|
-
this._props.type = type;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
/*
|
|
331
|
-
* ==================================================
|
|
332
|
-
* Assertions
|
|
333
|
-
* ==================================================
|
|
334
|
-
*/
|
|
335
|
-
/**
|
|
336
|
-
* Basic type assertion helper
|
|
337
|
-
*
|
|
338
|
-
* @param {PermissionEntity} permission
|
|
339
|
-
*/
|
|
340
|
-
static assertIsPermission(permission) {
|
|
341
|
-
if (!permission || !(permission instanceof PermissionEntity)) {
|
|
342
|
-
throw new TypeError("Failed to assert the parameter is a valid permission");
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Basic type assertion helper
|
|
348
|
-
*
|
|
349
|
-
* @param {PermissionEntity} p1
|
|
350
|
-
* @param {PermissionEntity} p2
|
|
351
|
-
*/
|
|
352
|
-
static assertArePermissions(p1, p2) {
|
|
353
|
-
PermissionEntity.assertIsPermission(p1);
|
|
354
|
-
PermissionEntity.assertIsPermission(p2);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/*
|
|
358
|
-
* ==================================================
|
|
359
|
-
* Permission comparison operators
|
|
360
|
-
* ==================================================
|
|
361
|
-
*/
|
|
362
|
-
/**
|
|
363
|
-
* Return true if two given permission have the same id
|
|
364
|
-
*
|
|
365
|
-
* @param {PermissionEntity} p1
|
|
366
|
-
* @param {PermissionEntity} p2
|
|
367
|
-
* @returns {boolean} true if permission ids match
|
|
368
|
-
*/
|
|
369
|
-
static isIdMatching(p1, p2) {
|
|
370
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
371
|
-
return p1.id === p2.id;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Return true if two given permission are about the same user or group
|
|
376
|
-
*
|
|
377
|
-
* @param {PermissionEntity} p1
|
|
378
|
-
* @param {PermissionEntity} p2
|
|
379
|
-
* @returns {boolean} true if permissions match
|
|
380
|
-
*/
|
|
381
|
-
static isAroMatching(p1, p2) {
|
|
382
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
383
|
-
return p1.aro === p2.aro && p1.aroForeignKey === p2.aroForeignKey;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Return true if two given permission are about the same folder or resource
|
|
388
|
-
*
|
|
389
|
-
* @param {PermissionEntity} p1
|
|
390
|
-
* @param {PermissionEntity} p2
|
|
391
|
-
* @returns {boolean} true if permissions match
|
|
392
|
-
*/
|
|
393
|
-
static isAcoMatching(p1, p2) {
|
|
394
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
395
|
-
return p1.aco === p2.aco && p1.acoForeignKey === p2.acoForeignKey;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Return true if two given permission are about the same folder/resource and group/user
|
|
400
|
-
*
|
|
401
|
-
* @param {PermissionEntity} p1
|
|
402
|
-
* @param {PermissionEntity} p2
|
|
403
|
-
* @returns {boolean} true if permissions match
|
|
404
|
-
*/
|
|
405
|
-
static isAcoAndAroMatching(p1, p2) {
|
|
406
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
407
|
-
return PermissionEntity.isAcoMatching(p1, p2) && PermissionEntity.isAroMatching(p1, p2);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
/**
|
|
411
|
-
* Return true if two given permission are the same type
|
|
412
|
-
* Example both permission are about an update right
|
|
413
|
-
*
|
|
414
|
-
* @param {PermissionEntity} p1
|
|
415
|
-
* @param {PermissionEntity} p2
|
|
416
|
-
* @returns {boolean} true if permissions match
|
|
417
|
-
*/
|
|
418
|
-
static isTypeMatching(p1, p2) {
|
|
419
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
420
|
-
return p1.type === p2.type;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Return true if two given permission aco, aro and type matches
|
|
425
|
-
*
|
|
426
|
-
* @param {PermissionEntity} p1
|
|
427
|
-
* @param {PermissionEntity} p2
|
|
428
|
-
* @returns {boolean} true if permissions match
|
|
429
|
-
*/
|
|
430
|
-
static isMatchingAroAcoType(p1, p2) {
|
|
431
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
432
|
-
return PermissionEntity.isAcoAndAroMatching(p1, p2) && PermissionEntity.isTypeMatching(p1, p2);
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
/**
|
|
436
|
-
* Return the highest permission type
|
|
437
|
-
*
|
|
438
|
-
* @param {PermissionEntity} p1
|
|
439
|
-
* @param {PermissionEntity} p2
|
|
440
|
-
* @returns {int} highest permission type
|
|
441
|
-
*/
|
|
442
|
-
static getHighestPermissionType(p1, p2) {
|
|
443
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
444
|
-
return p1.type > p2.type ? p1.type : p2.type;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/**
|
|
448
|
-
* Return true if two given permission are the same type
|
|
449
|
-
* Example both permission are about an update right
|
|
450
|
-
*
|
|
451
|
-
* @param {PermissionEntity} p1
|
|
452
|
-
* @param {PermissionEntity} p2
|
|
453
|
-
* @returns {PermissionEntity} the permission with highest type
|
|
454
|
-
*/
|
|
455
|
-
static getHighestPermission(p1, p2) {
|
|
456
|
-
PermissionEntity.assertArePermissions(p1, p2);
|
|
457
|
-
return p1.type > p2.type ? p1 : p2;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/*
|
|
461
|
-
* ==================================================
|
|
462
|
-
* Permission factories
|
|
463
|
-
* ==================================================
|
|
464
|
-
*/
|
|
465
|
-
/**
|
|
466
|
-
* Create a permission copy to be used by another aco
|
|
467
|
-
* Useful for example when you want to reuse a permission from a folder
|
|
468
|
-
* and apply it to a resource. For example on a move or a share operation.
|
|
469
|
-
*
|
|
470
|
-
* @param aco
|
|
471
|
-
* @param acoForeignKey
|
|
472
|
-
* @returns {PermissionEntity}
|
|
473
|
-
*/
|
|
474
|
-
copyForAnotherAco(aco, acoForeignKey) {
|
|
475
|
-
return new PermissionEntity({
|
|
476
|
-
aro: this.aro,
|
|
477
|
-
aro_foreign_key: this.aroForeignKey,
|
|
478
|
-
aco: aco,
|
|
479
|
-
aco_foreign_key: acoForeignKey,
|
|
480
|
-
type: this.type,
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
export default PermissionEntity;
|