forked from cadence/breezewiki
		
	Set Referrer-Policy to no-referrer
Fandom sends a fake 404 to media if there's a Referer header that has an origin that's not Fandom. However, we can choose not to send the header by setting Referrer-Policy. See also: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
This commit is contained in:
		
							parent
							
								
									ade7878f7b
								
							
						
					
					
						commit
						adc4b47b83
					
				
					 4 changed files with 22 additions and 13 deletions
				
			
		| 
						 | 
					@ -9,6 +9,8 @@
 | 
				
			||||||
         "url-utils.rkt")
 | 
					         "url-utils.rkt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(provide
 | 
					(provide
 | 
				
			||||||
 | 
					 ; header to not send referers to fandom
 | 
				
			||||||
 | 
					 referrer-policy
 | 
				
			||||||
 ; timeout durations for http-easy requests
 | 
					 ; timeout durations for http-easy requests
 | 
				
			||||||
 timeouts
 | 
					 timeouts
 | 
				
			||||||
 ; generates a consistent footer
 | 
					 ; generates a consistent footer
 | 
				
			||||||
| 
						 | 
					@ -22,6 +24,7 @@
 | 
				
			||||||
  (require rackunit
 | 
					  (require rackunit
 | 
				
			||||||
           html-writing))
 | 
					           html-writing))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define referrer-policy (header #"Referrer-Policy" #"no-referrer"))
 | 
				
			||||||
(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,6 +113,7 @@
 | 
				
			||||||
      (xexp->html body))
 | 
					      (xexp->html body))
 | 
				
			||||||
    (response/output
 | 
					    (response/output
 | 
				
			||||||
     #:code 200
 | 
					     #:code 200
 | 
				
			||||||
 | 
					     #:headers (list referrer-policy)
 | 
				
			||||||
     (λ (out)
 | 
					     (λ (out)
 | 
				
			||||||
       (write-html body out))))))
 | 
					       (write-html body out))))))
 | 
				
			||||||
(module+ test
 | 
					(module+ test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,6 +81,7 @@
 | 
				
			||||||
      (xexp->html body))
 | 
					      (xexp->html body))
 | 
				
			||||||
    (response/output
 | 
					    (response/output
 | 
				
			||||||
     #:code 200
 | 
					     #:code 200
 | 
				
			||||||
 | 
					     #:headers (list referrer-policy)
 | 
				
			||||||
     (λ (out)
 | 
					     (λ (out)
 | 
				
			||||||
       (write-html body out))))))
 | 
					       (write-html body out))))))
 | 
				
			||||||
(module+ test
 | 
					(module+ test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -152,15 +152,17 @@
 | 
				
			||||||
                       (λ (v) (dict-update v 'rel (λ (s)
 | 
					                       (λ (v) (dict-update v 'rel (λ (s)
 | 
				
			||||||
                                                    (list (string-append (car s) " noreferrer")))
 | 
					                                                    (list (string-append (car s) " noreferrer")))
 | 
				
			||||||
                                           '(""))))
 | 
					                                           '(""))))
 | 
				
			||||||
                ; proxy images from inline styles
 | 
					                ; proxy images from inline styles, if strict_proxy is set
 | 
				
			||||||
                (curry attribute-maybe-update 'style
 | 
					                (curry u
 | 
				
			||||||
 | 
					                       (λ (v) (config-true? 'strict_proxy))
 | 
				
			||||||
 | 
					                       (λ (v) (attribute-maybe-update 'style
 | 
				
			||||||
                         (λ (style)
 | 
					                         (λ (style)
 | 
				
			||||||
                           (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style
 | 
					                           (regexp-replace #rx"url\\(['\"]?(.*?)['\"]?\\)" style
 | 
				
			||||||
                                           (λ (whole url)
 | 
					                                           (λ (whole url)
 | 
				
			||||||
                                             (string-append
 | 
					                                             (string-append
 | 
				
			||||||
                                              "url("
 | 
					                                              "url("
 | 
				
			||||||
                                              (u-proxy-url url)
 | 
					                                              (u-proxy-url url)
 | 
				
			||||||
                                            ")")))))
 | 
					                                              ")")))) v)))
 | 
				
			||||||
                ; and also their links, if strict_proxy is set
 | 
					                ; and also their links, if strict_proxy is set
 | 
				
			||||||
                (curry u
 | 
					                (curry u
 | 
				
			||||||
                       (λ (v)
 | 
					                       (λ (v)
 | 
				
			||||||
| 
						 | 
					@ -168,8 +170,10 @@
 | 
				
			||||||
                              (eq? element-type 'a)
 | 
					                              (eq? element-type 'a)
 | 
				
			||||||
                              (has-class? "image-thumbnail" v)))
 | 
					                              (has-class? "image-thumbnail" v)))
 | 
				
			||||||
                       (λ (v) (attribute-maybe-update 'href u-proxy-url v)))
 | 
					                       (λ (v) (attribute-maybe-update 'href u-proxy-url v)))
 | 
				
			||||||
                ; proxy images from src attributes
 | 
					                ; proxy images from src attributes, if strict_proxy is set
 | 
				
			||||||
                (curry attribute-maybe-update 'src u-proxy-url)
 | 
					                (curry u
 | 
				
			||||||
 | 
					                       (λ (v) (config-true? 'strict_proxy))
 | 
				
			||||||
 | 
					                       (λ (v) (attribute-maybe-update 'src u-proxy-url v)))
 | 
				
			||||||
                ; don't lazyload images
 | 
					                ; don't lazyload images
 | 
				
			||||||
                (curry u
 | 
					                (curry u
 | 
				
			||||||
                       (λ (v) (dict-has-key? v 'data-src))
 | 
					                       (λ (v) (dict-has-key? v 'data-src))
 | 
				
			||||||
| 
						 | 
					@ -276,8 +280,8 @@
 | 
				
			||||||
             (define headers (if redirect-msg
 | 
					             (define headers (if 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)))
 | 
					                                   (list (header #"Refresh" value) referrer-policy))
 | 
				
			||||||
                                 (list)))
 | 
					                                 (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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue