about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bskyweb/cmd/bskyweb/filters.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/bskyweb/cmd/bskyweb/filters.go b/bskyweb/cmd/bskyweb/filters.go
new file mode 100644
index 000000000..0b882780b
--- /dev/null
+++ b/bskyweb/cmd/bskyweb/filters.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"net/url"
+
+	"github.com/flosch/pongo2/v6"
+)
+
+func init() {
+	pongo2.RegisterFilter("canonical", filterCanonical)
+}
+
+func filterCanonical(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
+	urlStr := in.String()
+
+	parsedURL, err := url.Parse(urlStr)
+	if err != nil {
+		// If parsing fails, return the original URL
+		return in, nil
+	}
+
+	// Remove query parameters and fragment
+	parsedURL.RawQuery = ""
+	parsedURL.Fragment = ""
+
+	// Return the cleaned URL
+	return pongo2.AsValue(parsedURL.String()), nil
+}