packages feed

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 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