[MM-58158] Make sure closing the permissions dialog results in a Deny instead of an Allow (#3032) (#3033)

(cherry picked from commit 3cf7ec7451)

Co-authored-by: Devin Binnie <52460000+devinbinnie@users.noreply.github.com>
This commit is contained in:
Mattermost Build 2024-05-08 22:01:00 +03:00 committed by GitHub
parent a1f5430824
commit dd4870f96f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 10 deletions

View file

@ -145,7 +145,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 0})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 2}));
await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'}); await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'});
expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(true); expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(true);
expect(permissionsManager.writeToFile).toHaveBeenCalled(); expect(permissionsManager.writeToFile).toHaveBeenCalled();
@ -156,7 +156,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 1})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 0}));
await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'}); await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'});
expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(false); expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(false);
expect(permissionsManager.writeToFile).toHaveBeenCalled(); expect(permissionsManager.writeToFile).toHaveBeenCalled();
@ -167,7 +167,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 2})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 1}));
await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'}); await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'});
expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(false); expect(permissionsManager.json['http://anyurl.com'].media.allowed).toBe(false);
expect(permissionsManager.json['http://anyurl.com'].media.alwaysDeny).toBe(true); expect(permissionsManager.json['http://anyurl.com'].media.alwaysDeny).toBe(true);
@ -179,7 +179,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 0})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 2}));
await Promise.all([ await Promise.all([
permissionsManager.handlePermissionRequest({id: 2}, 'notifications', cb, {requestingUrl: 'http://anyurl.com'}), permissionsManager.handlePermissionRequest({id: 2}, 'notifications', cb, {requestingUrl: 'http://anyurl.com'}),
permissionsManager.handlePermissionRequest({id: 2}, 'notifications', cb, {requestingUrl: 'http://anyurl.com'}), permissionsManager.handlePermissionRequest({id: 2}, 'notifications', cb, {requestingUrl: 'http://anyurl.com'}),
@ -199,7 +199,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 0})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 2}));
await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'}); await permissionsManager.handlePermissionRequest({id: 2}, 'media', cb, {securityOrigin: 'http://anyurl.com'});
expect(dialog.showMessageBox).toHaveBeenCalled(); expect(dialog.showMessageBox).toHaveBeenCalled();
}); });
@ -208,7 +208,7 @@ describe('main/PermissionsManager', () => {
const permissionsManager = new PermissionsManager('anyfile.json'); const permissionsManager = new PermissionsManager('anyfile.json');
permissionsManager.writeToFile = jest.fn(); permissionsManager.writeToFile = jest.fn();
const cb = jest.fn(); const cb = jest.fn();
dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 0})); dialog.showMessageBox.mockReturnValue(Promise.resolve({response: 2}));
await permissionsManager.handlePermissionRequest({id: 2}, 'openExternal', cb, {requestingUrl: 'http://anyurl.com', externalURL: 'ms-excel://differenturl.com'}); await permissionsManager.handlePermissionRequest({id: 2}, 'openExternal', cb, {requestingUrl: 'http://anyurl.com', externalURL: 'ms-excel://differenturl.com'});
expect(dialog.showMessageBox).toHaveBeenCalled(); expect(dialog.showMessageBox).toHaveBeenCalled();
}); });

View file

@ -152,16 +152,16 @@ export class PermissionsManager extends JsonFileManager<Permissions> {
detail: localizeMessage(`main.permissionsManager.checkPermission.dialog.detail.${permission}`, 'Would you like to grant {appName} this permission?', {appName: app.name}), detail: localizeMessage(`main.permissionsManager.checkPermission.dialog.detail.${permission}`, 'Would you like to grant {appName} this permission?', {appName: app.name}),
type: 'question', type: 'question',
buttons: [ buttons: [
localizeMessage('label.allow', 'Allow'),
localizeMessage('label.deny', 'Deny'), localizeMessage('label.deny', 'Deny'),
localizeMessage('label.denyPermanently', 'Deny Permanently'), localizeMessage('label.denyPermanently', 'Deny Permanently'),
localizeMessage('label.allow', 'Allow'),
], ],
}); });
// Save their response // Save their response
const newPermission = { const newPermission = {
allowed: response === 0, allowed: response === 2,
alwaysDeny: (response === 2) ? true : undefined, alwaysDeny: (response === 1) ? true : undefined,
}; };
this.json[parsedURL.origin] = { this.json[parsedURL.origin] = {
...this.json[parsedURL.origin], ...this.json[parsedURL.origin],
@ -171,7 +171,7 @@ export class PermissionsManager extends JsonFileManager<Permissions> {
this.inflightPermissionChecks.delete(permissionKey); this.inflightPermissionChecks.delete(permissionKey);
if (response > 0) { if (response < 2) {
return false; return false;
} }
} }