File tree 2 files changed +23
-1
lines changed
2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ module Main where
3
3
import Prelude
4
4
5
5
import Bucketchain (createServer , listen )
6
- import Bucketchain.Header.Cookie (addCookie , getCookies )
6
+ import Bucketchain.Header.Cookie (SameSite (..), addCookie , getCookies )
7
7
import Bucketchain.Header.Vary (addVary )
8
8
import Bucketchain.Http (requestMethod , requestURL )
9
9
import Bucketchain.Middleware (Middleware )
@@ -44,6 +44,7 @@ middleware next = do
44
44
, maxAge: Just 60
45
45
, secure: false
46
46
, httpOnly: true
47
+ , sameSite: Just Lax
47
48
}
48
49
pure Nothing
49
50
else next
Original file line number Diff line number Diff line change 1
1
module Bucketchain.Header.Cookie
2
2
( Cookie
3
+ , SameSite (..)
3
4
, addCookie
4
5
, getCookies
5
6
) where
@@ -23,8 +24,21 @@ type Cookie =
23
24
, maxAge :: Maybe Int
24
25
, secure :: Boolean
25
26
, httpOnly :: Boolean
27
+ , sameSite :: Maybe SameSite
26
28
}
27
29
30
+ -- | The SameSite directive.
31
+ data SameSite
32
+ = Strict
33
+ | Lax
34
+
35
+ derive instance eqSameSite :: Eq SameSite
36
+ derive instance ordSameSite :: Ord SameSite
37
+
38
+ instance showSameSite :: Show SameSite where
39
+ show Strict = " Strict"
40
+ show Lax = " Lax"
41
+
28
42
-- | Add a cookie.
29
43
addCookie :: Http -> Cookie -> Effect Unit
30
44
addCookie http pld =
@@ -35,6 +49,7 @@ addCookie http pld =
35
49
toField :: Cookie -> String
36
50
toField pld =
37
51
joinWith " ; "
52
+ <<< setSameSite pld
38
53
<<< setHttpOnly pld
39
54
<<< setSecure pld
40
55
<<< setMaxAge pld
@@ -72,6 +87,12 @@ setHttpOnly pld xs =
72
87
then snoc xs " HttpOnly"
73
88
else xs
74
89
90
+ setSameSite :: Cookie -> Array String -> Array String
91
+ setSameSite pld xs =
92
+ case pld.sameSite of
93
+ Nothing -> xs
94
+ Just s -> snoc xs $ " SameSite=" <> show s
95
+
75
96
-- | Get cookies.
76
97
getCookies :: Http -> Object String
77
98
getCookies http =
You can’t perform that action at this time.
0 commit comments