mirror of
https://github.com/SchildiChat/element-web.git
synced 2024-10-01 01:26:12 -04:00
Fix Electron SSO handling to support multiple profiles
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
a377ca7b85
commit
8ca9e4ccb1
@ -68,7 +68,14 @@ if (argv["help"]) {
|
||||
app.exit();
|
||||
}
|
||||
|
||||
if (argv['profile-dir']) {
|
||||
// check if we are passed a profile in the SSO callback url
|
||||
const deeplinkUrl = argv["_"].find(arg => arg.startsWith('riot://'));
|
||||
if (deeplinkUrl && deeplinkUrl.includes('riot-desktop-user-data-path')) {
|
||||
const parsedUrl = new URL(deeplinkUrl);
|
||||
if (parsedUrl.protocol === 'riot:') {
|
||||
app.setPath('userData', parsedUrl.searchParams.get('riot-desktop-user-data-path'));
|
||||
}
|
||||
} else if (argv['profile-dir']) {
|
||||
app.setPath('userData', argv['profile-dir']);
|
||||
} else if (argv['profile']) {
|
||||
app.setPath('userData', `${app.getPath('userData')}-${argv['profile']}`);
|
||||
@ -233,6 +240,11 @@ ipcMain.on('ipcCall', async function(ev, payload) {
|
||||
case 'getConfig':
|
||||
ret = vectorConfig;
|
||||
break;
|
||||
case 'getUserDataPath':
|
||||
if (argv['profile-dir'] || argv['profile']) {
|
||||
ret = app.getPath('userData');
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
mainWindow.webContents.send('ipcReply', {
|
||||
|
@ -228,6 +228,11 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
description: _td("Open user settings"),
|
||||
});
|
||||
}
|
||||
|
||||
// we assume this happens before any SSO actions occur but do not block.
|
||||
this._ipcCall('getUserDataPath').then(userDataPath => {
|
||||
this.userDataPath = userDataPath;
|
||||
});
|
||||
}
|
||||
|
||||
async getConfig(): Promise<{}> {
|
||||
@ -424,6 +429,9 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
getSSOCallbackUrl(hsUrl: string, isUrl: string): URL {
|
||||
const url = super.getSSOCallbackUrl(hsUrl, isUrl);
|
||||
url.protocol = "riot";
|
||||
if (this.userDataPath) {
|
||||
url.searchParams.set("riot-desktop-user-data-path", this.userDataPath);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user