PM-5384 - Refactor duo redirect connector to use messaging to communicate with browser extension similar to SSO process as BroadcastChannel can only communication on same origins (not web to browser extension). (#7736)

This commit is contained in:
Jared Snider 2024-01-29 18:03:58 -05:00 committed by GitHub
parent 3a9dead640
commit faabb3bbe9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 17 deletions

View File

@ -8,29 +8,36 @@ window.addEventListener("load", () => {
const client = getQsParam("client"); const client = getQsParam("client");
const code = getQsParam("code"); const code = getQsParam("code");
if (client === "browser" || client === "web") { if (client === "web") {
const channel = new BroadcastChannel("duoResult"); const channel = new BroadcastChannel("duoResult");
channel.postMessage({ code: code }); channel.postMessage({ code: code });
channel.close(); channel.close();
const handOffMessage = ("; " + document.cookie) processAndDisplayHandoffMessage();
.split("; duoHandOffMessage=") } else if (client === "browser") {
.pop() window.postMessage({ command: "duoResult", code: code }, "*");
.split(";") processAndDisplayHandoffMessage();
.shift();
document.cookie = "duoHandOffMessage=;SameSite=strict;max-age=0";
const content = document.getElementById("content");
content.innerHTML = "";
const p = document.createElement("p");
p.className = "text-center";
p.innerText = handOffMessage;
content.appendChild(p);
} else if (client === "mobile" || client === "desktop") { } else if (client === "mobile" || client === "desktop") {
document.location.replace(mobileDesktopCallback + "?code=" + encodeURIComponent(code)); document.location.replace(mobileDesktopCallback + "?code=" + encodeURIComponent(code));
} }
}); });
function processAndDisplayHandoffMessage() {
const handOffMessage = ("; " + document.cookie)
.split("; duoHandOffMessage=")
.pop()
.split(";")
.shift();
document.cookie = "duoHandOffMessage=;SameSite=strict;max-age=0";
const content = document.getElementById("content");
content.innerHTML = "";
const p = document.createElement("p");
p.className = "text-center";
p.innerText = handOffMessage;
content.appendChild(p);
}