module IHP.Controller.Cookie (setCookie, getCookie, allCookies) where
import IHP.Prelude
import IHP.ControllerSupport
import Web.Cookie
import qualified Data.Binary.Builder as Binary
import qualified Data.ByteString.Lazy as LBS
setCookie :: (?request :: Request) => SetCookie -> IO ()
setCookie :: (?request::Request) => SetCookie -> IO ()
setCookie SetCookie
cookie = (?request::Request) => Header -> IO ()
Header -> IO ()
setHeader (HeaderName
"Set-Cookie", ByteString
cookieString)
where
cookieString :: ByteString
cookieString = SetCookie
cookie
SetCookie -> (SetCookie -> Builder) -> Builder
forall a b. a -> (a -> b) -> b
|> SetCookie -> Builder
renderSetCookie
Builder -> (Builder -> LazyByteString) -> LazyByteString
forall a b. a -> (a -> b) -> b
|> Builder -> LazyByteString
Binary.toLazyByteString
LazyByteString -> (LazyByteString -> ByteString) -> ByteString
forall a b. a -> (a -> b) -> b
|> LazyByteString -> ByteString
LBS.toStrict
getCookie :: (?request :: Request) => Text -> Maybe Text
getCookie :: (?request::Request) => Text -> Maybe Text
getCookie Text
name =
Text -> [(Text, Text)] -> Maybe Text
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Text
name [(Text, Text)]
(?request::Request) => [(Text, Text)]
allCookies
allCookies :: (?request :: Request) => [(Text, Text)]
allCookies :: (?request::Request) => [(Text, Text)]
allCookies =
[(Text, Text)]
-> (ByteString -> [(Text, Text)])
-> Maybe ByteString
-> [(Text, Text)]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ByteString -> [(Text, Text)]
parseCookiesText (Maybe ByteString -> [(Text, Text)])
-> Maybe ByteString -> [(Text, Text)]
forall a b. (a -> b) -> a -> b
$ HeaderName -> [Header] -> Maybe ByteString
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup HeaderName
"Cookie" Request
(?request::Request) => Request
request.requestHeaders