Path: blob/main/public/webretro/uauth/uauth.js
1224 views
var uauth = {};12uauth.url = "https://binbashbanana.github.io/webretro/uauth/"; // url to use for uauth. must have cross-domain support, a trailing slash, and cannot be cross-origin isolated.3uauth.origins = ["http://localhost:8000", "http://localhost:8001", "https://binbashbanana.github.io"]; // valid origins for the response4uauth.selfSrc = document.currentScript.src;5uauth.bc = new BroadcastChannel("uauth");6uauth.log = function(w, ts) {7if (w) console.log("uauth:", w.timestamp, w.timestamp == ts, w.message);8}910// uauth modes: frame, popup, coisolated1112if (!uauth.mode) uauth.mode = crossOriginIsolated ? "coisolated" : "frame";1314uauth.open = function(type, exts, callback) {15if (uauth.mode == "frame" || !uauth.mode) {16// frame picker mode1718let timestamp = Date.now();19let pickerFrame = document.createElement("iframe");20pickerFrame.style.display = "none";21pickerFrame.crossorigin = "anonymous"; // soon...22pickerFrame.src = uauth.url + "?timestamp=" + timestamp + "&type=" + type + "&exts=" + exts.join(",");23document.body.appendChild(pickerFrame);2425function messageHandler(e) {26if (uauth.origins.includes(e.origin)) uauth.log(e.data.webretro, timestamp);27if (uauth.origins.includes(e.origin) && e.data.webretro && e.data.webretro.timestamp == timestamp) {28window.removeEventListener("message", messageHandler);29pickerFrame.removeAttribute("src");30document.body.removeChild(pickerFrame);31callback(e.data.webretro);32}33}3435window.addEventListener("message", messageHandler, false);36} else if (uauth.mode == "popup") {37// popup picker mode3839let timestamp = Date.now();40let pickerWindow = window.open(uauth.url + "popuppicker.html?timestamp=" + timestamp + "&type=" + type + "&exts=" + exts.join(","));4142function messageHandler(e) {43if (uauth.origins.includes(e.origin)) uauth.log(e.data.webretro, timestamp);44if (uauth.origins.includes(e.origin) && e.data.webretro && e.data.webretro.timestamp == timestamp) {45window.removeEventListener("message", messageHandler);46pickerWindow.close();47callback(e.data.webretro);48}49}5051window.addEventListener("message", messageHandler, false);52} else if (uauth.mode == "coisolated") {53// cross-origin isolated picker mode5455let timestamp = Date.now();56let pickerWindow = window.open(uauth.url + "isolatedpicker.html?returnurl=" + encodeURIComponent(new URL("receiver.html", uauth.selfSrc).href) + "×tamp=" + timestamp + "&type=" + type + "&exts=" + exts.join(","));5758function messageHandler(e) {59if (uauth.origins.includes(e.data.fwOrigin)) uauth.log(e.data.webretro, timestamp);60if (uauth.origins.includes(e.data.fwOrigin) && e.data.webretro && e.data.webretro.timestamp == timestamp) {61uauth.bc.removeEventListener("message", messageHandler);62callback(e.data.webretro);63}64}6566uauth.bc.addEventListener("message", messageHandler, false);67}68};697071