mirror of
https://github.com/bitwarden/browser
synced 2025-12-17 08:43:33 +00:00
* created and applied link-sso component * implemented linking existing user to sso * removed an unused import * created and applied link-sso component * implemented linking existing user to sso * removed an unused import * merge * added a token to the sso linking flow * [jslib] Update (5d874d0->6ab444a) (#618) * Update jslib (5d874d0->6ab444a) * Update dependency flows * created and applied link-sso component * implemented linking existing user to sso * removed an unused import * merge * added a token to the sso linking flow * implemented linking existing user to sso * removed an unused import * account for some variable shakeup in jslib for link sso * updated jslib * updated jslib * still trying to fix jslib * finally, really, truly updated jslib Co-authored-by: Vincent Salucci <26154748+vincentsalucci@users.noreply.github.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
// tslint:disable-next-line
|
|
require('./sso.scss');
|
|
|
|
document.addEventListener('DOMContentLoaded', (event) => {
|
|
const code = getQsParam('code');
|
|
const state = getQsParam('state');
|
|
|
|
if (state != null && state.endsWith(':clientId=browser')) {
|
|
initiateBrowserSso(code, state);
|
|
} else {
|
|
window.location.href = window.location.origin + '/#/sso?code=' + code + '&state=' + state;
|
|
// Match any characters between "_returnUri='" and the next "'"
|
|
const returnUri = extractFromRegex(state, '(?<=_returnUri=\')(.*)(?=\')');
|
|
if (returnUri) {
|
|
window.location.href = window.location.origin + `/#${returnUri}`;
|
|
} else {
|
|
window.location.href = window.location.origin + '/#/sso?code=' + code + '&state=' + state;
|
|
}
|
|
}
|
|
});
|
|
|
|
function getQsParam(name: string) {
|
|
const url = window.location.href;
|
|
name = name.replace(/[\[\]]/g, '\\$&');
|
|
const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');
|
|
const results = regex.exec(url);
|
|
|
|
if (!results) {
|
|
return null;
|
|
}
|
|
if (!results[2]) {
|
|
return '';
|
|
}
|
|
|
|
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
|
}
|
|
|
|
function initiateBrowserSso(code: string, state: string) {
|
|
window.postMessage({ command: 'authResult', code: code, state: state }, '*');
|
|
}
|
|
|
|
function extractFromRegex(s: string, regexString: string) {
|
|
const regex = new RegExp(regexString);
|
|
const results = regex.exec(s);
|
|
|
|
if (!results) {
|
|
return null;
|
|
}
|
|
|
|
return results[0];
|
|
}
|