From ee926e73cbb7e043ddd63b8c2e6316a06f2a0ee9 Mon Sep 17 00:00:00 2001 From: Piper McCorkle Date: Sun, 11 Aug 2024 16:13:15 -0500 Subject: [PATCH] feat: add license info to js, for LibreJS compatibility [LibreJS][0] is a browser extension developed by GNU which ensures only Free (libre) JavaScript is run. To determine whether given JavaScript is Free, LibreJS consults metadata included in the JavaScript file. Since Miniflux is Free Software, getting its JavaScript to work when LibreJS is installed is just a matter of adding license metadata to the returned JavaScript source. [0]: https://www.gnu.org/software/librejs/index.html --- internal/ui/static_javascript.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/ui/static_javascript.go b/internal/ui/static_javascript.go index f2fb89fc..36061ce9 100644 --- a/internal/ui/static_javascript.go +++ b/internal/ui/static_javascript.go @@ -6,6 +6,7 @@ package ui // import "miniflux.app/v2/internal/ui" import ( "fmt" "net/http" + "strings" "time" "miniflux.app/v2/internal/http/request" @@ -15,6 +16,9 @@ import ( "miniflux.app/v2/internal/ui/static" ) +const licensePrefix = "//@license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt Apache-2.0\n" +const licenseSuffix = "\n//@license-end" + func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) { filename := request.RouteStringParam(r, "name") etag, found := static.JavascriptBundleChecksums[filename] @@ -31,6 +35,10 @@ func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) { contents = append([]byte(variables), contents...) } + // cloning the prefix since `append` mutates its first argument + contents = append([]byte(strings.Clone(licensePrefix)), contents...) + contents = append(contents, []byte(licenseSuffix)...) + b.WithHeader("Content-Type", "text/javascript; charset=utf-8") b.WithBody(contents) b.Write()