hoauth2 1.5.0 → 1.5.1
raw patch · 5 files changed
+90/−5 lines, 5 filesdep ~basenew-component:exe:test-oktaPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Network.OAuth.OAuth2.Internal: mkDecodeOAuth2Error :: ByteString -> String -> OAuth2Error err
Files
- example/Keys.hs.sample +8/−0
- example/Okta/test.hs +47/−0
- hoauth2.cabal +25/−1
- src/Network/OAuth/OAuth2/HttpClient.hs +3/−3
- src/Network/OAuth/OAuth2/Internal.hs +7/−1
example/Keys.hs.sample view
@@ -70,3 +70,11 @@ , oauthOAuthorizeEndpoint = [uri|https://www.dropbox.com/1/oauth2/authorize|] , oauthAccessTokenEndpoint = [uri|https://api.dropboxapi.com/oauth2/token|] }++oktaKey :: OAuth2+oktaKey = OAuth2 { oauthClientId = "xxx"+ , oauthClientSecret = "xxx"+ , 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
@@ -0,0 +1,47 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE QuasiQuotes #-}++module Main where++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 Network.HTTP.Conduit+import qualified Network.HTTP.Types as HT+import URI.ByteString+import GHC.Generics+import URI.ByteString.QQ++import Network.OAuth.OAuth2++import Keys++data Errors =+ SomeRandomError+ deriving (Show, Eq, Generic)++instance FromJSON Errors where+ parseJSON = genericParseJSON defaultOptions { constructorTagModifier = camelTo2 '_', allNullaryToStringTag = True }++main :: IO ()+main = do+ BS.putStrLn+ $ serializeURIRef'+ $ appendQueryParams [("scope", "openid profile"), ("state", "test-state-123")]+ $ authorizationUrl oktaKey+ putStrLn "visit the url and paste code here: "+ code <- getLine+ mgr <- newManager tlsManagerSettings+ token <- fetchAccessToken mgr oktaKey (ExchangeToken (T.pack code))+ print token+ case token of+ Right at -> getUserInfo mgr (accessToken at) >>= print+ Left _ -> putStrLn "no access token found yet"++getUserInfo :: Manager -> AccessToken -> IO (OAuth2Result Errors BSL.ByteString)+getUserInfo mgr token =+ authGetBS mgr token [uri|https://dev-148986.oktapreview.com/oauth2/v1/userinfo|]
hoauth2.cabal view
@@ -1,6 +1,6 @@ Name: hoauth2 -- http://wiki.haskell.org/Package_versioning_policy-Version: 1.5.0+Version: 1.5.1 Synopsis: Haskell OAuth2 authentication client @@ -260,6 +260,30 @@ Buildable: False main-is: Dropbox/test.hs+ hs-source-dirs: example+ default-language: Haskell2010+ build-depends: base >= 4.5 && < 5,+ http-types >= 0.9 && < 0.11,+ http-conduit >= 2.1 && < 2.3,+ text >= 0.11 && < 1.3,+ bytestring >= 0.9 && < 0.11,+ uri-bytestring >= 0.2.3.1 && < 0.4,+ aeson >= 0.11 && < 1.3,+ hoauth2++ if impl(ghc >= 6.12.0)+ ghc-options: -Wall -fwarn-tabs -funbox-strict-fields+ -fno-warn-unused-do-bind+ else+ ghc-options: -Wall -fwarn-tabs -funbox-strict-fields++Executable test-okta+ if flag(test)+ Buildable: True+ else+ Buildable: False++ main-is: Okta/test.hs hs-source-dirs: example default-language: Haskell2010 build-depends: base >= 4.5 && < 5,
src/Network/OAuth/OAuth2/HttpClient.hs view
@@ -185,9 +185,9 @@ => OAuth2Result err BSL.ByteString -> OAuth2Result err a parseResponseJSON (Left b) = Left b-parseResponseJSON (Right b) = case decode b of- Nothing -> Left (parseOAuth2Error b)- Just x -> Right x+parseResponseJSON (Right b) = case eitherDecode b of+ Left e -> Left $ mkDecodeOAuth2Error b e+ Right x -> Right x -- | Parses a @OAuth2Result BSL.ByteString@ that contains not JSON but a Query String parseResponseString :: FromJSON err => FromJSON a
src/Network/OAuth/OAuth2/Internal.hs view
@@ -88,8 +88,14 @@ parseOAuth2Error :: FromJSON err => BSL.ByteString -> OAuth2Error err parseOAuth2Error string =- either (\err -> OAuth2Error (Left "Decode error") (Just $ pack $ "Error: " <> err <> "\n Original Response:\n" <> show (decodeUtf8 $ BSL.toStrict string)) Nothing) id (eitherDecode string)+ either (mkDecodeOAuth2Error string) id (eitherDecode string) +mkDecodeOAuth2Error :: BSL.ByteString -> String -> OAuth2Error err+mkDecodeOAuth2Error response err =+ OAuth2Error+ (Left "Decode error")+ (Just $ pack $ "Error: " <> err <> "\n Original Response:\n" <> show (decodeUtf8 $ BSL.toStrict response))+ Nothing -------------------------------------------------- -- * Types Synonym