packages feed

authenticate-oauth 1.1 → 1.2.0

raw patch · 3 files changed

+38/−122 lines, 3 filesdep +monad-controldep ~blaze-builder-conduitdep ~conduitdep ~http-conduitPVP ok

version bump matches the API change (PVP)

Dependencies added: monad-control

Dependency ranges changed: blaze-builder-conduit, conduit, http-conduit

API changes (from Hackage documentation)

- Web.Authenticate.OAuth.IO: genSign :: ResourceIO m => OAuth -> Credential -> Request m -> m ByteString
- Web.Authenticate.OAuth.IO: getAccessToken' :: ResourceIO m => (Request m -> Request m) -> OAuth -> Credential -> m Credential
- Web.Authenticate.OAuth.IO: getAccessToken, getTokenCredential :: ResourceIO m => OAuth -> Credential -> m Credential
- Web.Authenticate.OAuth.IO: getAccessTokenProxy, getTokenCredentialProxy :: ResourceIO m => Maybe Proxy -> OAuth -> Credential -> m Credential
- Web.Authenticate.OAuth.IO: getTemporaryCredential :: ResourceIO m => OAuth -> m Credential
- Web.Authenticate.OAuth.IO: getTemporaryCredential' :: ResourceIO m => (Request m -> Request m) -> OAuth -> m Credential
- Web.Authenticate.OAuth.IO: getTemporaryCredentialProxy :: ResourceIO m => Maybe Proxy -> OAuth -> m Credential
- Web.Authenticate.OAuth.IO: getTemporaryCredentialWithScope :: ResourceIO m => ByteString -> OAuth -> m Credential
- Web.Authenticate.OAuth.IO: signOAuth :: ResourceIO m => OAuth -> Credential -> Request m -> m (Request m)
- Web.Authenticate.OAuth: genSign :: ResourceIO m => OAuth -> Credential -> Request m -> ResourceT m ByteString
+ Web.Authenticate.OAuth: genSign :: MonadResource m => OAuth -> Credential -> Request m -> m ByteString
- Web.Authenticate.OAuth: getAccessToken' :: ResourceIO m => (Request m -> Request m) -> OAuth -> Credential -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getAccessToken' :: (MonadResource m, MonadBaseControl IO m) => (Request m -> Request m) -> OAuth -> Credential -> Manager -> m Credential
- Web.Authenticate.OAuth: getAccessToken, getTokenCredential :: ResourceIO m => OAuth -> Credential -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getAccessToken, getTokenCredential :: (MonadResource m, MonadBaseControl IO m) => OAuth -> Credential -> Manager -> m Credential
- Web.Authenticate.OAuth: getAccessTokenProxy, getTokenCredentialProxy :: ResourceIO m => Maybe Proxy -> OAuth -> Credential -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getAccessTokenProxy, getTokenCredentialProxy :: (MonadResource m, MonadBaseControl IO m) => Maybe Proxy -> OAuth -> Credential -> Manager -> m Credential
- Web.Authenticate.OAuth: getTemporaryCredential :: ResourceIO m => OAuth -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getTemporaryCredential :: (MonadResource m, MonadBaseControl IO m) => OAuth -> Manager -> m Credential
- Web.Authenticate.OAuth: getTemporaryCredential' :: ResourceIO m => (Request m -> Request m) -> OAuth -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getTemporaryCredential' :: (MonadResource m, MonadBaseControl IO m) => (Request m -> Request m) -> OAuth -> Manager -> m Credential
- Web.Authenticate.OAuth: getTemporaryCredentialProxy :: ResourceIO m => Maybe Proxy -> OAuth -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getTemporaryCredentialProxy :: (MonadResource m, MonadBaseControl IO m) => Maybe Proxy -> OAuth -> Manager -> m Credential
- Web.Authenticate.OAuth: getTemporaryCredentialWithScope :: ResourceIO m => ByteString -> OAuth -> Manager -> ResourceT m Credential
+ Web.Authenticate.OAuth: getTemporaryCredentialWithScope :: (MonadResource m, MonadBaseControl IO m) => ByteString -> OAuth -> Manager -> m Credential
- Web.Authenticate.OAuth: signOAuth :: ResourceIO m => OAuth -> Credential -> Request m -> ResourceT m (Request m)
+ Web.Authenticate.OAuth: signOAuth :: MonadResource m => OAuth -> Credential -> Request m -> m (Request m)

Files

Web/Authenticate/OAuth.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, StandaloneDeriving #-}+{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, StandaloneDeriving, FlexibleContexts #-} {-# OPTIONS_GHC -Wall -fno-warn-orphans #-} module Web.Authenticate.OAuth     ( -- * Data types@@ -24,7 +24,6 @@ import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BSL import Data.Maybe-import Control.Applicative import Network.HTTP.Types (parseSimpleQuery, SimpleQuery) import Control.Exception import Control.Monad@@ -40,11 +39,12 @@ import Blaze.ByteString.Builder (toByteString) import Control.Monad.IO.Class (MonadIO) import Network.HTTP.Types (renderSimpleQuery, status200)-import Data.Conduit (ResourceT, ResourceIO, ($$), ($=), Source)+import Data.Conduit (MonadResource, ($$), ($=), Source) import qualified Data.Conduit.List as CL import Data.Conduit.Blaze (builderToByteString) import Blaze.ByteString.Builder (Builder) import Control.Monad.IO.Class (liftIO)+import Control.Monad.Trans.Control import Data.Default  -- | Data type for OAuth client (consumer).@@ -144,18 +144,18 @@ fromStrict = BSL.fromChunks . return  -- | Get temporary credential for requesting acces token.-getTemporaryCredential :: ResourceIO m+getTemporaryCredential :: (MonadResource m, MonadBaseControl IO m)                        => OAuth         -- ^ OAuth Application                        -> Manager-                       -> ResourceT m Credential -- ^ Temporary Credential (Request Token & Secret).+                       -> m Credential -- ^ Temporary Credential (Request Token & Secret). getTemporaryCredential = getTemporaryCredential' id  -- | Get temporary credential for requesting access token with Scope parameter.-getTemporaryCredentialWithScope :: ResourceIO m+getTemporaryCredentialWithScope :: (MonadResource m, MonadBaseControl IO m)                                 => BS.ByteString -- ^ Scope parameter string                                 -> OAuth         -- ^ OAuth Application                                 -> Manager-                                -> ResourceT m Credential -- ^ Temporay Credential (Request Token & Secret).+                                -> m Credential -- ^ Temporay Credential (Request Token & Secret). getTemporaryCredentialWithScope bs = getTemporaryCredential' (addScope bs)  addScope :: (MonadIO m) => BS.ByteString -> Request m -> Request m@@ -163,24 +163,24 @@                    | otherwise     = urlEncodedBody [("scope", scope)] req  -- | Get temporary credential for requesting access token via the proxy.-getTemporaryCredentialProxy :: ResourceIO m+getTemporaryCredentialProxy :: (MonadResource m, MonadBaseControl IO m)                             => Maybe Proxy   -- ^ Proxy                             -> OAuth         -- ^ OAuth Application                             -> Manager-                            -> ResourceT m Credential -- ^ Temporary Credential (Request Token & Secret).+                            -> m Credential -- ^ Temporary Credential (Request Token & Secret). getTemporaryCredentialProxy p oa m = getTemporaryCredential' (addMaybeProxy p) oa m -getTemporaryCredential' :: ResourceIO m+getTemporaryCredential' :: (MonadResource m, MonadBaseControl IO m)                         => (Request m -> Request m)   -- ^ Request Hook                         -> OAuth                      -- ^ OAuth Application                         -> Manager-                        -> ResourceT m Credential    -- ^ Temporary Credential (Request Token & Secret).+                        -> m Credential    -- ^ Temporary Credential (Request Token & Secret). getTemporaryCredential' hook oa manager = do   let req = fromJust $ parseUrl $ oauthRequestUri oa       crd = maybe id (insert "oauth_callback") (oauthCallback oa) $ emptyCredential   req' <- signOAuth oa crd $ hook (req { method = "POST" })    rsp <- httpLbs req' manager-  if statusCode rsp == status200+  if responseStatus rsp == status200     then do       let dic = parseSimpleQuery . toStrict . responseBody $ rsp       return $ Credential dic@@ -209,33 +209,33 @@  -- | Get Access token. getAccessToken, getTokenCredential-               :: ResourceIO m+               :: (MonadResource m, MonadBaseControl IO m)                => OAuth         -- ^ OAuth Application                -> Credential    -- ^ Temporary Credential (with oauth_verifier if >= 1.0a)                -> Manager-               -> ResourceT m Credential -- ^ Token Credential (Access Token & Secret)+               -> m Credential -- ^ Token Credential (Access Token & Secret) getAccessToken = getAccessToken' id  -- | Get Access token via the proxy. getAccessTokenProxy, getTokenCredentialProxy-               :: ResourceIO m+               :: (MonadResource m, MonadBaseControl IO m)                => Maybe Proxy   -- ^ Proxy                -> OAuth         -- ^ OAuth Application                -> Credential    -- ^ Temporary Credential (with oauth_verifier if >= 1.0a)                -> Manager-               -> ResourceT m Credential -- ^ Token Credential (Access Token & Secret)+               -> m Credential -- ^ Token Credential (Access Token & Secret) getAccessTokenProxy p = getAccessToken' $ addMaybeProxy p -getAccessToken' :: ResourceIO m+getAccessToken' :: (MonadResource m, MonadBaseControl IO m)                 => (Request m -> Request m)   -- ^ Request Hook                 -> OAuth                      -- ^ OAuth Application                 -> Credential                 -- ^ Temporary Credential (with oauth_verifier if >= 1.0a)                 -> Manager-                -> ResourceT m Credential     -- ^ Token Credential (Access Token & Secret)+                -> m Credential     -- ^ Token Credential (Access Token & Secret) getAccessToken' hook oa cr manager = do   let req = hook (fromJust $ parseUrl $ oauthAccessTokenUri oa) { method = "POST" }   rsp <- flip httpLbs manager =<< signOAuth oa (if oauthVersion oa == OAuth10 then delete "oauth_verifier" cr else cr) req-  if statusCode rsp == status200+  if responseStatus rsp == status200     then do       let dic = parseSimpleQuery . toStrict . responseBody $ rsp       return $ Credential dic@@ -271,11 +271,11 @@ injectVerifier = insert "oauth_verifier"  -- | Add OAuth headers & sign to 'Request'.-signOAuth :: ResourceIO m+signOAuth :: (MonadResource m)           => OAuth              -- ^ OAuth Application           -> Credential         -- ^ Credential           -> Request m          -- ^ Original Request-          -> ResourceT m (Request m)    -- ^ Signed OAuth Request+          -> m (Request m)    -- ^ Signed OAuth Request signOAuth oa crd req = do   crd' <- addTimeStamp =<< addNonce crd   let tok = injectOAuthToCred oa crd'@@ -296,14 +296,14 @@ showSigMtd HMACSHA1  = "HMAC-SHA1" showSigMtd (RSASHA1 _) = "RSA-SHA1" -addNonce :: ResourceIO m => Credential -> ResourceT m Credential+addNonce :: MonadResource m => Credential -> m Credential addNonce cred = do   nonce <- liftIO $ replicateM 10 (randomRIO ('a','z')) -- FIXME very inefficient   return $ insert "oauth_nonce" (BS.pack nonce) cred -addTimeStamp :: ResourceIO m => Credential -> ResourceT m Credential+addTimeStamp :: MonadResource m => Credential -> m Credential addTimeStamp cred = do-  stamp <- floor . (`diffUTCTime` baseTime) <$> liftIO getCurrentTime+  stamp <- (floor . (`diffUTCTime` baseTime)) `liftM` liftIO getCurrentTime   return $ insert "oauth_timestamp" (BS.pack $ show (stamp :: Integer)) cred  injectOAuthToCred :: OAuth -> Credential -> Credential@@ -313,7 +313,7 @@             , ("oauth_version", "1.0")             ] cred -genSign :: ResourceIO m => OAuth -> Credential -> Request m -> ResourceT m BS.ByteString+genSign :: MonadResource m => OAuth -> Credential -> Request m -> m BS.ByteString genSign oa tok req =   case oauthSignatureMethod oa of     HMACSHA1 -> do@@ -341,7 +341,7 @@                                oct = '%' : replicate (2 - length num) '0' ++ num                            in BS.pack oct -getBaseString :: ResourceIO m => Credential -> Request m -> ResourceT m BSL.ByteString+getBaseString :: MonadResource m => Credential -> Request m -> m BSL.ByteString getBaseString tok req = do   let bsMtd  = BS.map toUpper $ method req       isHttps = secure req@@ -361,15 +361,15 @@   -- So this is OK.   return $ BSL.intercalate "&" $ map (fromStrict.paramEncode) [bsMtd, bsURI, bsParams] -toLBS :: ResourceIO m => RequestBody m -> ResourceT m BS.ByteString+toLBS :: MonadResource m => RequestBody m -> m BS.ByteString toLBS (RequestBodyLBS l) = return $ toStrict l toLBS (RequestBodyBS s) = return s toLBS (RequestBodyBuilder _ b) = return $ toByteString b toLBS (RequestBodySource _ src) = toLBS' src toLBS (RequestBodySourceChunked src) = toLBS' src -toLBS' :: ResourceIO m => Source m Builder -> ResourceT m BS.ByteString-toLBS' src = fmap BS.concat $ src $= builderToByteString $$ CL.consume+toLBS' :: MonadResource m => Source m Builder -> m BS.ByteString+toLBS' src = liftM BS.concat $ src $= builderToByteString $$ CL.consume  isBodyFormEncoded :: [Header] -> Bool isBodyFormEncoded = maybe False (=="application/x-www-form-urlencoded") . lookup "Content-Type"
Web/Authenticate/OAuth/IO.hs view
@@ -1,95 +1,10 @@ {-# LANGUAGE DeriveDataTypeable, OverloadedStrings, StandaloneDeriving #-} {-# OPTIONS_GHC -Wall -fno-warn-orphans #-}--- | This Module provides interface for the instance of ResouceIO instead of ResourceT.--- What this module do is just adding 'withManager' or 'runResourceT'.+-- | This module is deprecated due to the interface change at conduit-0.3.+--   For now, this package only re-exports 'Web.Authenticate.OAuth' module. module Web.Authenticate.OAuth.IO+    {-# DEPRECATED "This module is deprecated; use Web.Authenticate.OAuth instead." #-}     (        module Web.Authenticate.OAuth,-      getAccessToken, signOAuth,-      getTemporaryCredential, getTemporaryCredentialWithScope,-      getTemporaryCredentialProxy, getTemporaryCredential',-      getTokenCredential,-      getAccessTokenProxy, getTokenCredentialProxy, -      getAccessToken', genSign     ) where-import Network.HTTP.Conduit-import qualified Web.Authenticate.OAuth as OA-import Web.Authenticate.OAuth hiding-    (getAccessToken, signOAuth,-     getTemporaryCredential, getTemporaryCredentialWithScope,-     getTemporaryCredentialProxy, getTemporaryCredential',-     getTokenCredential, getTemporaryCredentialWithScope,-     getAccessTokenProxy, getTemporaryCredentialProxy,-     getTokenCredentialProxy, genSign,-     getAccessToken', getTemporaryCredential')-import Data.Conduit-import qualified Data.ByteString.Char8 as BS----- | Get temporary credential for requesting acces token.-getTemporaryCredential :: ResourceIO m-                       => OA.OAuth         -- ^ OAuth Application-                       -> m OA.Credential -- ^ Temporary Credential (Request Token & Secret).-getTemporaryCredential = withManager . OA.getTemporaryCredential---- | Get temporary credential for requesting access token with Scope parameter.-getTemporaryCredentialWithScope :: ResourceIO m-                                => BS.ByteString -- ^ Scope parameter string-                                -> OAuth         -- ^ OAuth Application-                                -> m Credential -- ^ Temporay Credential (Request Token & Secret).-getTemporaryCredentialWithScope bs oa =-    withManager $ OA.getTemporaryCredentialWithScope bs oa----- | Get temporary credential for requesting access token via the proxy.-getTemporaryCredentialProxy :: ResourceIO m-                            => Maybe Proxy   -- ^ Proxy-                            -> OAuth         -- ^ OAuth Application-                            -> m Credential -- ^ Temporary Credential (Request Token & Secret).-getTemporaryCredentialProxy p oa = withManager $ OA.getTemporaryCredential' (addMaybeProxy p) oa--getTemporaryCredential' :: ResourceIO m-                        => (Request m -> Request m)   -- ^ Request Hook-                        -> OAuth                      -- ^ OAuth Application-                        -> m Credential -- ^ Temporary Credential (Request Token & Secret).-getTemporaryCredential' hook oa = withManager $ OA.getTemporaryCredential' hook oa----- | Get Access token.-getAccessToken, getTokenCredential-               :: ResourceIO m-               => OAuth         -- ^ OAuth Application-               -> Credential    -- ^ Temporary Credential with oauth_verifier-               -> m Credential -- ^ Token Credential (Access Token & Secret)-getAccessToken oa cr = withManager $ OA.getAccessToken oa cr---- | Get Access token via the proxy.-getAccessTokenProxy, getTokenCredentialProxy-               :: ResourceIO m-               => Maybe Proxy   -- ^ Proxy-               -> OAuth         -- ^ OAuth Application-               -> Credential    -- ^ Temporary Credential with oauth_verifier-               -> m Credential -- ^ Token Credential (Access Token & Secret)-getAccessTokenProxy p oa cr = withManager $ OA.getAccessTokenProxy p oa cr--getAccessToken' :: ResourceIO m-                => (Request m -> Request m)   -- ^ Request Hook-                -> OAuth                      -- ^ OAuth Application-                -> Credential                 -- ^ Temporary Credential with oauth_verifier-                -> m Credential     -- ^ Token Credential (Access Token & Secret)-getAccessToken' hook oa cr = withManager $ OA.getAccessToken' hook oa cr---getTokenCredential = getAccessToken-getTokenCredentialProxy = getAccessTokenProxy---- | Add OAuth headers & sign to 'Request'-signOAuth :: ResourceIO m-          => OAuth              -- ^ OAuth Application-          -> Credential         -- ^ Credential-          -> Request m          -- ^ Original Request-          -> m (Request m)    -- ^ Signed OAuth Request-signOAuth oa crd req = runResourceT $ OA.signOAuth oa crd req--genSign :: ResourceIO m => OAuth -> Credential -> Request m -> m BS.ByteString-genSign oa tok req = runResourceT $ OA.genSign oa tok req+import Web.Authenticate.OAuth
authenticate-oauth.cabal view
@@ -1,5 +1,5 @@ name:            authenticate-oauth-version:         1.1+version:         1.2.0 license:         BSD3 license-file:    LICENSE author:          Hiromi Ishii@@ -14,7 +14,7 @@  library     build-depends:   base                          >= 4        && < 5-                   , http-conduit                  >= 1.2      && < 1.3+                   , http-conduit                  >= 1.3      && < 1.4                    , transformers                  >= 0.1      && < 0.3                    , bytestring                    >= 0.9                    , RSA                           >= 1.0      && < 1.1@@ -25,8 +25,9 @@                    , random                    , http-types                    >= 0.6      && < 0.7                    , blaze-builder-                   , conduit                       >= 0.2      && < 0.3-                   , blaze-builder-conduit         >= 0.2      && < 0.3+                   , conduit                       >= 0.3      && < 0.4+                   , blaze-builder-conduit         >= 0.3      && < 0.4+                   , monad-control                 >= 0.3      && < 0.4     exposed-modules: Web.Authenticate.OAuth, Web.Authenticate.OAuth.IO     ghc-options:     -Wall