breezewiki/src/page-proxy.rkt

36 lines
1.2 KiB
Racket
Raw Normal View History

#lang racket/base
(require racket/dict
racket/match
racket/port
; libs
(prefix-in easy: net/http-easy)
; web server libs
net/url
web-server/http
(only-in web-server/dispatchers/dispatch next-dispatcher)
"application-globals.rkt"
"../lib/url-utils.rkt"
"../lib/xexpr-utils.rkt")
(provide
page-proxy)
(define (page-proxy req)
(match (dict-ref (url-query (request-uri req)) 'dest #f)
[(? string? dest)
(if (is-fandom-url? dest)
2022-10-04 08:00:33 +00:00
(response-handler ; catches and reports errors
(let ([dest-r (easy:get dest #:stream? #t)])
2022-10-04 08:00:33 +00:00
(with-handlers ([exn:fail? (λ (e) ; cleans up and re-throws
(easy:response-close! dest-r)
(raise e))])
(response/output
#:code (easy:response-status-code dest-r)
#:mime-type (easy:response-headers-ref dest-r 'content-type)
#:headers (build-headers always-headers)
2022-10-04 08:00:33 +00:00
(λ (out)
(copy-port (easy:response-output dest-r) out)
(easy:response-close! dest-r))))))
(next-dispatcher))]
[#f (next-dispatcher)]))