diff --git a/examples/forgejo.yml b/examples/forgejo.yml index 3e430c6..db2fdc0 100644 --- a/examples/forgejo.yml +++ b/examples/forgejo.yml @@ -292,7 +292,14 @@ rules: action: context settings: context-set: + # Map OpenGraph or similar tags back to the reply, even if denied/challenged proxy-meta-tags: "true" + + # Set additional response headers + #response-headers: + # X-Clacks-Overhead: + # - GNU Terry Pratchett + - name: plaintext-browser diff --git a/examples/generic.yml b/examples/generic.yml index b800f10..de84b6d 100644 --- a/examples/generic.yml +++ b/examples/generic.yml @@ -137,6 +137,19 @@ rules: conditions: - '!(method == "HEAD" || method == "GET")' + # Enable fetching OpenGraph and other tags from backend on these paths + - name: enable-meta-tags + action: context + settings: + context-set: + # Map OpenGraph or similar tags back to the reply, even if denied/challenged + proxy-meta-tags: "true" + + # Set additional response headers + #response-headers: + # X-Clacks-Overhead: + # - GNU Terry Pratchett + - name: plaintext-browser action: challenge settings: diff --git a/lib/action/context.go b/lib/action/context.go index 544496b..be3c4d9 100644 --- a/lib/action/context.go +++ b/lib/action/context.go @@ -33,7 +33,8 @@ func init() { var ContextDefaultSettings = ContextSettings{} type ContextSettings struct { - Settings map[string]string `yaml:"context-set"` + ContextSet map[string]string `yaml:"context-set"` + ResponseHeaders map[string]string `yaml:"response-headers"` } type Context struct { @@ -42,9 +43,13 @@ type Context struct { func (a Context) Handle(logger *slog.Logger, w http.ResponseWriter, r *http.Request, done func() (backend http.Handler)) (next bool, err error) { data := challenge.RequestDataFromContext(r.Context()) - for k, v := range a.opts.Settings { + for k, v := range a.opts.ContextSet { data.SetOpt(k, v) } + for k, v := range a.opts.ResponseHeaders { + w.Header().Set(k, v) + } + return true, nil } diff --git a/lib/challenge/data.go b/lib/challenge/data.go index 82749a8..0174616 100644 --- a/lib/challenge/data.go +++ b/lib/challenge/data.go @@ -243,7 +243,7 @@ func (d *RequestData) HasValidChallenge(id Id) bool { return d.ChallengeVerify[id].Ok() } -func (d *RequestData) Headers(headers http.Header) { +func (d *RequestData) RequestHeaders(headers http.Header) { headers.Set("X-Away-Id", d.Id.String()) for id, result := range d.ChallengeVerify { diff --git a/lib/http.go b/lib/http.go index 9bfaff4..7d733a3 100644 --- a/lib/http.go +++ b/lib/http.go @@ -174,7 +174,7 @@ func (state *State) handleRequest(w http.ResponseWriter, r *http.Request) { } r.URL.RawQuery = q.Encode() - data.Headers(r.Header) + data.RequestHeaders(r.Header) // delete cookies set by go-away to prevent user tracking that way cookies := r.Cookies()