diff options
Diffstat (limited to 'assets/preload-plugins')
-rw-r--r-- | assets/preload-plugins/autoRegister.js | 62 | ||||
-rw-r--r-- | assets/preload-plugins/fosscord-login.js | 12 | ||||
-rw-r--r-- | assets/preload-plugins/webrtc.js | 74 |
3 files changed, 148 insertions, 0 deletions
diff --git a/assets/preload-plugins/autoRegister.js b/assets/preload-plugins/autoRegister.js new file mode 100644 index 00000000..bb0b903d --- /dev/null +++ b/assets/preload-plugins/autoRegister.js @@ -0,0 +1,62 @@ +// Auto register guest account: +const prefix = [ + "mysterious", + "adventurous", + "courageous", + "precious", + "cynical", + "flamer ", + "despicable", + "suspicious", + "gorgeous", + "impeccable", + "lovely", + "stunning", + "keyed", + "phoned", + "glorious", + "amazing", + "strange", + "arcane" +]; +const suffix = [ + "Anonymous", + "Boy", + "Lurker", + "Keyhitter", + "User", + "Enjoyer", + "Hunk", + "Coolstar", + "Wrestling", + "TylerTheCreator", + "Ad", + "Gamer", + "Games", + "Programmer" +]; + +Array.prototype.random = function () { + return this[Math.floor(Math.random() * this.length)]; +}; + +function _generateName() { + return `${prefix.random()}${suffix.random()}`; +} + +var token = JSON.parse(localStorage.getItem("token")); +if (!token && location.pathname !== "/login" && location.pathname !== "/register") { + fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/auth/register`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ username: `${_generateName()}`, consent: true }) //${Date.now().toString().slice(-4)} + }) + .then((x) => x.json()) + .then((x) => { + localStorage.setItem("token", `"${x.token}"`); + if (!window.localStorage) { + // client already loaded -> need to reload to apply the newly registered user token + location.reload(); + } + }); +} diff --git a/assets/preload-plugins/fosscord-login.js b/assets/preload-plugins/fosscord-login.js new file mode 100644 index 00000000..38f82200 --- /dev/null +++ b/assets/preload-plugins/fosscord-login.js @@ -0,0 +1,12 @@ +// Remove `<link id="logincss" rel="stylesheet" href="/assets/fosscord-login.css" />` from header when we're not accessing `/login` or `/register` +// fosscord-login.css replaces discord's TOS tooltip with something more fitting for fosscord, which when included in the main app, causes other tooltips +// to be affected, which is potentially unwanted. +// +// This script removes fosscord-login.css when a user reloads the page. From testing, it appears fosscord already properly removes +// fosscord-login.css after login is successful, but not if you reload the page after logging in. This script is to remove fosscord-login.css in +// that specific case. + +var token = JSON.parse(localStorage.getItem("token")); +if (!token && location.pathname !== "/login" && location.pathname !== "/register") { + document.getElementById("logincss").remove(); +} diff --git a/assets/preload-plugins/webrtc.js b/assets/preload-plugins/webrtc.js new file mode 100644 index 00000000..1acd443a --- /dev/null +++ b/assets/preload-plugins/webrtc.js @@ -0,0 +1,74 @@ +(this.webpackChunkdiscord_app = this.webpackChunkdiscord_app || []).push([ + [[228974]], + { + 632540: (module, exports, req) => { + window.find = (filter, options = {}) => { + const { cacheOnly = false } = options; + for (let i in req.c) { + if (req.c.hasOwnProperty(i)) { + let m = req.c[i].exports; + if (m && m.__esModule && m.default && filter(m.default)) return m.default; + if (m && filter(m)) return m; + } + } + if (cacheOnly) { + console.warn("Cannot find loaded module in cache"); + return null; + } + console.warn("Cannot find loaded module in cache. Loading all modules may have unexpected side effects"); + for (let i = 0; i < req.m.length; ++i) { + let m = req(i); + if (m && m.__esModule && m.default && filter(m.default)) return m.default; + if (m && filter(m)) return m; + } + console.warn("Cannot find module"); + return null; + }; + window.findByUniqueProperties = (propNames, options) => + find((module) => propNames.every((prop) => module[prop] !== undefined), options); + window.findByDisplayName = (displayName, options) => find((module) => module.displayName === displayName, options); + window.req = req; + + init(); + } + }, + (t) => t(632540) +]); + +function retry(callback) { + return new Promise((resolve) => { + const interval = setInterval(() => { + const mod = callback(); + if (!mod) return; + + clearInterval(interval); + resolve(mod); + }, 50); + }); +} + +async function init() { + const SDP = await retry(() => findByUniqueProperties(["truncateSDP"])); + const StringManipulator = findByUniqueProperties(["uniq"]); + + const truncateSDP = SDP.truncateSDP; + SDP.truncateSDP = (e) => { + const result = truncateSDP(e); + const i = result.codecs.find((x) => x.name === "VP8"); + const a = new RegExp("^a=ice|a=extmap|opus|VP8|fingerprint|" + i?.rtxPayloadType + " rtx", "i"); + return { + sdp: StringManipulator(e) + .split(/\r\n/) + .filter(function (e) { + return a.test(e); + }) + .uniq() + .join("\n"), + codecs: result.codecs + }; + }; + // SDP.generateUnifiedSessionDescription = (e) => { + // console.log(e); + // return new RTCSessionDescription({ sdp: e.baseSDP.replace(/sendonly/g, "recvonly"), type: "answer" }); + // }; +} \ No newline at end of file |