Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski 2020-04-04 00:48:26 +01:00
parent 8ca9e4ccb1
commit 67cf1e7536
2 changed files with 47 additions and 33 deletions

View file

@ -35,7 +35,7 @@ const tray = require('./tray');
const vectorMenu = require('./vectormenu'); const vectorMenu = require('./vectormenu');
const webContentsHandler = require('./webcontents-handler'); const webContentsHandler = require('./webcontents-handler');
const updater = require('./updater'); const updater = require('./updater');
const protocolInit = require('./protocol'); const {getProfileFromDeeplink, protocolInit} = require('./protocol');
const windowStateKeeper = require('electron-window-state'); const windowStateKeeper = require('electron-window-state');
const Store = require('electron-store'); const Store = require('electron-store');
@ -69,12 +69,9 @@ if (argv["help"]) {
} }
// check if we are passed a profile in the SSO callback url // check if we are passed a profile in the SSO callback url
const deeplinkUrl = argv["_"].find(arg => arg.startsWith('riot://')); const userDataPathInProtocol = getProfileFromDeeplink(argv["_"]);
if (deeplinkUrl && deeplinkUrl.includes('riot-desktop-user-data-path')) { if (userDataPathInProtocol) {
const parsedUrl = new URL(deeplinkUrl); app.setPath('userData', userDataPathInProtocol);
if (parsedUrl.protocol === 'riot:') {
app.setPath('userData', parsedUrl.searchParams.get('riot-desktop-user-data-path'));
}
} else if (argv['profile-dir']) { } else if (argv['profile-dir']) {
app.setPath('userData', argv['profile-dir']); app.setPath('userData', argv['profile-dir']);
} else if (argv['profile']) { } else if (argv['profile']) {

View file

@ -16,16 +16,32 @@ limitations under the License.
const {app} = require('electron'); const {app} = require('electron');
const PROTOCOL = "riot://";
const SEARCH_PARAM = "riot-desktop-user-data-path";
const processUrl = (url) => { const processUrl = (url) => {
if (!global.mainWindow) return; if (!global.mainWindow) return;
console.log("Handling link: ", url); console.log("Handling link: ", url);
global.mainWindow.loadURL(url.replace("riot://", "vector://")); global.mainWindow.loadURL(url.replace(PROTOCOL, "vector://"));
}; };
module.exports = () => { module.exports = {
getProfileFromDeeplink: (args) => {
// check if we are passed a profile in the SSO callback url
const deeplinkUrl = args.find(arg => arg.startsWith('riot://'));
if (deeplinkUrl && deeplinkUrl.includes(SEARCH_PARAM)) {
const parsedUrl = new URL(deeplinkUrl);
if (parsedUrl.protocol === 'riot:') {
const profile = parsedUrl.searchParams.get(SEARCH_PARAM);
console.log("Forwarding to profile: ", profile);
return profile;
}
}
},
protocolInit: () => {
// get all args except `hidden` as it'd mean the app would not get focused // get all args except `hidden` as it'd mean the app would not get focused
// XXX: passing args to protocol handlers only works on Windows, // XXX: passing args to protocol handlers only works on Windows, so unpackaged deep-linking
// so unpackaged deep-linking and --profile passing won't work on Mac/Linux // --profile/--profile-dir are passed via the SEARCH_PARAM var in the callback url
const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden"); const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden");
if (app.isPackaged) { if (app.isPackaged) {
app.setAsDefaultProtocolClient('riot', process.execPath, args); app.setAsDefaultProtocolClient('riot', process.execPath, args);
@ -44,10 +60,11 @@ module.exports = () => {
// Protocol handler for win32/Linux // Protocol handler for win32/Linux
app.on('second-instance', (ev, commandLine) => { app.on('second-instance', (ev, commandLine) => {
const url = commandLine[commandLine.length - 1]; const url = commandLine[commandLine.length - 1];
if (!url.startsWith("riot://")) return; if (!url.startsWith(PROTOCOL)) return;
processUrl(url); processUrl(url);
}); });
} }
},
}; };