This repository has been archived by the owner on Mar 22, 2023. It is now read-only.
forked from mpenet/jet
/
cookies.clj
73 lines (66 loc) · 2.26 KB
/
cookies.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
(ns qbits.jet.client.cookies
(:require [clojure.string :as str])
(:import
(java.net URI)
(java.net HttpCookie CookieStore)))
(defn ^:no-doc decode-cookie
[^HttpCookie cookie]
(->> {:name (.getName cookie)
:comment (.getComment cookie)
:comment-url (.getCommentURL cookie)
:discard (not (.getDiscard cookie))
:domain (.getDomain cookie)
:max-age (.getMaxAge cookie)
:path (.getPath cookie)
:ports (seq (.getPortlist cookie))
:secure (.getSecure cookie)
:value (.getValue cookie)
:version (.getVersion cookie)}
(reduce-kv (fn [m k v]
(if (nil? v)
m
(assoc m k v)))
{})))
(defn ^:no-doc ^HttpCookie encode-cookie
[{:keys [name domain value path max-age
comment comment-url version
secure? http-only? discard?
ports]
:or {version 0
http-only? false
discard? true
secure? false}}]
(let [cookie (HttpCookie. name value)]
(.setDomain cookie domain)
(.setComment cookie comment)
(.setCommentURL cookie comment-url)
(.setMaxAge cookie max-age)
(.setPath cookie path)
(.setHttpOnly cookie http-only?)
(.setDiscard cookie discard?)
(.setVersion cookie version)
(.setSecure cookie secure?)
(when ports
(.setPortlist cookie (str/join "," ports)))
cookie))
(defn get-cookies
"Returns a sequence of all cookies form the store, or per URI"
([^CookieStore cookie-store uri]
(map decode-cookie (.get cookie-store (URI. uri))))
([^CookieStore cookie-store]
(map decode-cookie (.getCookies cookie-store))))
(defn add-cookies!
"Adds cookies for a destination URI to the cookie store"
[^CookieStore cookie-store uri cookies]
(let [uri (URI. uri)]
(doseq [cookie cookies]
(.add cookie-store uri (encode-cookie cookie)))
cookie-store))
(defn add-cookie!
"Adds a single cookie for a destination URI to the cookie store"
[^CookieStore cookie-store uri cookie]
(add-cookies! cookie-store uri [cookie]))
;; (-> (cookie-store)
;; (add-cookie! "http://foo.com"
;; {:name "foobar" :domain "foo" :value "111" :max-age 10000 :path "/"
;; :comment "asdf" }))