apiary-cookie 0.13.1.1 → 0.16.0
raw patch · 3 files changed
+74/−77 lines, 3 filesdep ~apiaryPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: apiary
API changes (from Hackage documentation)
- Web.Apiary.Cookie.Internal: cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
- Web.Apiary.Cookie.Internal: cookie :: (Strategy w, Query a, Functor n, Monad n) => ByteString -> proxy (w a) -> ApiaryT (SNext w as a) n m b -> ApiaryT as n m b
- Web.Apiary.Cookie.Internal: cookie' :: Request -> [(ByteString, ByteString)]
- Web.Apiary.Cookie.Internal: deleteCookie :: Monad m => ByteString -> ActionT m ()
- Web.Apiary.Cookie.Internal: setCookie :: Monad m => SetCookie -> ActionT m ()
+ Web.Apiary.Cookie: cookie' :: Request -> [(ByteString, ByteString)]
- Web.Apiary.Cookie: cookie :: (Strategy w, Query a, Functor n, Monad n) => ByteString -> proxy (w a) -> ApiaryT (SNext w as a) n m b -> ApiaryT as n m b
+ Web.Apiary.Cookie: cookie :: (Strategy w, Query p, Monad actM) => ByteString -> w p -> ApiaryT exts (SNext w prms p) actM m () -> ApiaryT exts prms actM m ()
- Web.Apiary.Cookie: deleteCookie :: Monad m => ByteString -> ActionT m ()
+ Web.Apiary.Cookie: deleteCookie :: Monad m => ByteString -> ActionT exts m ()
- Web.Apiary.Cookie: setCookie :: Monad m => SetCookie -> ActionT m ()
+ Web.Apiary.Cookie: setCookie :: Monad m => SetCookie -> ActionT exts m ()
Files
- apiary-cookie.cabal +9/−10
- src/Web/Apiary/Cookie.hs +65/−1
- src/Web/Apiary/Cookie/Internal.hs +0/−66
apiary-cookie.cabal view
@@ -1,5 +1,5 @@ name: apiary-cookie-version: 0.13.1.1+version: 0.16.0 synopsis: Cookie support for apiary web framework. description: example: <https://github.com/philopon/apiary/blob/master/examples/auth.hs>@@ -18,15 +18,14 @@ library exposed-modules: Web.Apiary.Cookie- Web.Apiary.Cookie.Internal- other-extensions: - build-depends: base >=4.6 && <4.8- , bytestring >=0.10 && <0.11- , apiary >=0.13 && <0.16- , cookie >=0.4 && <0.5- , blaze-builder >=0.3 && <0.4- , time >=1.4 && <1.5- , blaze-html >=0.7 && <0.8+ build-depends: base >=4.6 && <4.8+ , apiary >=0.16 && <0.17++ , bytestring >=0.10 && <0.11+ , cookie >=0.4 && <0.5+ , time >=1.4 && <1.5+ , blaze-builder >=0.3 && <0.4+ , blaze-html >=0.7 && <0.8 hs-source-dirs: src ghc-options: -O2 -Wall
src/Web/Apiary/Cookie.hs view
@@ -1,3 +1,12 @@+{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE ImplicitParams #-}+{-# LANGUAGE ConstraintKinds #-}+ module Web.Apiary.Cookie ( -- * setter@@ -5,10 +14,65 @@ , deleteCookie -- * filter , cookie+ , cookie' -- * Reexport -- | SetCookie(..) , module Web.Cookie ) where +import Web.Apiary.Wai+import Web.Apiary import Web.Cookie (SetCookie(..))-import Web.Apiary.Cookie.Internal+import qualified Web.Cookie as Cookie++import Control.Monad.Apiary.Filter.Internal+import Control.Monad.Apiary.Filter.Internal.Strategy++import Data.Maybe+import Data.Time+import Data.Monoid+import Data.Apiary.Document+import Blaze.ByteString.Builder+import Text.Blaze.Html+import qualified Data.ByteString as S++cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b+cond p t f a = if p a then t a else f a++-- | cookie filter. since 0.5.1.0.+--+-- can use like 'query' function.+--+-- example:+--+-- @+-- cookie "foo" (pFirst pInt) -- get first Int parameter from foo.+-- cookie "bar" (pOption pDouble) -- get first Double parameter from bar, allows no cookie.+-- cookie "baz" (pMany (pMaybe pString)) -- get zero or more baz cookies. allows cookie decrypt failure.+-- cookie "baz" (Proxy :: Proxy (LimitSome [int|100|] ByteString)) -- get raw cookies up to 100 entries.+-- @+cookie :: (Strategy w, Query p, Monad actM)+ => S.ByteString+ -> w p+ -> ApiaryT exts (SNext w prms p) actM m ()+ -> ApiaryT exts prms actM m ()+cookie k p = function (DocPrecondition $ toHtml (show k) <> " cookie required") $ \l r ->+ readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l++cookie' :: Request -> [(S.ByteString, S.ByteString)]+cookie' = + concatMap Cookie.parseCookies .+ mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .+ requestHeaders++-- | delete cookie. since 0.6.1.0.+deleteCookie :: Monad m => S.ByteString -> ActionT exts m ()+deleteCookie k = setCookie def { setCookieName = k + , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0+ , setCookieMaxAge = Just 0+ }++-- | set raw cookie header.+setCookie :: Monad m => SetCookie -> ActionT exts m ()+setCookie =+ addHeader "set-cookie" . toByteString . Cookie.renderSetCookie
− src/Web/Apiary/Cookie/Internal.hs
@@ -1,66 +0,0 @@-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE ImplicitParams #-}-{-# LANGUAGE ConstraintKinds #-}--module Web.Apiary.Cookie.Internal where--import Web.Apiary.Wai-import Web.Apiary-import Web.Cookie--import Control.Monad.Apiary.Filter.Internal-import Control.Monad.Apiary.Filter.Internal.Strategy--import Data.Maybe-import Data.Time-import Data.Monoid-import Data.Apiary.Document-import Blaze.ByteString.Builder-import Text.Blaze.Html-import qualified Data.ByteString as S--cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b-cond p t f a = if p a then t a else f a---- | cookie filter. since 0.5.1.0.------ can use like 'query' function.------ example:------ @--- cookie "foo" (pFirst pInt) -- get first Int parameter from foo.--- cookie "bar" (pOption pDouble) -- get first Double parameter from bar, allows no cookie.--- cookie "baz" (pMany (pMaybe pString)) -- get zero or more baz cookies. allows cookie decrypt failure.--- cookie "baz" (Proxy :: Proxy (LimitSome [int|100|] ByteString)) -- get raw cookies up to 100 entries.--- @-cookie :: (Strategy w, Query a, Functor n, Monad n)- => S.ByteString- -> proxy (w a)- -> ApiaryT (SNext w as a) n m b- -> ApiaryT as n m b-cookie k p = function (DocPrecondition $ toHtml (show k) <> " cookie required") $ \l r ->- readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l--cookie' :: Request -> [(S.ByteString, S.ByteString)]-cookie' = - concatMap parseCookies .- mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .- requestHeaders---- | delete cookie. since 0.6.1.0.-deleteCookie :: Monad m => S.ByteString -> ActionT m ()-deleteCookie k = setCookie def { setCookieName = k - , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0- , setCookieMaxAge = Just 0- }---- | set raw cookie header.-setCookie :: Monad m => SetCookie -> ActionT m ()-setCookie =- addHeader "set-cookie" . toByteString . renderSetCookie