module Network.Salvia.Handlers.Cookie ( hSetCookies , hGetCookies , newCookie ) where import Control.Applicative hiding (empty) import Control.Monad.State import Data.Time.Format import Data.Time.LocalTime import System.Locale (defaultTimeLocale) import Network.Salvia.Httpd import Network.Protocol.Cookie import Network.Protocol.Http (getCookie, setCookie) hSetCookies :: Cookies -> Handler () hSetCookies = modResponse . setCookie . showCookies hGetCookies :: Handler (Maybe Cookies) hGetCookies = parseCookies <$> getCookie <$> gets request -- Convenient method for creating cookies that expire in the near future and -- are bound to the domain and port this server runs on. The path will be -- locked to root. newCookie :: LocalTime -> Handler Cookie newCookie expire = do httpd <- gets config return $ empty { path = Just "/" -- , domain = Just $ '.' : hostname httpd , port = [fromEnum $ listenPort httpd] , expires = Just $ formatTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S %Z" expire }