mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
Fully remove CSP as opposed to setting custom policies (#293)
* Just remove CSP instead of trying to work with it * Simplify CSP removal further
This commit is contained in:
parent
b449fdeb94
commit
5610f372bf
1 changed files with 3 additions and 46 deletions
|
@ -1,55 +1,12 @@
|
||||||
import electron from "electron";
|
import electron from "electron";
|
||||||
import {getConfig} from "../utils";
|
import {getConfig} from "../utils";
|
||||||
|
|
||||||
interface PolicyResult {
|
const unstrictCSP = () => {
|
||||||
[key: string]: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
const parsePolicy = (policy: string): PolicyResult => {
|
|
||||||
const result: PolicyResult = {};
|
|
||||||
policy.split(";").forEach((directive) => {
|
|
||||||
const [directiveKey, ...directiveValue] = directive.trim().split(/\s+/g);
|
|
||||||
if (directiveKey && !Object.prototype.hasOwnProperty.call(result, directiveKey)) {
|
|
||||||
result[directiveKey] = directiveValue;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
const stringifyPolicy = (policy: PolicyResult): string =>
|
|
||||||
Object.entries(policy)
|
|
||||||
.filter(([, values]) => values?.length)
|
|
||||||
.map((directive) => directive.flat().join(" "))
|
|
||||||
.join("; ");
|
|
||||||
|
|
||||||
const unstrictCSP = async () => {
|
|
||||||
console.log("Setting up CSP unstricter...");
|
console.log("Setting up CSP unstricter...");
|
||||||
|
|
||||||
const cspAllowAll = ["style-src", "connect-src", "img-src", "font-src", "media-src", "worker-src"];
|
|
||||||
|
|
||||||
const isVencord = await getConfig("mods").then((s) => s.includes("vencord"));
|
|
||||||
electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders}, done) => {
|
electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders}, done) => {
|
||||||
let cspHeaders = responseHeaders!["content-security-policy"];
|
delete responseHeaders!["content-security-policy"];
|
||||||
|
done({ responseHeaders });
|
||||||
if (cspHeaders) {
|
|
||||||
const csp = parsePolicy(cspHeaders[0]);
|
|
||||||
|
|
||||||
for (const directive of cspAllowAll) {
|
|
||||||
csp[directive] = ["*", "blob:", "data:", "'unsafe-inline'"];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isVencord) {
|
|
||||||
// unpkg and cdnjs are used for QuickCss and some plugins' dependencies (e.g. GifEncoder & APNG for FakeNitro)
|
|
||||||
csp["script-src"] ??= [];
|
|
||||||
csp["script-src"].push("'unsafe-eval'", "https://unpkg.com", "https://cdnjs.cloudflare.com");
|
|
||||||
}
|
|
||||||
// Fix Discord's broken CSP which disallows unsafe-inline due to having a nonce (which they don't even use?)
|
|
||||||
csp["script-src"] = csp["script-src"]?.filter((value) => !value.includes("nonce-"));
|
|
||||||
|
|
||||||
cspHeaders[0] = stringifyPolicy(csp);
|
|
||||||
}
|
|
||||||
|
|
||||||
done({responseHeaders});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue