firefox: Fix csp (QuickCss, themes, some plugins) (#554)
This commit is contained in:
parent
76e74b3e40
commit
5305447f44
6 changed files with 79 additions and 6 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
@ -42,7 +42,7 @@ jobs:
|
||||||
|
|
||||||
- name: Clean up obsolete files
|
- name: Clean up obsolete files
|
||||||
run: |
|
run: |
|
||||||
rm -rf dist/extension-unpacked Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map
|
rm -rf dist/*-unpacked Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map
|
||||||
|
|
||||||
- name: Get some values needed for the release
|
- name: Get some values needed for the release
|
||||||
id: release_values
|
id: release_values
|
||||||
|
|
5
.github/workflows/publish.yml
vendored
5
.github/workflows/publish.yml
vendored
|
@ -35,15 +35,15 @@ jobs:
|
||||||
|
|
||||||
- name: Publish extension
|
- name: Publish extension
|
||||||
run: |
|
run: |
|
||||||
cd dist/extension-unpacked
|
|
||||||
|
|
||||||
# Do not fail so that even if chrome fails, firefox gets a shot. But also store exit code to fail workflow later
|
# Do not fail so that even if chrome fails, firefox gets a shot. But also store exit code to fail workflow later
|
||||||
EXIT_CODE=0
|
EXIT_CODE=0
|
||||||
|
|
||||||
# Chrome
|
# Chrome
|
||||||
|
cd dist/chromium-unpacked
|
||||||
pnpx chrome-webstore-upload-cli@2.1.0 upload --auto-publish || EXIT_CODE=$?
|
pnpx chrome-webstore-upload-cli@2.1.0 upload --auto-publish || EXIT_CODE=$?
|
||||||
|
|
||||||
# Firefox
|
# Firefox
|
||||||
|
cd ../chromium-unpacked
|
||||||
npm i -g web-ext@7.4.0 web-ext-submit@7.4.0
|
npm i -g web-ext@7.4.0 web-ext-submit@7.4.0
|
||||||
web-ext-submit || EXIT_CODE=$?
|
web-ext-submit || EXIT_CODE=$?
|
||||||
|
|
||||||
|
@ -58,4 +58,3 @@ jobs:
|
||||||
# Firefox
|
# Firefox
|
||||||
WEB_EXT_API_KEY: ${{ secrets.WEBEXT_USER }}
|
WEB_EXT_API_KEY: ${{ secrets.WEBEXT_USER }}
|
||||||
WEB_EXT_API_SECRET: ${{ secrets.WEBEXT_SECRET }}
|
WEB_EXT_API_SECRET: ${{ secrets.WEBEXT_SECRET }}
|
||||||
|
|
||||||
|
|
32
browser/background.js
Normal file
32
browser/background.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* @template T
|
||||||
|
* @param {T[]} arr
|
||||||
|
* @param {(v: T) => boolean} predicate
|
||||||
|
*/
|
||||||
|
function removeFirst(arr, predicate) {
|
||||||
|
const idx = arr.findIndex(predicate);
|
||||||
|
if (idx !== -1) arr.splice(idx, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
chrome.webRequest.onHeadersReceived.addListener(
|
||||||
|
({ responseHeaders, type, url }) => {
|
||||||
|
if (!responseHeaders) return;
|
||||||
|
|
||||||
|
if (type === "main_frame") {
|
||||||
|
// In main frame requests, the CSP needs to be removed to enable fetching of custom css
|
||||||
|
// as desired by the user
|
||||||
|
removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-security-policy");
|
||||||
|
} else if (type === "stylesheet" && url.startsWith("https://raw.githubusercontent.com")) {
|
||||||
|
// Most users will load css from GitHub, but GitHub doesn't set the correct content type,
|
||||||
|
// so we fix it here
|
||||||
|
removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-type");
|
||||||
|
responseHeaders.push({
|
||||||
|
name: "Content-Type",
|
||||||
|
value: "text/css"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return { responseHeaders };
|
||||||
|
},
|
||||||
|
{ urls: ["https://raw.githubusercontent.com/*", "*://*.discord.com/*"], types: ["main_frame", "stylesheet"] },
|
||||||
|
["blocking", "responseHeaders"]
|
||||||
|
);
|
41
browser/manifestv2.json
Normal file
41
browser/manifestv2.json
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"minimum_chrome_version": "91",
|
||||||
|
|
||||||
|
"name": "Vencord Web",
|
||||||
|
"description": "The cutest Discord mod now in your browser",
|
||||||
|
"author": "Vendicated",
|
||||||
|
"homepage_url": "https://github.com/Vendicated/Vencord",
|
||||||
|
"icons": {
|
||||||
|
"128": "icon.png"
|
||||||
|
},
|
||||||
|
|
||||||
|
"permissions": [
|
||||||
|
"webRequest",
|
||||||
|
"webRequestBlocking",
|
||||||
|
"*://*.discord.com/*",
|
||||||
|
"https://raw.githubusercontent.com/*"
|
||||||
|
],
|
||||||
|
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"run_at": "document_start",
|
||||||
|
"matches": ["*://*.discord.com/*"],
|
||||||
|
"js": ["content.js"],
|
||||||
|
"all_frames": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"background": {
|
||||||
|
"scripts": ["background.js"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"web_accessible_resources": ["dist/Vencord.js", "dist/Vencord.css"],
|
||||||
|
|
||||||
|
"browser_specific_settings": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "vencord-firefox@vendicated.dev",
|
||||||
|
"strict_min_version": "91.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "vencord",
|
"name": "vencord",
|
||||||
"private": "true",
|
"private": "true",
|
||||||
"version": "1.1.7",
|
"version": "1.1.8",
|
||||||
"description": "The cutest Discord client mod",
|
"description": "The cutest Discord client mod",
|
||||||
"homepage": "https://github.com/Vendicated/Vencord#readme",
|
"homepage": "https://github.com/Vendicated/Vencord#readme",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
|
|
|
@ -142,6 +142,7 @@ const appendCssRuntime = readFile("dist/Vencord.user.css", "utf-8").then(content
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
appendCssRuntime,
|
appendCssRuntime,
|
||||||
buildPluginZip("extension.zip", ["modifyResponseHeaders.json", "content.js", "manifest.json", "icon.png"], true),
|
buildPluginZip("extension.zip", ["modifyResponseHeaders.json", "content.js", "manifest.json", "icon.png"], true),
|
||||||
buildPluginZip("extension-unpacked", ["modifyResponseHeaders.json", "content.js", "manifest.json", "icon.png"], false),
|
buildPluginZip("chromium-unpacked", ["modifyResponseHeaders.json", "content.js", "manifest.json", "icon.png"], false),
|
||||||
|
buildPluginZip("firefox-unpacked", ["background.js", "content.js", "manifestv2.json", "icon.png"], false),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue