瀏覽代碼

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
Piper McCorkle 1 年之前
父節點
當前提交
ee926e73cb
共有 1 個文件被更改,包括 8 次插入0 次删除
  1. 8 0
      internal/ui/static_javascript.go

+ 8 - 0
internal/ui/static_javascript.go

@@ -6,6 +6,7 @@ package ui // import "miniflux.app/v2/internal/ui"
 import (
 import (
 	"fmt"
 	"fmt"
 	"net/http"
 	"net/http"
+	"strings"
 	"time"
 	"time"
 
 
 	"miniflux.app/v2/internal/http/request"
 	"miniflux.app/v2/internal/http/request"
@@ -15,6 +16,9 @@ import (
 	"miniflux.app/v2/internal/ui/static"
 	"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) {
 func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) {
 	filename := request.RouteStringParam(r, "name")
 	filename := request.RouteStringParam(r, "name")
 	etag, found := static.JavascriptBundleChecksums[filename]
 	etag, found := static.JavascriptBundleChecksums[filename]
@@ -31,6 +35,10 @@ func (h *handler) showJavascript(w http.ResponseWriter, r *http.Request) {
 			contents = append([]byte(variables), contents...)
 			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.WithHeader("Content-Type", "text/javascript; charset=utf-8")
 		b.WithBody(contents)
 		b.WithBody(contents)
 		b.Write()
 		b.Write()