Skip to content

Commit 3e6dafc

Browse files
committed
Add same site directive
1 parent 7e51a37 commit 3e6dafc

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

example/Main.purs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module Main where
33
import Prelude
44

55
import Bucketchain (createServer, listen)
6-
import Bucketchain.Header.Cookie (addCookie, getCookies)
6+
import Bucketchain.Header.Cookie (SameSite(..), addCookie, getCookies)
77
import Bucketchain.Header.Vary (addVary)
88
import Bucketchain.Http (requestMethod, requestURL)
99
import Bucketchain.Middleware (Middleware)
@@ -44,6 +44,7 @@ middleware next = do
4444
, maxAge: Just 60
4545
, secure: false
4646
, httpOnly: true
47+
, sameSite: Just Lax
4748
}
4849
pure Nothing
4950
else next

src/Bucketchain/Header/Cookie.purs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module Bucketchain.Header.Cookie
22
( Cookie
3+
, SameSite(..)
34
, addCookie
45
, getCookies
56
) where
@@ -23,8 +24,21 @@ type Cookie =
2324
, maxAge :: Maybe Int
2425
, secure :: Boolean
2526
, httpOnly :: Boolean
27+
, sameSite :: Maybe SameSite
2628
}
2729

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+
2842
-- | Add a cookie.
2943
addCookie :: Http -> Cookie -> Effect Unit
3044
addCookie http pld =
@@ -35,6 +49,7 @@ addCookie http pld =
3549
toField :: Cookie -> String
3650
toField pld =
3751
joinWith "; "
52+
<<< setSameSite pld
3853
<<< setHttpOnly pld
3954
<<< setSecure pld
4055
<<< setMaxAge pld
@@ -72,6 +87,12 @@ setHttpOnly pld xs =
7287
then snoc xs "HttpOnly"
7388
else xs
7489

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+
7596
-- | Get cookies.
7697
getCookies :: Http -> Object String
7798
getCookies http =

0 commit comments

Comments
 (0)