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 +1/−2
- src/Web/Apiary/Cookie.hs +10/−12
- src/Web/Apiary/Cookie/Internal.hs +14/−12
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-