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()