forked from cadence/breezewiki
Refactor Referrer-Policy header
- Change the variable to always-headers so it can be extended in the future - New function build-headers that assists combining complex logic headers together with less mess - Also apply headers to the proxy
This commit is contained in:
parent
adc4b47b83
commit
5813c49261
7 changed files with 35 additions and 11 deletions
|
@ -9,8 +9,8 @@
|
||||||
"url-utils.rkt")
|
"url-utils.rkt")
|
||||||
|
|
||||||
(provide
|
(provide
|
||||||
; header to not send referers to fandom
|
; headers to always send on all http responses
|
||||||
referrer-policy
|
always-headers
|
||||||
; timeout durations for http-easy requests
|
; timeout durations for http-easy requests
|
||||||
timeouts
|
timeouts
|
||||||
; generates a consistent footer
|
; generates a consistent footer
|
||||||
|
@ -24,7 +24,8 @@
|
||||||
(require rackunit
|
(require rackunit
|
||||||
html-writing))
|
html-writing))
|
||||||
|
|
||||||
(define referrer-policy (header #"Referrer-Policy" #"no-referrer"))
|
(define always-headers
|
||||||
|
(list (header #"Referrer-Policy" #"same-origin"))) ; header to not send referers to fandom
|
||||||
(define timeouts (easy:make-timeout-config #:lease 5 #:connect 5))
|
(define timeouts (easy:make-timeout-config #:lease 5 #:connect 5))
|
||||||
|
|
||||||
(define (application-footer source-url #:license [license-in #f])
|
(define (application-footer source-url #:license [license-in #f])
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
(xexp->html body))
|
(xexp->html body))
|
||||||
(response/output
|
(response/output
|
||||||
#:code 200
|
#:code 200
|
||||||
#:headers (list referrer-policy)
|
#:headers (build-headers always-headers)
|
||||||
(λ (out)
|
(λ (out)
|
||||||
(write-html body out))))))
|
(write-html body out))))))
|
||||||
(module+ test
|
(module+ test
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
html-writing
|
html-writing
|
||||||
web-server/http
|
web-server/http
|
||||||
"application-globals.rkt"
|
"application-globals.rkt"
|
||||||
|
"url-utils.rkt"
|
||||||
"xexpr-utils.rkt"
|
"xexpr-utils.rkt"
|
||||||
"config.rkt")
|
"config.rkt")
|
||||||
|
|
||||||
|
@ -81,6 +82,7 @@
|
||||||
(define (page-home req)
|
(define (page-home req)
|
||||||
(response/output
|
(response/output
|
||||||
#:code 200
|
#:code 200
|
||||||
|
#:headers (build-headers always-headers)
|
||||||
(λ (out)
|
(λ (out)
|
||||||
(write-html body out))))
|
(write-html body out))))
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
net/url
|
net/url
|
||||||
web-server/http
|
web-server/http
|
||||||
(only-in web-server/dispatchers/dispatch next-dispatcher)
|
(only-in web-server/dispatchers/dispatch next-dispatcher)
|
||||||
|
"application-globals.rkt"
|
||||||
"url-utils.rkt"
|
"url-utils.rkt"
|
||||||
"xexpr-utils.rkt")
|
"xexpr-utils.rkt")
|
||||||
|
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
(response/output
|
(response/output
|
||||||
#:code (easy:response-status-code dest-r)
|
#:code (easy:response-status-code dest-r)
|
||||||
#:mime-type (easy:response-headers-ref dest-r 'content-type)
|
#:mime-type (easy:response-headers-ref dest-r 'content-type)
|
||||||
|
#:headers (build-headers always-headers)
|
||||||
(λ (out)
|
(λ (out)
|
||||||
(copy-port (easy:response-output dest-r) out)
|
(copy-port (easy:response-output dest-r) out)
|
||||||
(easy:response-close! dest-r))))))
|
(easy:response-close! dest-r))))))
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
(xexp->html body))
|
(xexp->html body))
|
||||||
(response/output
|
(response/output
|
||||||
#:code 200
|
#:code 200
|
||||||
#:headers (list referrer-policy)
|
#:headers (build-headers always-headers)
|
||||||
(λ (out)
|
(λ (out)
|
||||||
(write-html body out))))))
|
(write-html body out))))))
|
||||||
(module+ test
|
(module+ test
|
||||||
|
|
|
@ -277,11 +277,13 @@
|
||||||
#:body-class body-class
|
#:body-class body-class
|
||||||
#:siteinfo siteinfo))
|
#:siteinfo siteinfo))
|
||||||
(define redirect-msg ((query-selector (attribute-selector 'class "redirectMsg") body)))
|
(define redirect-msg ((query-selector (attribute-selector 'class "redirectMsg") body)))
|
||||||
(define headers (if redirect-msg
|
(define headers
|
||||||
|
(build-headers
|
||||||
|
always-headers
|
||||||
|
(when redirect-msg
|
||||||
(let* ([dest (get-attribute 'href (bits->attributes ((query-selector (λ (t a c) (eq? t 'a)) redirect-msg))))]
|
(let* ([dest (get-attribute 'href (bits->attributes ((query-selector (λ (t a c) (eq? t 'a)) redirect-msg))))]
|
||||||
[value (bytes-append #"0;url=" (string->bytes/utf-8 dest))])
|
[value (bytes-append #"0;url=" (string->bytes/utf-8 dest))])
|
||||||
(list (header #"Refresh" value) referrer-policy))
|
(header #"Refresh" value)))))
|
||||||
(list referrer-policy)))
|
|
||||||
(when (config-true? 'debug)
|
(when (config-true? 'debug)
|
||||||
; used for its side effects
|
; used for its side effects
|
||||||
; convert to string with error checking, error will be raised if xexp is invalid
|
; convert to string with error checking, error will be raised if xexp is invalid
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
(require racket/string
|
(require racket/string
|
||||||
"config.rkt"
|
"config.rkt"
|
||||||
"pure-utils.rkt")
|
"pure-utils.rkt")
|
||||||
|
(require/typed web-server/http/request-structs
|
||||||
|
[#:opaque Header header?])
|
||||||
|
|
||||||
(provide
|
(provide
|
||||||
; regex to match wiki names
|
; regex to match wiki names
|
||||||
|
@ -13,7 +15,9 @@
|
||||||
; check whether a url is on a domain controlled by fandom
|
; check whether a url is on a domain controlled by fandom
|
||||||
is-fandom-url?
|
is-fandom-url?
|
||||||
; prints "out: <url>"
|
; prints "out: <url>"
|
||||||
log-outgoing)
|
log-outgoing
|
||||||
|
; pass in a header, headers, or something useless. they'll all combine into a list
|
||||||
|
build-headers)
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
(require "typed-rackunit.rkt"))
|
(require "typed-rackunit.rkt"))
|
||||||
|
@ -81,3 +85,16 @@
|
||||||
(define (log-outgoing url-string)
|
(define (log-outgoing url-string)
|
||||||
(when (config-true? 'log_outgoing)
|
(when (config-true? 'log_outgoing)
|
||||||
(printf "out: ~a~n" url-string)))
|
(printf "out: ~a~n" url-string)))
|
||||||
|
|
||||||
|
(: build-headers ((U Header (Listof Header) False Void) * -> (Listof Header)))
|
||||||
|
(define (build-headers . fs)
|
||||||
|
(apply
|
||||||
|
append
|
||||||
|
(map (λ ([f : (U Header (Listof Header) False Void)])
|
||||||
|
(cond
|
||||||
|
[(not f) null]
|
||||||
|
[(void? f) null]
|
||||||
|
[(null? f) null]
|
||||||
|
[(header? f) (list f)]
|
||||||
|
[(pair? f) f]))
|
||||||
|
fs)))
|
||||||
|
|
Loading…
Reference in a new issue