Permalink
Browse files
Added :session-cookie-attrs response key for wrap-session middleware
- Loading branch information...
|
|
@@ -28,12 +28,12 @@ |
|
|
(wrap-session handler {}))
|
|
|
([handler options]
|
|
|
(let [store (options :store (memory-store))
|
|
|
- cookie (options :cookie-name "ring-session")
|
|
|
+ cookie-name (options :cookie-name "ring-session")
|
|
|
session-root (options :root "/")
|
|
|
cookie-attrs (merge (options :cookie-attrs) {:path session-root})]
|
|
|
(wrap-cookies
|
|
|
(fn [request]
|
|
|
- (let [sess-key (get-in request [:cookies cookie :value])
|
|
|
+ (let [sess-key (get-in request [:cookies cookie-name :value])
|
|
|
session ((store :read) sess-key)
|
|
|
request (assoc request :session session)
|
|
|
response (handler request)
|
|
|
@@ -42,10 +42,10 @@ |
|
|
((store :write) sess-key (response :session))
|
|
|
(if sess-key
|
|
|
((store :delete) sess-key))))
|
|
|
- response (dissoc response :session)]
|
|
|
+ response (dissoc response :session)
|
|
|
+ cookie {cookie-name (merge cookie-attrs
|
|
|
+ (response :session-cookie-attrs)
|
|
|
+ {:value sess-key*})}]
|
|
|
(if (and sess-key* (not= sess-key sess-key*))
|
|
|
- (assoc response
|
|
|
- :cookies (merge (response :cookies)
|
|
|
- {cookie (merge cookie-attrs
|
|
|
- {:value sess-key*})}))
|
|
|
+ (assoc response :cookies (merge (response :cookies) cookie))
|
|
|
response)))))))
|
|
|
@@ -81,3 +81,13 @@ |
|
|
response (handler {:cookies {}})]
|
|
|
(is (= (get-in response [:headers "Set-Cookie"])
|
|
|
["ring-session=foo%3Abar;Path=/foo"]))))
|
|
|
+
|
|
|
+(deftest session-attrs-can-be-set-per-request
|
|
|
+ (let [store {:read (constantly {})
|
|
|
+ :write (constantly "foo:bar")}
|
|
|
+ handler (constantly {:session {:foo "bar"}
|
|
|
+ :session-cookie-attrs {:max-age 5}})
|
|
|
+ handler (wrap-session handler {:store store})
|
|
|
+ response (handler {:cookies {}})]
|
|
|
+ (is (= (get-in response [:headers "Set-Cookie"])
|
|
|
+ ["ring-session=foo%3Abar;Max-Age=5;Path=/"]))))
|
0 comments on commit
013b92a