action/context: add capability to set response headers
This commit is contained in:
@@ -292,7 +292,14 @@ rules:
|
|||||||
action: context
|
action: context
|
||||||
settings:
|
settings:
|
||||||
context-set:
|
context-set:
|
||||||
|
# Map OpenGraph or similar <meta> tags back to the reply, even if denied/challenged
|
||||||
proxy-meta-tags: "true"
|
proxy-meta-tags: "true"
|
||||||
|
|
||||||
|
# Set additional response headers
|
||||||
|
#response-headers:
|
||||||
|
# X-Clacks-Overhead:
|
||||||
|
# - GNU Terry Pratchett
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- name: plaintext-browser
|
- name: plaintext-browser
|
||||||
|
|||||||
@@ -137,6 +137,19 @@ rules:
|
|||||||
conditions:
|
conditions:
|
||||||
- '!(method == "HEAD" || method == "GET")'
|
- '!(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 <meta> 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
|
- name: plaintext-browser
|
||||||
action: challenge
|
action: challenge
|
||||||
settings:
|
settings:
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ func init() {
|
|||||||
var ContextDefaultSettings = ContextSettings{}
|
var ContextDefaultSettings = ContextSettings{}
|
||||||
|
|
||||||
type ContextSettings struct {
|
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 {
|
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) {
|
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())
|
data := challenge.RequestDataFromContext(r.Context())
|
||||||
for k, v := range a.opts.Settings {
|
for k, v := range a.opts.ContextSet {
|
||||||
data.SetOpt(k, v)
|
data.SetOpt(k, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for k, v := range a.opts.ResponseHeaders {
|
||||||
|
w.Header().Set(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ func (d *RequestData) HasValidChallenge(id Id) bool {
|
|||||||
return d.ChallengeVerify[id].Ok()
|
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())
|
headers.Set("X-Away-Id", d.Id.String())
|
||||||
|
|
||||||
for id, result := range d.ChallengeVerify {
|
for id, result := range d.ChallengeVerify {
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ func (state *State) handleRequest(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
r.URL.RawQuery = q.Encode()
|
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
|
// delete cookies set by go-away to prevent user tracking that way
|
||||||
cookies := r.Cookies()
|
cookies := r.Cookies()
|
||||||
|
|||||||
Reference in New Issue
Block a user