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…
	
	Add table
		Add a link
		
	
		Reference in a new issue