packages feed

cookie 0.3.0.2 → 0.4.0

raw patch · 2 files changed

+59/−7 lines, 2 filesdep +data-defaultPVP ok

version bump matches the API change (PVP)

Dependencies added: data-default

API changes (from Hackage documentation)

- Web.Cookie: SetCookie :: ByteString -> ByteString -> Maybe ByteString -> Maybe UTCTime -> Maybe ByteString -> Bool -> SetCookie
- Web.Cookie: instance Read SetCookie
+ Web.Cookie: def :: Default a => a
+ Web.Cookie: instance Default SetCookie
+ Web.Cookie: setCookieMaxAge :: SetCookie -> Maybe DiffTime
+ Web.Cookie: setCookieSecure :: SetCookie -> Bool

Files

Web/Cookie.hs view
@@ -1,9 +1,20 @@ {-# LANGUAGE OverloadedStrings #-} module Web.Cookie     ( -- * Server to client-      SetCookie (..)+      -- ** Data type+      SetCookie+    , setCookieName+    , setCookieValue+    , setCookiePath+    , setCookieExpires+    , setCookieMaxAge+    , setCookieDomain+    , setCookieHttpOnly+    , setCookieSecure+      -- ** Functions     , parseSetCookie     , renderSetCookie+    , def       -- * Client to server     , Cookies     , parseCookies@@ -25,7 +36,9 @@ import Blaze.ByteString.Builder.Char8 (fromChar) import Data.Monoid (mempty, mappend, mconcat) import Data.Word (Word8)+import Data.Ratio (numerator, denominator) import Data.Time (UTCTime, formatTime, parseTime)+import Data.Time.Clock (DiffTime, secondsToDiffTime) import System.Locale (defaultTimeLocale) import Control.Arrow (first) import Data.Text (Text)@@ -33,6 +46,7 @@ import Data.Text.Encoding.Error (lenientDecode) import Control.Arrow ((***)) import Data.Maybe (isJust)+import Data.Default (Default (def))  -- | Textual cookies. Functions assume UTF8 encoding. type CookiesText = [(Text, Text)]@@ -84,11 +98,25 @@     , setCookieValue :: S.ByteString     , setCookiePath :: Maybe S.ByteString     , setCookieExpires :: Maybe UTCTime+    , setCookieMaxAge :: Maybe DiffTime     , setCookieDomain :: Maybe S.ByteString     , setCookieHttpOnly :: Bool+    , setCookieSecure :: Bool     }-    deriving (Eq, Show, Read)+    deriving (Eq, Show) +instance Default SetCookie where+    def = SetCookie+        { setCookieName     = "name"+        , setCookieValue    = "value"+        , setCookiePath     = Nothing+        , setCookieExpires  = Nothing+        , setCookieMaxAge   = Nothing+        , setCookieDomain   = Nothing+        , setCookieHttpOnly = False+        , setCookieSecure   = False+        }+ renderSetCookie :: SetCookie -> Builder renderSetCookie sc = mconcat     [ fromByteString (setCookieName sc)@@ -96,19 +124,26 @@     , fromByteString (setCookieValue sc)     , case setCookiePath sc of         Nothing -> mempty-        Just path -> copyByteString "; path="+        Just path -> copyByteString "; Path="                      `mappend` fromByteString path     , case setCookieExpires sc of         Nothing -> mempty-        Just e -> copyByteString "; expires=" `mappend`+        Just e -> copyByteString "; Expires=" `mappend`                   fromByteString (formatCookieExpires e)+    , case setCookieMaxAge sc of+        Nothing -> mempty+        Just ma -> copyByteString"; Max-Age=" `mappend`+                   fromByteString (formatCookieMaxAge ma)     , case setCookieDomain sc of         Nothing -> mempty-        Just d -> copyByteString "; domain=" `mappend`+        Just d -> copyByteString "; Domain=" `mappend`                   fromByteString d     , if setCookieHttpOnly sc         then copyByteString "; HttpOnly"         else mempty+    , if setCookieSecure sc+        then copyByteString "; Secure"+        else mempty     ]  parseSetCookie :: S.ByteString -> SetCookie@@ -118,8 +153,11 @@     , setCookiePath = lookup "path" pairs     , setCookieExpires =         lookup "expires" pairs >>= parseCookieExpires+    , setCookieMaxAge =+        lookup "max-age" pairs >>= parseCookieMaxAge     , setCookieDomain = lookup "domain" pairs-    , setCookieHttpOnly = isJust $ lookup "HttpOnly" pairs+    , setCookieHttpOnly = isJust $ lookup "httponly" pairs+    , setCookieSecure = isJust $ lookup "secure" pairs     }   where     (key, value, b) = parsePair a@@ -144,3 +182,16 @@  parseCookieExpires :: S.ByteString -> Maybe UTCTime parseCookieExpires = parseTime defaultTimeLocale expiresFormat . S8.unpack++-- | Format a 'DiffTime' for a cookie.+formatCookieMaxAge :: DiffTime -> S.ByteString+formatCookieMaxAge difftime = S8.pack $ show (num `div` denom)+  where rational = toRational difftime+        num = numerator rational+        denom = denominator rational++parseCookieMaxAge :: S.ByteString -> Maybe DiffTime+parseCookieMaxAge bs+  | all (\ c -> c >= '0' && c <= '9') $ unpacked = Just $ secondsToDiffTime $ read unpacked+  | otherwise = Nothing+  where unpacked = S8.unpack bs
cookie.cabal view
@@ -1,5 +1,5 @@ name:            cookie-version:         0.3.0.2+version:         0.4.0 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -18,6 +18,7 @@                    , old-locale                >= 1        && < 1.1                    , time                      >= 1.1.4                    , text                      >= 0.7      && < 1.0+                   , data-default     exposed-modules: Web.Cookie     ghc-options:     -Wall