breezewiki/src/page-proxy.rkt
Cadence Ember c7cce5479d
Create archiver and offline code handlers
Somewhat messy. Will clean up gradually in future commits.
2023-02-06 23:56:03 +13:00

35 lines
1.2 KiB
Racket

#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)
(response-handler ; catches and reports errors
(let ([dest-r (easy:get dest #:stream? #t)])
(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)
(λ (out)
(copy-port (easy:response-output dest-r) out)
(easy:response-close! dest-r))))))
(next-dispatcher))]
[#f (next-dispatcher)]))