From b1276a96e2a1786e7c3e85a20af6f512cae17741 Mon Sep 17 00:00:00 2001 From: Grigorii Shartsev Date: Fri, 24 Mar 2023 16:48:07 +0100 Subject: [PATCH 1/2] fix(build): add plist with permissions for mac Signed-off-by: Grigorii Shartsev --- .editorconfig | 2 +- build/mac/entitlements.mac.plist | 16 ++++++++++++++++ forge.config.js | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 build/mac/entitlements.mac.plist diff --git a/.editorconfig b/.editorconfig index 1aae5c3b..260e9d92 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,7 +17,7 @@ tab_width = 2 [*.json] tab_width = 2 -[*.html] +[{*.html,*.xml,*.plist}] tab_width = 2 [{*.markdown,*.md}] diff --git a/build/mac/entitlements.mac.plist b/build/mac/entitlements.mac.plist new file mode 100644 index 00000000..56f2fdb0 --- /dev/null +++ b/build/mac/entitlements.mac.plist @@ -0,0 +1,16 @@ + + + + + com.apple.security.device.audio-input + + com.apple.security.device.microphone + + com.apple.security.device.camera + + com.apple.security.files.user-selected.read-write + + com.apple.security.network.client + + + diff --git a/forge.config.js b/forge.config.js index 520bf7f1..2f5b7511 100644 --- a/forge.config.js +++ b/forge.config.js @@ -24,6 +24,7 @@ require('dotenv').config() module.exports = { packagerConfig: { icon: './img/icons/icon', + extendInfo: './build/mac/entitlements.mac.plist', }, rebuildConfig: {}, makers: [ From 50a42811209e7315c21e4798ec8f2b3c17e959e1 Mon Sep 17 00:00:00 2001 From: Grigorii Shartsev Date: Fri, 24 Mar 2023 17:30:08 +0100 Subject: [PATCH 2/2] WIP Signed-off-by: Grigorii Shartsev --- src/app/permissionHandlers.js | 32 ++++++++++++++++++++++++++++++++ src/main.js | 4 ++++ 2 files changed, 36 insertions(+) create mode 100644 src/app/permissionHandlers.js diff --git a/src/app/permissionHandlers.js b/src/app/permissionHandlers.js new file mode 100644 index 00000000..139cc7e3 --- /dev/null +++ b/src/app/permissionHandlers.js @@ -0,0 +1,32 @@ +/* + * @copyright Copyright (c) 2023 Grigorii Shartsev + * + * @author Grigorii Shartsev + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/** + * @implements {Parameters[0]} + */ +function permissionHandler(webContents, permission, callback, details) { + // TODO: store permissions in a local user config + callback(true) +} + +module.exports = { + permissionHandler, +} diff --git a/src/main.js b/src/main.js index 636500e0..19235038 100644 --- a/src/main.js +++ b/src/main.js @@ -25,6 +25,7 @@ const { dialog, BrowserWindow, ipcMain, + session, } = require('electron') const { default: installExtension, @@ -41,6 +42,7 @@ const { const { getOs, isLinux } = require('./shared/os.utils.js') const { setupMenu } = require('./app/app.menu.js') const { createHelpWindow } = require('./help/help.window.js') +const { permissionHandler } = require('./app/permissionHandlers.js') /** * Separate production and development instances, including application and user data @@ -175,6 +177,7 @@ app.whenReady().then(async () => { mainWindow.close() mainWindow = createTalkWindow() createMainWindow = createTalkWindow + session.defaultSession.setPermissionRequestHandler(permissionHandler) }) ipcMain.handle('authentication:logout', async (event) => { @@ -186,6 +189,7 @@ app.whenReady().then(async () => { mainWindow.once('ready-to-show', () => { mainWindow.show() }) + session.defaultSession.setPermissionRequestHandler(null) } })