-
Notifications
You must be signed in to change notification settings - Fork 12
/
request.clj
27 lines (26 loc) · 1.41 KB
/
request.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(ns ring.adapter.undertow.request
(:require
[ring.adapter.undertow.headers :refer [get-headers]])
(:import
[io.undertow.server HttpServerExchange]
[io.undertow.util Headers]))
(defn build-exchange-map
[^HttpServerExchange exchange]
(let [headers (.getRequestHeaders exchange)
ctype (.getFirst headers Headers/CONTENT_TYPE)]
{:server-exchange exchange
:server-port (-> exchange .getDestinationAddress .getPort)
:server-name (-> exchange .getHostName)
:remote-addr (-> exchange .getSourceAddress .getAddress .getHostAddress)
:uri (-> exchange .getRequestURI)
:query-string (let [qs (.getQueryString exchange)] (if-not (.equals "" qs) qs))
:scheme (-> exchange .getRequestScheme .toString .toLowerCase keyword)
:request-method (-> exchange .getRequestMethod .toString .toLowerCase keyword)
:protocol (-> exchange .getProtocol .toString)
:headers (get-headers headers)
:content-type ctype
:content-length (-> exchange .getRequestContentLength)
:character-encoding (or (when ctype (Headers/extractQuotedValueFromHeader ctype "charset")) "ISO-8859-1")
:body (when (.isBlocking exchange) (.getInputStream exchange))
:context (.getResolvedPath exchange)
:websocket? (= "websocket" (.getFirst headers Headers/UPGRADE))}))