File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2020 (handler (forwarded-remote-addr-request request)))
2121 ([request respond raise]
2222 (handler (forwarded-remote-addr-request request) respond raise))))
23+
24+ ; ; x-forwarded-proto header support
25+ (def ^:private proto-lookup
26+ {" http" :http
27+ " https" :https
28+ " ws" :ws
29+ " wss" :wss })
30+
31+ (defn forwarded-scheme-request
32+ " Change the :scheme key of the request map to the last value present in
33+ the X-Forwarded-Proto header. See: wrap-forwarded-scheme."
34+ [request]
35+ (if-let [forwarded-proto (get-in request [:headers " x-forwarded-proto" ])]
36+ (if-let [scheme (proto-lookup (str/lower-case (str/trim forwarded-proto)))]
37+ (assoc request :scheme scheme)
38+ request)
39+ request))
40+
41+ (defn wrap-forwarded-scheme
42+ " Middleware that changes the :scheme of the request map to the
43+ last value present in the X-Forwarded-Proto header."
44+ [handler]
45+ (fn
46+ ([request]
47+ (handler (forwarded-scheme-request request)))
48+ ([request respond raise]
49+ (handler (forwarded-scheme-request request) respond raise))))
Original file line number Diff line number Diff line change 4545 (handler req resp ex)
4646 (is (not (realized? ex)))
4747 (is (= (:body @resp) " 1.2.3.4" ))))))
48+
49+
50+ (deftest test-wrap-forwarded-proto
51+ (let [handler (wrap-forwarded-scheme (comp response :scheme ))]
52+ (testing " without x-forwarded-proto"
53+ (let [req (request :get " /" )
54+ resp (handler req)]
55+ (is (= (:body resp) :http ))))
56+
57+ (testing " with x-forwarded-proto"
58+ (let [req (-> (request :get " /" )
59+ (header " x-forwarded-proto" " https" ))
60+ resp (handler req)]
61+ (is (= (:body resp) :https ))))
62+
63+ (testing " unknown schemes are ignored"
64+ (let [req (-> (request :get " /" )
65+ (header " x-forwarded-proto" " ftp" ))
66+ resp (handler req)]
67+ (is (= (:body resp) :http ))))))
You can’t perform that action at this time.
0 commit comments