hoauth2 1.6.1 → 1.6.2
raw patch · 15 files changed
+176/−74 lines, 15 filesdep ~http-conduitPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: http-conduit
API changes (from Hackage documentation)
Files
- example/Douban/test.hs +10/−10
- example/Dropbox/test.hs +4/−4
- example/Facebook/test.hs +2/−3
- example/Fitbit/test.hs +7/−7
- example/Github/test.hs +7/−7
- example/Google/test.hs +0/−1
- example/Keys.hs +95/−0
- example/Okta/test.hs +4/−4
- example/StackExchange/test.hs +4/−4
- example/Weibo/test.hs +6/−6
- hoauth2.cabal +20/−11
- src/Network/OAuth/OAuth2/AuthorizationRequest.hs +1/−1
- src/Network/OAuth/OAuth2/HttpClient.hs +10/−9
- src/Network/OAuth/OAuth2/Internal.hs +5/−6
- src/Network/OAuth/OAuth2/TokenRequest.hs +1/−1
example/Douban/test.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} {-@@ -14,21 +14,21 @@ module Main where -import qualified Data.ByteString.Char8 as BS-import qualified Data.Text as T-import qualified Data.Text.Encoding as T-import qualified Data.Text.Lazy.Encoding as TL+import qualified Data.ByteString.Char8 as BS+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.Text.Lazy.Encoding as TL import Network.HTTP.Conduit import URI.ByteString import URI.ByteString.QQ import Network.OAuth.OAuth2 -import Keys (doubanKey)+import Keys (doubanKey) -import GHC.Generics import Data.Aeson import Data.Aeson.Types+import GHC.Generics data Errors = SomeRandomError
example/Dropbox/test.hs view
@@ -1,18 +1,18 @@+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE DeriveGeneric #-} module Main where +import Data.Aeson+import Data.Aeson.Types import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BSL import qualified Data.Text as T-import Data.Aeson-import Data.Aeson.Types+import GHC.Generics import Network.HTTP.Conduit import qualified Network.HTTP.Types as HT import URI.ByteString-import GHC.Generics import Network.OAuth.OAuth2
example/Facebook/test.hs view
@@ -1,8 +1,8 @@+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE DeriveGeneric #-} {- Facebook example -} @@ -17,13 +17,12 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as T import Network.HTTP.Conduit-import Prelude hiding (id) import URI.ByteString import URI.ByteString.QQ -import GHC.Generics import Data.Aeson import Data.Aeson.Types+import GHC.Generics data Errors = SomeRandomError
example/Fitbit/test.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} module Main where@@ -24,9 +24,9 @@ import Keys (fitbitKey) import Network.OAuth.OAuth2 -import GHC.Generics import Data.Aeson import Data.Aeson.Types+import GHC.Generics data Errors = SomeRandomError@@ -99,7 +99,7 @@ getApiToken mgr code = do result <- doJSONPostRequest mgr fitbitKey url $ body ++ [("state", state)] case result of- Right token -> return token+ Right token -> return token Left (e :: OAuth2Error Errors) -> Prelude.error $ show e where (url, body) = accessTokenUrl fitbitKey code@@ -108,7 +108,7 @@ getApiUser mgr token = do result <- authGetJSON mgr token [uri|https://api.fitbit.com/1/user/-/profile.json|] case result of- Right user -> return user+ Right user -> return user Left (e :: OAuth2Error Errors) -> Prelude.error $ show e convertQueryToMap :: Query -> M.Map B.ByteString B.ByteString
example/Github/test.hs view
@@ -1,17 +1,17 @@+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE DeriveGeneric #-} -- | Github API: http://developer.github.com/v3/oauth/ module Main where -import Control.Monad (mzero)-import qualified Data.ByteString as BS-import Data.Text (Text)-import qualified Data.Text as T-import qualified Data.Text.Encoding as T+import Control.Monad (mzero)+import qualified Data.ByteString as BS+import Data.Text (Text)+import qualified Data.Text as T+import qualified Data.Text.Encoding as T import Network.HTTP.Conduit import URI.ByteString import URI.ByteString.QQ@@ -21,9 +21,9 @@ import Keys -import GHC.Generics import Data.Aeson import Data.Aeson.Types+import GHC.Generics data Errors = SomeRandomError
example/Google/test.hs view
@@ -22,7 +22,6 @@ import qualified Data.Text as T import GHC.Generics import Network.HTTP.Conduit-import Prelude hiding (id) import System.Environment (getArgs) import URI.ByteString import URI.ByteString.QQ
+ example/Keys.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}++module Keys where++import Network.OAuth.OAuth2+import URI.ByteString.QQ++weiboKey :: OAuth2+weiboKey = OAuth2 { oauthClientId = "1962132691"+ , oauthClientSecret = "a2ad30383bdff9bcb12be6a3d30deeb1"+ , oauthCallback = Just [uri|http://127.0.0.1:9988/oauthCallback|]+ , oauthOAuthorizeEndpoint = [uri|https://api.weibo.com/oauth2/authorize|]+ , oauthAccessTokenEndpoint = [uri|https://api.weibo.com/oauth2/access_token|]+ }++-- | http://developer.github.com/v3/oauth/+githubKey :: OAuth2+githubKey = OAuth2 { oauthClientId = "bf86d338485a96a93c88"+ , oauthClientSecret = "a1c00dada665dc00aa6fafe0495c7c885f82d1ce"+ , oauthCallback = Just [uri|http://127.0.0.1:9988/githubCallback|]+ , oauthOAuthorizeEndpoint = [uri|https://github.com/login/oauth/authorize|]+ , oauthAccessTokenEndpoint = [uri|https://github.com/login/oauth/access_token|]+ }++-- | oauthCallback = Just "https://developers.google.com/oauthplayground"+googleKey :: OAuth2+googleKey = OAuth2 { oauthClientId = "886894027376.apps.googleusercontent.com"+ , oauthClientSecret = "27w98gwGB1h8N5a6JQ2bT_nm"+ , oauthCallback = Just [uri|http://127.0.0.1:9988/googleCallback|]+ , oauthOAuthorizeEndpoint = [uri|https://accounts.google.com/o/oauth2/auth|]+ , oauthAccessTokenEndpoint = [uri|https://www.googleapis.com/oauth2/v3/token|]+ }++{-+googleServiceAccount :: GoogleServiceAccount+googleServiceAccount = GoogleServiceAccount+ { saPrivateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDfu/z7ASRGrQus\ngWABWNX/EKgE8NlEUoHUeDWCTpXVj6PmiEDGyRaBNqR+6fQmwBMD/ItpISTGT31/\nfdqhKAdJOaYGNvWNYxx1uWYm0HP1YU7OkfFt8YgROu8gGz7+mdseXs/3bMhjlbk9\nPKmBiU46VRFWn7QaAp9YiVGghZp/LcawC+urmWdYnpkl+P4C4u+YtszmCMql842M\nT4nK8jlraxvUT/XM+97UXKwiGL8sPiPKGEthAFiXHNRVgnDibnJ2Etw7zPbZ6FB+\nvHL1SkuSnE7C358RTkuz56Tvf6ETgOGDIJ9HpZlgT6hrsWcAOh8UZ34Q5QzinhtP\n5BdgQxnjAgMBAAECggEBAJqfxFYA0v5ZZ+D/xMcJi1PtQgGwJqf2Ua3yqiB1iU4A\nKKkRb5syrG/+wK7Jp6gEROATcJHmixDXLQeohimsjWSJB/nxj8D4R1oBGN0oYYur\nhZhz+qQeMgieb1cEHYQ99tbFdfss3k0c09nDi+5vY3YjBomUdBcpytCYjqZez4im\nYoZjA6ijb5BduCQO2YOJpjiHbSrTV05Zr/xfHgafkbRx04jHA7OdJM6x5giRcMBn\n5BYNGPUkM6mGpeTeCZjTsOqvXcckuyR8P4wzoG3J8grnXgGR17d829t0bi5X/Jym\nwj5707lvIqu+WcfUfXDDYkZNhe5S9PWpT1uqaOGWElECgYEA738wclTGRNboYLsx\noT6HCOEKNFiY/4DMV65nugSnHBIl4amLwm4+0v669F8F28U2xhihp+RfPC4Fjd62\nfJ9hlYg6NiEqReJfXhs5OcvMBjmBFUR046/kOGyEj6D2yn3LTXoiWI8tHaS0Ucmu\nwF4Lp0/Rk/ofQrFB7q1a0OBeTakCgYEA7ya+IMo0t4lRYl+x8A7ouuJwnK1VjkkC\nkloCAEsnVznb2BsHJCsF0fPPU3f+kqhYqD0qQCfbwhYGragt603a/BqXnnQyE9T/\nnLqSGgctY/Xr06HbOr+aZ4QLKsTfD6IkTC82WAJD3J8hptLaqqDMORluI6xchKEL\nNUV8uvX7qqsCgYEAtKo/w5+LyZZMydusfrSKbPpGFmLXV7azb1lTShIEdbqC9Q5P\nLaa4obYjFgEwjC7jOOCP4fT2mpElA3aENtKMbJ7NOtQd7YXs5zKmIqFIEVIDvCVd\n//xJrv69qROF2A649IMzsZagNAJxPFlmCBtpsxcVRAmk10ycLg57uaHnwbECgYEA\nrtqn1rehVbQ74e5P3lI4TTP03ElLra2qCLFwlyBb0kXGfLo+PW6LYdeedcvdQQN/\nVvrpomDCJ6UNGvlFIa8Z9ovG4Z7ZYnCwt7odypQG1vhehazo6ope7WK4+3tYEEkf\nuugmFrEJRwy+gQfXwzuwNetnAQQr3PkWhcuZh+UELeMCgYAPoQK1LETBLFsUBWhh\nHc5VrnQBykn9GMRPXKR4pq5MK8p8o2QwfL5hNlZNeTKPWdP0QtMuIH9gxRuqvbrF\nXEO8RmZmoNtznh/Ax7+S62g72iLzF1/C8j3g8hWJUeGlU8LAJsZVTSma3t/vEQZM\nQqydJfwXJMTkh4nslALJZ9S4bw==\n-----END PRIVATE KEY-----\n"+ , saEmail = "testoauth2sa@api-project-886894027376.iam.gserviceaccount.com"+ , saScope = [ "https://www.googleapis.com/auth/prediction"+ , "https://www.googleapis.com/auth/drive"+ ]+ , saAuthEndpoint = "https://www.googleapis.com/oauth2/v4/token"+ , saExpireTime = Nothing+ , saDelegateEmail = Nothing+ }+-}++facebookKey :: OAuth2+facebookKey = OAuth2 { oauthClientId = "414630782030965"+ , oauthClientSecret = "0e648eae100da4d03f16594f231fc1d0"+ , oauthCallback = Just [uri|http://t.haskellcn.org/cb|]+ , oauthOAuthorizeEndpoint = [uri|https://www.facebook.com/dialog/oauth|]+ , oauthAccessTokenEndpoint = [uri|https://graph.facebook.com/v2.3/oauth/access_token|]+ }++doubanKey :: OAuth2+doubanKey = OAuth2 { oauthClientId = "02a914cf299ca31607fb3e6d7cd5e942"+ , oauthClientSecret = "3c0fdef13b0dd271"+ , oauthCallback = Just [uri|http://localhost:9999/oauthCallback|]+ , oauthOAuthorizeEndpoint = [uri|https://www.douban.com/service/auth2/auth|]+ , oauthAccessTokenEndpoint = [uri|https://www.douban.com/service/auth2/token|]+ }++fitbitKey :: OAuth2+fitbitKey = OAuth2 { oauthClientId = "229LN9"+ , oauthClientSecret = "2f4aa9a275c2d4bb9eb616efbd2c1311"+ , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]+ , oauthOAuthorizeEndpoint = [uri|https://www.fitbit.com/oauth2/authorize|]+ , oauthAccessTokenEndpoint = [uri|https://api.fitbit.com/oauth2/token|]+ }++stackexchangeKey :: OAuth2+stackexchangeKey = OAuth2 { oauthClientId = "7185"+ , oauthClientSecret = "K5hK)ET*dbFGFmNFVtqIyA(("+ , oauthCallback = Just [uri|http://c.haskellcn.org/cb|]+ , oauthOAuthorizeEndpoint = [uri|https://stackexchange.com/oauth|]+ , oauthAccessTokenEndpoint = [uri|https://stackexchange.com/oauth/access_token|]+ }++dropboxKey :: OAuth2+dropboxKey = OAuth2 { oauthClientId = "zbyxxox19gz6dgg"+ , oauthClientSecret = "ihhui0ysp85oi8s"+ , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]+ , oauthOAuthorizeEndpoint = [uri|https://www.dropbox.com/1/oauth2/authorize|]+ , oauthAccessTokenEndpoint = [uri|https://api.dropboxapi.com/oauth2/token|]+ }++oktaKey :: OAuth2+oktaKey = OAuth2 { oauthClientId = "0oad3popatwUIhWV40h7"+ , oauthClientSecret = "YFqXRjtsy7IYRbueiG2tcgHzhaawLccxqq5ruPfN"+ , oauthCallback = Just [uri|http://localhost:9988/oauth2/callback|]+ , oauthOAuthorizeEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/authorize|]+ , oauthAccessTokenEndpoint = [uri|https://dev-148986.oktapreview.com/oauth2/v1/token|]+ }
example/Okta/test.hs view
@@ -1,19 +1,19 @@+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE QuasiQuotes #-} module Main where +import Data.Aeson+import Data.Aeson.Types import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BSL import qualified Data.Text as T-import Data.Aeson-import Data.Aeson.Types+import GHC.Generics import Network.HTTP.Conduit import qualified Network.HTTP.Types as HT import URI.ByteString-import GHC.Generics import URI.ByteString.QQ import Network.OAuth.OAuth2
example/StackExchange/test.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} -- | https://api.stackexchange.com/docs/authentication
example/Weibo/test.hs view
@@ -1,7 +1,7 @@+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE DeriveGeneric #-} {- @@ -22,10 +22,10 @@ module Main where -import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as BSL-import qualified Data.Text as T-import qualified Data.Text.Encoding as T+import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as BSL+import qualified Data.Text as T+import qualified Data.Text.Encoding as T import Network.HTTP.Conduit import Network.OAuth.OAuth2 import URI.ByteString@@ -33,9 +33,9 @@ import Keys -import GHC.Generics import Data.Aeson import Data.Aeson.Types+import GHC.Generics data Errors = SomeRandomError
hoauth2.cabal view
@@ -1,6 +1,6 @@ Name: hoauth2 -- http://wiki.haskell.org/Package_versioning_policy-Version: 1.6.1+Version: 1.6.2 Synopsis: Haskell OAuth2 authentication client @@ -64,7 +64,7 @@ Build-Depends: base >= 4 && < 5, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, http-types >= 0.11 && < 0.12, aeson >= 0.11 && < 1.3, unordered-containers >= 0.2.5,@@ -86,11 +86,12 @@ Buildable: False main-is: Weibo/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -111,11 +112,12 @@ Buildable: False main-is: Google/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -136,11 +138,12 @@ Buildable: False main-is: Github/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -160,11 +163,12 @@ Buildable: False main-is: Douban/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -184,11 +188,12 @@ Buildable: False main-is: Facebook/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -208,13 +213,14 @@ Buildable: False main-is: Fitbit/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, http-types >= 0.11 && < 0.12, wai >= 3.2 && < 3.3, warp >= 3.2 && < 3.3,@@ -236,11 +242,12 @@ Buildable: False main-is: StackExchange/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -260,11 +267,12 @@ Buildable: False main-is: Dropbox/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,@@ -284,11 +292,12 @@ Buildable: False main-is: Okta/test.hs+ other-modules: Keys hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5, http-types >= 0.11 && < 0.12,- http-conduit >= 2.1 && < 2.3,+ http-conduit >= 2.1 && < 2.4, text >= 0.11 && < 1.3, bytestring >= 0.9 && < 0.11, uri-bytestring >= 0.2.3.1 && < 0.4,
src/Network/OAuth/OAuth2/AuthorizationRequest.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric #-} module Network.OAuth.OAuth2.AuthorizationRequest where
src/Network/OAuth/OAuth2/HttpClient.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} @@ -27,17 +28,17 @@ ) where import Data.Aeson-import qualified Data.ByteString.Char8 as BS-import qualified Data.ByteString.Lazy.Char8 as BSL-import qualified Data.HashMap.Strict as HM (fromList)+import qualified Data.ByteString.Char8 as BS+import qualified Data.ByteString.Lazy.Char8 as BSL+import qualified Data.HashMap.Strict as HM (fromList) import Data.Maybe-import qualified Data.Text.Encoding as T-import Network.HTTP.Conduit hiding (withManager)-import qualified Network.HTTP.Types as HT-import Network.HTTP.Types.URI (parseQuery)+import qualified Data.Text.Encoding as T+import Network.HTTP.Conduit+import qualified Network.HTTP.Types as HT+import Network.HTTP.Types.URI (parseQuery) import Network.OAuth.OAuth2.Internal-import URI.ByteString import qualified Network.OAuth.OAuth2.TokenRequest as TR+import URI.ByteString -------------------------------------------------- -- * Token management@@ -186,7 +187,7 @@ -> OAuth2Result err a parseResponseJSON (Left b) = Left b parseResponseJSON (Right b) = case eitherDecode b of- Left e -> Left $ mkDecodeOAuth2Error b e+ Left e -> Left $ mkDecodeOAuth2Error b e Right x -> Right x -- | Parses a @OAuth2Result BSL.ByteString@ that contains not JSON but a Query String
src/Network/OAuth/OAuth2/Internal.hs view
@@ -10,9 +10,8 @@ module Network.OAuth.OAuth2.Internal where -import Prelude hiding (error)-import Control.Arrow (second) import Control.Applicative+import Control.Arrow (second) import Control.Monad.Catch import Data.Aeson import Data.Aeson.Types@@ -23,12 +22,12 @@ import Data.Text (Text, pack) import Data.Text.Encoding import GHC.Generics-import URI.ByteString-import URI.ByteString.Aeson () import Lens.Micro import Lens.Micro.Extras import Network.HTTP.Conduit as C import qualified Network.HTTP.Types as H+import URI.ByteString+import URI.ByteString.Aeson () -------------------------------------------------- -- * Data Types@@ -69,9 +68,9 @@ data OAuth2Error a = OAuth2Error- { error :: Either Text a+ { error :: Either Text a , errorDescription :: Maybe Text- , errorUri :: Maybe (URIRef Absolute) }+ , errorUri :: Maybe (URIRef Absolute) } deriving (Show, Eq, Generic) instance FromJSON err => FromJSON (OAuth2Error err) where
src/Network/OAuth/OAuth2/TokenRequest.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric #-} module Network.OAuth.OAuth2.TokenRequest where