diff --git a/Gruntfile.js b/Gruntfile.js
index 10b19b9e..4053a99b 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -47,7 +47,8 @@ module.exports = function (grunt) {
const webpackOptions = {
date,
beta: !!grunt.option('beta'),
- sha
+ sha,
+ appleTeamId: getCodeSignConfig()?.teamId
};
const windowsAppVersionString = {
@@ -755,7 +756,7 @@ module.exports = function (grunt) {
cmakeConfigure: ['-DCMAKE_OSX_ARCHITECTURES=x86_64']
},
files: {
- 'tmp/desktop/KeeWeb-darwin-x64/KeeWeb.app/Contents/MacOS/keeweb-native-messaging-host':
+ 'tmp/desktop/KeeWeb-darwin-x64/KeeWeb.app/Contents/MacOS/util/keeweb-native-messaging-host':
'extension/native-messaging-host'
}
},
@@ -765,7 +766,7 @@ module.exports = function (grunt) {
cmakeConfigure: ['-DCMAKE_OSX_ARCHITECTURES=arm64']
},
files: {
- 'tmp/desktop/KeeWeb-darwin-arm64/KeeWeb.app/Contents/MacOS/keeweb-native-messaging-host':
+ 'tmp/desktop/KeeWeb-darwin-arm64/KeeWeb.app/Contents/MacOS/util/keeweb-native-messaging-host':
'extension/native-messaging-host'
}
},
diff --git a/app/scripts/comp/extension/browser-extension-connector.js b/app/scripts/comp/extension/browser-extension-connector.js
index 5a3bacb6..ddd03013 100644
--- a/app/scripts/comp/extension/browser-extension-connector.js
+++ b/app/scripts/comp/extension/browser-extension-connector.js
@@ -55,9 +55,21 @@ const BrowserExtensionConnector = {
window.removeEventListener('message', this.browserWindowMessage);
},
+ isSocketNameTooLong(socketName) {
+ const maxLength = process.platform === 'win32' ? 256 : 104;
+ return socketName.length > maxLength;
+ },
+
startDesktopAppListener() {
- Launcher.closeOldBrowserExtensionSocket(() => {
+ Launcher.prepareBrowserExtensionSocket(() => {
const sockName = Launcher.getBrowserExtensionSocketName();
+ if (this.isSocketNameTooLong(sockName)) {
+ logger.error(
+ "Socket name is too big, browser connection won't be possible, probably OS username is very long.",
+ sockName
+ );
+ return;
+ }
const { createServer } = Launcher.req('net');
this.connectedSockets = [];
this.connectedSocketState = new WeakMap();
diff --git a/app/scripts/comp/launcher/launcher-electron.js b/app/scripts/comp/launcher/launcher-electron.js
index 4198e38a..91018413 100644
--- a/app/scripts/comp/launcher/launcher-electron.js
+++ b/app/scripts/comp/launcher/launcher-electron.js
@@ -290,16 +290,23 @@ const Launcher = {
return this.getMainWindow().isMaximized();
},
getBrowserExtensionSocketName() {
- const userInfo = this.req('os').userInfo();
- if (process.platform === 'win32') {
- return `\\\\.\\pipe\\keeweb-browser-${userInfo.username}`;
+ const { username, uid } = this.req('os').userInfo();
+ if (process.platform === 'darwin') {
+ const teamId = RuntimeInfo.appleTeamId;
+ return `/Users/${username}/Library/Group Containers/${teamId}.keeweb/browser.sock`;
+ } else if (process.platform === 'win32') {
+ return `\\\\.\\pipe\\keeweb-browser-${username}`;
} else {
- const sockFileName = `keeweb-browser-${userInfo.uid}.sock`;
+ const sockFileName = `keeweb-browser-${uid}.sock`;
return this.joinPath(this.remoteApp().getPath('temp'), sockFileName);
}
},
- closeOldBrowserExtensionSocket(done) {
- if (process.platform === 'win32') {
+ prepareBrowserExtensionSocket(done) {
+ if (process.platform === 'darwin') {
+ const dir = this.req('path').dirname(this.getBrowserExtensionSocketName());
+ const fs = this.req('fs');
+ fs.mkdir(dir, () => done());
+ } else if (process.platform === 'win32') {
done();
} else {
this.deleteFile(this.getBrowserExtensionSocketName(), done);
diff --git a/app/scripts/const/runtime-info.js b/app/scripts/const/runtime-info.js
index 78eb8253..1ac7bc37 100644
--- a/app/scripts/const/runtime-info.js
+++ b/app/scripts/const/runtime-info.js
@@ -3,7 +3,8 @@ const RuntimeInfo = {
beta: !!'@@BETA',
buildDate: '@@DATE',
commit: '@@COMMIT',
- devMode: '@@DEVMODE'
+ devMode: '@@DEVMODE',
+ appleTeamId: '@@APPLE_TEAM_ID'
};
export { RuntimeInfo };
diff --git a/build/webpack.config.js b/build/webpack.config.js
index 8492ff13..bce2169d 100644
--- a/build/webpack.config.js
+++ b/build/webpack.config.js
@@ -130,7 +130,8 @@ function config(options) {
search: /@@COMMIT/g,
replace: options.sha
},
- { search: /@@DEVMODE/g, replace: devMode ? '1' : '' }
+ { search: /@@DEVMODE/g, replace: devMode ? '1' : '' },
+ { search: /@@APPLE_TEAM_ID/g, replace: options.appleTeamId }
]
}
},
diff --git a/extension/native-messaging-host/src/native-messaging-host.cpp b/extension/native-messaging-host/src/native-messaging-host.cpp
index 368b57a5..c878fc9d 100644
--- a/extension/native-messaging-host/src/native-messaging-host.cpp
+++ b/extension/native-messaging-host/src/native-messaging-host.cpp
@@ -204,6 +204,9 @@ std::string keeweb_pipe_name() {
} else {
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32)
pipe_name = "\\\\.\\pipe\\keeweb-browser-" + std::string{user_info.username};
+#elif __APPLE__
+ pipe_name = "/Users/" + std::string{user_info.username} +
+ "/Library/Group Containers/3LE7JZ657W.keeweb/browser.sock";
#else
pipe_name = std::filesystem::temp_directory_path() /
("keeweb-browser-" + std::to_string(user_info.uid) + ".sock");
diff --git a/extension/native-messaging-host/test/native-messaging-host-test.mjs b/extension/native-messaging-host/test/native-messaging-host-test.mjs
index 7665809a..02f8a979 100644
--- a/extension/native-messaging-host/test/native-messaging-host-test.mjs
+++ b/extension/native-messaging-host/test/native-messaging-host-test.mjs
@@ -11,7 +11,10 @@ describe('KeeWeb extension native module host', function () {
const userInfo = os.userInfo();
let sockPath;
let hostPath;
- if (process.platform === 'win32') {
+ if (process.platform === 'darwin') {
+ sockPath = `/Users/${userInfo.username}/Library/Group Containers/3LE7JZ657W.keeweb/browser.sock`;
+ hostPath = 'build/keeweb-native-messaging-host';
+ } else if (process.platform === 'win32') {
sockPath = `\\\\.\\pipe\\keeweb-browser-${userInfo.username}`;
hostPath = 'build\\Debug\\keeweb-native-messaging-host.exe';
} else {
diff --git a/package/osx/entitlements.plist b/package/osx/entitlements.plist
index 4c344984..f53ea84f 100644
--- a/package/osx/entitlements.plist
+++ b/package/osx/entitlements.plist
@@ -12,6 +12,10 @@
3LE7JZ657W.net.antelle.keeweb
+ com.apple.security.application-groups
+
+ 3LE7JZ657W.keeweb
+
com.apple.application-identifier
3LE7JZ657W.net.antelle.keeweb
com.apple.developer.team-identifier