packages feed

snaplet-recaptcha 1.0.1 → 1.0.2

raw patch · 2 files changed

+41/−24 lines, 2 filesdep ~snap

Dependency ranges changed: snap

Files

snaplet-recaptcha.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                snaplet-recaptcha-version:             1.0.1+version:             1.0.2 synopsis:            A ReCAPTCHA verification snaplet with Heist integration and connection sharing. -- description: homepage:            http://github.com/mikeplus64/snaplet-recaptcha@@ -22,8 +22,8 @@    build-depends:       base < 5                      , lens-                     , heist >= 0.14 && <0.15-                     , snap >= 0.13 && <0.14+                     , heist >= 0.14 && < 0.15+                     , snap >= 0.13 && < 0.15                      , blaze-builder                      , MonadCatchIO-transformers                      , mtl
src/Snap/Snaplet/ReCaptcha.hs view
@@ -1,7 +1,8 @@-{-# LANGUAGE DeriveDataTypeable        #-}-{-# LANGUAGE MultiParamTypeClasses     #-}-{-# LANGUAGE OverloadedStrings         #-}-{-# LANGUAGE TemplateHaskell           #-}+{-# LANGUAGE DeriveDataTypeable    #-}+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings     #-}+{-# LANGUAGE TemplateHaskell       #-} -- | -- Module      : Snap.Snaplet.ReCaptcha -- Copyright   : (c) Mike Ledger 2014@@ -31,6 +32,8 @@   , checkCaptcha   , withCaptcha   , getCaptcha+  , getCaptchaDiv+  , getCaptchaSiteKey     -- * Types   , Captcha(..)   , PrivateKey@@ -40,29 +43,29 @@   , recaptchaScript, recaptchaDiv   ) where -import qualified Blaze.ByteString.Builder    as Blaze+import qualified Blaze.ByteString.Builder as Blaze import           Control.Applicative import           Control.Lens-import           Control.Monad.Reader        (runReaderT)+import           Control.Monad.Reader     (runReaderT) -import qualified Data.Aeson                  as JSON-import qualified Data.Aeson.TH               as JSON-import qualified Data.ByteString.Char8       as BS-import qualified Data.Configurator           as Conf-import           Data.Text                   (Text)-import           Data.Text.Encoding          (encodeUtf8)+import qualified Data.Aeson            as JSON+import qualified Data.Aeson.TH         as JSON+import qualified Data.ByteString.Char8 as BS+import qualified Data.Configurator     as Conf+import           Data.Text             (Text)+import           Data.Text.Encoding    (encodeUtf8) -import           Data.Foldable               (fold, for_, toList)-import           Data.Monoid-import           Data.Typeable+import Data.Foldable (fold, for_, toList)+import Data.Monoid+import Data.Typeable -import           Heist-import           Heist.Compiled+import Heist+import Heist.Compiled  import qualified Network.HTTP.Client.Conduit as HTTP -import           Snap-import           Snap.Snaplet.Heist.Compiled+import Snap+import Snap.Snaplet.Heist.Compiled  type PrivateKey = BS.ByteString type SiteKey    = BS.ByteString@@ -86,6 +89,8 @@ data ReCaptcha = ReCaptcha   { connectionManager :: !HTTP.Manager   , recaptchaQuery    :: !(UserIP -> UserAnswer -> HTTP.Request)+  , recaptchaHtmlDiv  :: !Blaze.Builder+  , siteKey           :: !SiteKey   , _cstate           :: !Captcha   } deriving (Typeable) @@ -126,7 +131,9 @@           , ("response" , answer)           , ("remoteip" , ip) ]           req-    , _cstate = Failure+    , recaptchaHtmlDiv = recaptchaDiv site+    , siteKey          = site+    , _cstate          = Failure     }  -- | Initialise the 'ReCaptcha' snaplet. You are required to have "site_key" and@@ -167,7 +174,7 @@     "recaptcha-div"    ## pureSplice id (return (recaptchaDiv site))     "recaptcha-script" ## pureSplice id (return recaptchaScript) --- | @<script src='https://www.google.com/recaptcha/api.js' async defer></script> @+-- | @ \<script src='https://www.google.com/recaptcha/api.js' async defer\>\</script\> @ recaptchaScript :: Blaze.Builder recaptchaScript = Blaze.fromByteString   "<script src='https://www.google.com/recaptcha/api.js' async defer></script>"@@ -177,6 +184,7 @@ recaptchaDiv site = Blaze.fromByteString $!   "<div class='g-recaptcha' data-sitekey='" <> site <> "'></div>" + -- | Get the ReCaptcha result by querying Google's API. -- -- This requires a "g-recaptcha-response" (POST) parameter to be set in the@@ -269,3 +277,12 @@  where   showTextList :: [Text] -> BS.ByteString   showTextList = BS.intercalate "/" . map encodeUtf8++-- | Get the 'recaptchaDiv' for this 'ReCaptcha'. Useful inside a 'Handler'.+--+-- This is computed when the snaplet is first initialised.+getCaptchaDiv :: HasReCaptcha b => Handler b c Blaze.Builder+getCaptchaDiv = withTop' captchaLens (gets recaptchaHtmlDiv)++getCaptchaSiteKey :: HasReCaptcha b => Handler b c SiteKey+getCaptchaSiteKey = withTop' captchaLens (gets siteKey)