packages feed

apiary-cookie 0.4.0.0 → 0.4.1.0

raw patch · 3 files changed

+25/−26 lines, 3 filesdep −reflectionPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: reflection

API changes (from Hackage documentation)

- Web.Apiary.Cookie: class Given a
- Web.Apiary.Cookie: data Cookie
- Web.Apiary.Cookie: data SetCookie :: *
- Web.Apiary.Cookie: def :: Default a => a
+ Web.Apiary.Cookie: type HasCookie = ?webApiaryCookieCookie :: Cookie
- Web.Apiary.Cookie: getCookie :: (Monad m, Given Cookie) => ByteString -> ActionT m (Maybe ByteString)
+ Web.Apiary.Cookie: getCookie :: (Monad m, HasCookie) => ByteString -> ActionT m (Maybe ByteString)
- Web.Apiary.Cookie: getCookie' :: (Monad m, Given Cookie) => ByteString -> ActionT m ByteString
+ Web.Apiary.Cookie: getCookie' :: (Monad m, HasCookie) => ByteString -> ActionT m ByteString
- Web.Apiary.Cookie: getCookies :: (Monad m, Given Cookie) => ActionT m (Maybe [(ByteString, Maybe ByteString)])
+ Web.Apiary.Cookie: getCookies :: (Monad m, HasCookie) => ActionT m (Maybe [(ByteString, Maybe ByteString)])
- Web.Apiary.Cookie: getCookies' :: (Monad m, Given Cookie) => ActionT m [(ByteString, Maybe ByteString)]
+ Web.Apiary.Cookie: getCookies' :: (Monad m, HasCookie) => ActionT m [(ByteString, Maybe ByteString)]
- Web.Apiary.Cookie: setCookie :: (MonadIO m, Given Cookie) => SetCookie -> ActionT m ()
+ Web.Apiary.Cookie: setCookie :: (MonadIO m, HasCookie) => SetCookie -> ActionT m ()
- Web.Apiary.Cookie: withCookie :: CookieConfig -> (Given Cookie => IO b) -> IO b
+ Web.Apiary.Cookie: withCookie :: CookieConfig -> (HasCookie => IO b) -> IO b

Files

apiary-cookie.cabal view
@@ -1,5 +1,5 @@ name:                apiary-cookie-version:             0.4.0.0+version:             0.4.1.0 x-revision:          1 synopsis:            Cookie support for apiary web framework. description:@@ -27,7 +27,6 @@                      , apiary             >=0.4   && <0.5                      , cookie             >=0.4   && <0.5                      , clientsession      >=0.9   && <0.10-                     , reflection         >=1.4   && <1.5                      , blaze-builder      >=0.3   && <0.4                      , data-default-class >=0.0   && <0.1 
src/Web/Apiary/Cookie.hs view
@@ -3,8 +3,9 @@ -- -- @ -- {-# LANGUAGE QuasiQuotes #-}--- {-# LANGUAGE FlexibleContexts #-} -- for reflection -- {-# LANGUAGE OverloadedStrings #-}+-- {-# LANGUAGE NoMonomorphismRestriction #-} -- for implicit signature+-- {-# LANGUAGE FlexibleContexts #-} -- for explicit signature -- -- import Web.Apiary -- import Web.Apiary.Cookie@@ -30,19 +31,15 @@ --     root $ action_ splittedAction -- @ ----- In splitted action, you must add sigunature--- with 'Given' 'Cookie' ristriction.--- -- 'getCookie' functions, get and auto decrypt cookie. -- -- @--- splittedAction :: (Monad m, Given Cookie) => ActionT m ()+-- splittedAction :: (Monad m, HasCookie) => ActionT m () -- splittedAction = do --     s <- 'getCookie'' "param" --     p <- 'getCookie'' "dog" --     contentType "text/plain" --     lbs $ L.unlines [L.fromStrict s, L.fromStrict p]---  -- @ -- -- * first, access localhost:3000, 404 page not found shown.@@ -57,7 +54,7 @@ --  module Web.Apiary.Cookie -    ( Cookie+    ( HasCookie     , CookieConfig(..)     , withCookie     -- * setter@@ -66,11 +63,12 @@     , getCookies, getCookies'     , getCookie, getCookie'     -- * Reexport-    , def-    , SetCookie(..)-    , Given+    -- | SetCookie(..)+    , module Web.Cookie+    -- | def+    , module Data.Default.Class     ) where -import Web.Cookie+import Web.Cookie (SetCookie(..))+import Data.Default.Class import Web.Apiary.Cookie.Internal-import Data.Reflection
src/Web/Apiary/Cookie/Internal.hs view
@@ -4,6 +4,8 @@ {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE LambdaCase #-}+{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE ConstraintKinds #-}  module Web.Apiary.Cookie.Internal where @@ -18,7 +20,6 @@ import Blaze.ByteString.Builder import qualified Data.ByteString as S import Data.Default.Class-import Data.Reflection  newtype Cookie = Cookie     { key :: Key@@ -30,33 +31,34 @@ instance Default CookieConfig where     def = CookieConfig defaultKeyFile +type HasCookie = ?webApiaryCookieCookie :: Cookie+ -- | Give cookie encryption key.-withCookie :: CookieConfig -> (Given Cookie => IO b) -> IO b+withCookie :: CookieConfig -> (HasCookie => IO b) -> IO b withCookie conf f = do     k <- getKey $ keyFile conf-    give (Cookie k) f--setCookie :: (MonadIO m, Given Cookie) => SetCookie -> ActionT m ()+    let ?webApiaryCookieCookie = Cookie k+    f+setCookie :: (MonadIO m, HasCookie) => SetCookie -> ActionT m () setCookie sc = do-    v' <- liftIO $ encryptIO (key given) (setCookieValue sc) +    v' <- liftIO $ encryptIO (key ?webApiaryCookieCookie) (setCookieValue sc)      let s = toByteString . renderSetCookie $ sc { setCookieValue = v' }     addHeader "set-cookie" s  -- | get cookies. first Maybe indicate cookie header exists or not,  -- second Maybe indicate decryption status.-getCookies :: (Monad m, Given Cookie) => ActionT m (Maybe [(S.ByteString, Maybe S.ByteString)])+getCookies :: (Monad m, HasCookie) => ActionT m (Maybe [(S.ByteString, Maybe S.ByteString)]) getCookies = runMaybeT $ do     raw <- MaybeT $ getRequestHeader "cookie"-    return $ map (\(k,v) -> (k, decrypt (key given) v)) $ parseCookies raw+    return $ map (\(k,v) -> (k, decrypt (key ?webApiaryCookieCookie) v)) $ parseCookies raw  -- | like 'getCookies', but when cookie header isn't exists, pass next handler.-getCookies' :: (Monad m, Given Cookie) => ActionT m [(S.ByteString, Maybe S.ByteString)]+getCookies' :: (Monad m, HasCookie) => ActionT m [(S.ByteString, Maybe S.ByteString)] getCookies' = getCookies >>= maybe mzero return  -- | get cookie of specific key.-getCookie :: (Monad m, Given Cookie) => S.ByteString -> ActionT m (Maybe S.ByteString)+getCookie :: (Monad m, HasCookie) => S.ByteString -> ActionT m (Maybe S.ByteString) getCookie k = getCookies >>= return . maybe Nothing (join . lookup k) -getCookie' :: (Monad m, Given Cookie) => S.ByteString -> ActionT m S.ByteString+getCookie' :: (Monad m, HasCookie) => S.ByteString -> ActionT m S.ByteString getCookie' k = getCookie k >>= maybe mzero return-