From 8148a418a86d278609b88c9c3e0fc241326025c4 Mon Sep 17 00:00:00 2001 From: ritave Date: Wed, 13 Apr 2022 14:16:29 +0200 Subject: [PATCH 1/2] Added GrantPermissions action to PermissionsController --- src/permissions/PermissionController.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/permissions/PermissionController.ts b/src/permissions/PermissionController.ts index ec107becafe..de35ff29e2f 100644 --- a/src/permissions/PermissionController.ts +++ b/src/permissions/PermissionController.ts @@ -212,6 +212,14 @@ export type HasPermission = { handler: GenericPermissionController['hasPermission']; }; +/** + * Directly grants given permissions for a specificed origin without requesting user approval + */ +export type GrantPermissions = { + type: `${typeof controllerName}:grantPermissions`; + handler: GenericPermissionController['grantPermissions']; +}; + /** * Requests given permissions for a specified origin */ @@ -272,6 +280,7 @@ export type PermissionControllerActions = | GetPermissions | HasPermission | HasPermissions + | GrantPermissions | RequestPermissions | RevokeAllPermissions | RevokePermissionForAllSubjects @@ -690,6 +699,11 @@ export class PermissionController< (origin: OriginString) => this.hasPermissions(origin), ); + this.messagingSystem.registerActionHandler( + `${controllerName}:grantPermissions` as const, + this.grantPermissions.bind(this), + ); + this.messagingSystem.registerActionHandler( `${controllerName}:requestPermissions` as const, (subject: PermissionSubjectMetadata, permissions: RequestedPermissions) => From 17e027ce3c50109f93ac7c7375b42d77f3ff4e8c Mon Sep 17 00:00:00 2001 From: ritave Date: Wed, 13 Apr 2022 15:55:26 +0200 Subject: [PATCH 2/2] Added test for PermissionController:grantPermissions action --- src/permissions/PermissionController.test.ts | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/permissions/PermissionController.test.ts b/src/permissions/PermissionController.test.ts index a80bda6635c..3fd9e0833bf 100644 --- a/src/permissions/PermissionController.test.ts +++ b/src/permissions/PermissionController.test.ts @@ -30,7 +30,6 @@ import { RestrictedMethodParameters, ValidPermission, } from '.'; - // Caveat types and specifications const CaveatTypes = { @@ -4492,6 +4491,27 @@ describe('PermissionController', () => { ); }); + it('action: PermissionsController:grantPermissions', async () => { + const messenger = getUnrestrictedMessenger(); + const options = getPermissionControllerOptions({ + messenger: getPermissionControllerMessenger(messenger), + }); + const controller = new PermissionController< + DefaultPermissionSpecifications, + DefaultCaveatSpecifications + >(options); + + const result = messenger.call('PermissionController:grantPermissions', { + subject: { origin: 'foo' }, + approvedPermissions: { wallet_getSecretArray: {} }, + }); + + expect(result).toHaveProperty('wallet_getSecretArray'); + expect( + controller.hasPermission('foo', 'wallet_getSecretArray'), + ).toStrictEqual(true); + }); + it('action: PermissionsController:requestPermissions', async () => { const messenger = getUnrestrictedMessenger(); const options = getPermissionControllerOptions({