1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-14 23:33:31 +00:00
Files
browser/src/connectors/sso.ts
2021-03-16 17:44:31 +01:00

42 lines
1.4 KiB
TypeScript

import { getQsParam } from './common';
// tslint:disable-next-line
require('./sso.scss');
document.addEventListener('DOMContentLoaded', event => {
const code = getQsParam('code');
const state = getQsParam('state');
if (state != null && state.includes(':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 initiateBrowserSso(code: string, state: string) {
window.postMessage({ command: 'authResult', code: code, state: state }, '*');
const handOffMessage = ('; ' + document.cookie).split('; ssoHandOffMessage=').pop().split(';').shift();
document.cookie = 'ssoHandOffMessage=;SameSite=strict;max-age=0';
document.getElementById('content').innerHTML =
`<p>${handOffMessage}</p>`;
}
function extractFromRegex(s: string, regexString: string) {
const regex = new RegExp(regexString);
const results = regex.exec(s);
if (!results) {
return null;
}
return results[0];
}