File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22 " Middleware for handling headers set by HTTP proxies."
33 (:require [clojure.string :as str]))
44
5+ (defn forwarded-remote-addr-request
6+ " Change the :remote-addr key of the request map to the last value present in
7+ the X-Forwarded-For header. See: wrap-forwarded-remote-addr."
8+ [request]
9+ (if-let [forwarded-for (get-in request [:headers " x-forwarded-for" ])]
10+ (let [remote-addr (str/trim (re-find #"[^,]*$" forwarded-for))]
11+ (assoc request :remote-addr remote-addr))
12+ request))
13+
514(defn wrap-forwarded-remote-addr
615 " Middleware that changes the :remote-addr of the request map to the
716 last value present in the X-Forwarded-For header."
817 [handler]
9- (fn [request]
10- (if-let [forwarded-for ( get-in request [ :headers " x-forwarded-for " ]) ]
11- ( let [ remote-addr ( str/trim ( re-find #"[^,]*$" forwarded-for))]
12- ( handler ( assoc request :remote-addr remote-addr)))
13- (handler request))))
18+ (fn
19+ ([ request]
20+ ( handler ( forwarded- remote-addr-request request)))
21+ ([ request respond raise]
22+ (handler ( forwarded-remote-addr- request request) respond raise ))))
Original file line number Diff line number Diff line change 2424 (header " x-forwarded-for" " 10.0.1.9, 192.168.4.98, 1.2.3.4" ))
2525 resp (handler req)]
2626 (is (= (:body resp) " 1.2.3.4" ))))))
27+
28+ (deftest test-wrap-forwarded-remote-addr-cps
29+ (let [handler (wrap-forwarded-remote-addr
30+ (fn [request respond _] (respond (response (:remote-addr request)))))]
31+ (testing " without x-forwarded-for"
32+ (let [req (assoc (request :get " /" ) :remote-addr " 1.2.3.4" )
33+ resp (promise )
34+ ex (promise )]
35+ (handler req resp ex)
36+ (is (not (realized? ex)))
37+ (is (= (:body @resp) " 1.2.3.4" ))))
38+
39+ (testing " with x-forwarded-for"
40+ (let [req (-> (request :get " /" )
41+ (assoc :remote-addr " 127.0.0.1" )
42+ (header " x-forwarded-for" " 1.2.3.4" ))
43+ resp (promise )
44+ ex (promise )]
45+ (handler req resp ex)
46+ (is (not (realized? ex)))
47+ (is (= (:body @resp) " 1.2.3.4" ))))))
You can’t perform that action at this time.
0 commit comments