packages feed

oidc-client 0.5.1.0 → 0.6.0.0

raw patch · 8 files changed

+29/−13 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Web.OIDC.Client.Types: JwtExceptoin :: JwtError -> OpenIdException
+ Web.OIDC.Client.Tokens: [idTokenJwt] :: Tokens a -> Jwt
+ Web.OIDC.Client.Types: JwtException :: JwtError -> OpenIdException
- Web.OIDC.Client.Tokens: Tokens :: Text -> Text -> IdTokenClaims a -> Maybe Integer -> Maybe Text -> Tokens a
+ Web.OIDC.Client.Tokens: Tokens :: Text -> Text -> IdTokenClaims a -> Jwt -> Maybe Integer -> Maybe Text -> Tokens a

Files

CHANGELOG.md view
@@ -1,5 +1,15 @@ # ChangeLog +## [0.6.0.0]+### Added+- Preserve the raw JWT in the tokens record returned by `validate` ([#43](https://github.com/krdlab/haskell-oidc-client/pull/43))++### Fixed+- s/JwtExceptoin/JwtException/ ([#45](https://github.com/krdlab/haskell-oidc-client/pull/45))+- import data.monoid ([#46](https://github.com/krdlab/haskell-oidc-client/pull/46))+- s/Incosistent/Inconsistent/ ([#49](https://github.com/krdlab/haskell-oidc-client/pull/49))+- Use lenient decoding ([#50](https://github.com/krdlab/haskell-oidc-client/pull/50))+ ## [0.5.1.0] ### Fixed - fix: generate correct discovery url ([#39](https://github.com/krdlab/haskell-oidc-client/pull/39))
README.md view
@@ -1,6 +1,6 @@ # OpenID Connect 1.0 library for Relying Party -[![Circle CI](https://circleci.com/gh/krdlab/haskell-oidc-client.svg?style=svg)](https://circleci.com/gh/krdlab/haskell-oidc-client)+[![Testing](https://github.com/krdlab/haskell-oidc-client/workflows/Testing/badge.svg)](https://github.com/krdlab/haskell-oidc-client/actions?query=workflow%3ATesting)  This package supports implementing of an OpenID Connect 1.0 Relying Party. It's written in Haskell. 
oidc-client.cabal view
@@ -1,5 +1,5 @@ name:               oidc-client-version:            0.5.1.0+version:            0.6.0.0 synopsis:           OpenID Connect 1.0 library for RP homepage:           https://github.com/krdlab/haskell-oidc-client stability:          experimental
src/Web/OIDC/Client/CodeFlow.hs view
@@ -26,7 +26,8 @@ import           Data.Maybe                         (isNothing) import           Data.Monoid                        ((<>)) import           Data.Text                          (Text, pack, unpack)-import           Data.Text.Encoding                 (decodeUtf8)+import           Data.Text.Encoding                 (decodeUtf8With)+import           Data.Text.Encoding.Error           (lenientDecode) import           Data.Time.Clock.POSIX              (getPOSIXTime) import qualified Jose.Jwt                           as Jwt import           Network.HTTP.Client                (Manager, Request (..),@@ -82,7 +83,7 @@           result <- liftIO $ requestTokens oidc savedNonce code mgr           sessionStoreDelete store           return result-      else throwM $ ValidationException $ "Incosistent state: " <> decodeUtf8 stateFromIdP+      else throwM $ ValidationException $ "Inconsistent state: " <> decodeUtf8With lenientDecode stateFromIdP  -- | Make URL for Authorization Request. {-# WARNING getAuthenticationRequestUrl "This function doesn't manage state and nonce. Use prepareAuthenticationRequestUrl only unless your IdP doesn't support state and/or nonce." #-}@@ -150,7 +151,7 @@     now <- getCurrentIntDate     validateClaims         (P.issuer . P.configuration . oidcProvider $ oidc)-        (decodeUtf8 . oidcClientId $ oidc)+        (decodeUtf8With lenientDecode . oidcClientId $ oidc)         now         savedNonce         claims'@@ -158,6 +159,7 @@           accessToken  = I.accessToken tres         , tokenType    = I.tokenType tres         , idToken      = claims'+        , idTokenJwt   = jwt'         , expiresIn    = I.expiresIn tres         , refreshToken = I.refreshToken tres         }
src/Web/OIDC/Client/Discovery.hs view
@@ -22,6 +22,7 @@ import           Control.Monad.Catch                (catch, throwM) import           Data.Aeson                         (eitherDecode) import           Data.ByteString                    (append, isSuffixOf)+import           Data.Monoid                        ((<>)) import           Data.Text                          (pack) import qualified Jose.Jwk                           as Jwk import           Network.HTTP.Client                (Manager, Request, httpLbs,
src/Web/OIDC/Client/IdTokenFlow.hs view
@@ -20,7 +20,8 @@ import           Data.Maybe                         (isNothing, fromMaybe) import           Data.Monoid                        ((<>)) import           Data.Text                          (unpack)-import           Data.Text.Encoding                 (decodeUtf8)+import           Data.Text.Encoding                 (decodeUtf8With)+import           Data.Text.Encoding.Error           (lenientDecode) import qualified Jose.Jwt                           as Jwt import           Network.HTTP.Client                (getUri, setQueryString) import           Network.URI                        (URI)@@ -72,7 +73,7 @@                 $ throwIO                 $ ValidationException "Nonce does not match request."           pure idToken-      else liftIO $ throwIO $ ValidationException $ "Incosistent state: " <> decodeUtf8 stateFromIdP+      else liftIO $ throwIO $ ValidationException $ "Inconsistent state: " <> decodeUtf8With lenientDecode stateFromIdP  -- | Make URL for Authorization Request. {-# WARNING getAuthenticationRequestUrl "This function doesn't manage state and nonce. Use prepareAuthenticationRequestUrl only unless your IdP doesn't support state and/or nonce." #-}
src/Web/OIDC/Client/Tokens.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveGeneric     #-}+{-# LANGUAGE LambdaCase        #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE LambdaCase #-}  {-|     Module: Web.OIDC.Client.Tokens@@ -24,6 +24,7 @@ import           Data.ByteString                    (ByteString) import qualified Data.ByteString.Lazy.Char8         as BL import           Data.Either                        (partitionEithers)+import           Data.Monoid                        ((<>)) import           Data.Text                          (Text, pack) import           Data.Text.Encoding                 (encodeUtf8) import           GHC.Generics                       (Generic)@@ -38,6 +39,7 @@     { accessToken  :: Text     , tokenType    :: Text     , idToken      :: IdTokenClaims a+    , idTokenJwt   :: Jwt     , expiresIn    :: Maybe Integer     , refreshToken :: Maybe Text     }@@ -83,7 +85,7 @@         Right (Unsecured payload) -> liftIO . throwIO $ UnsecuredJwt payload         Right (Jws (_header, payload)) -> parsePayload payload         Right (Jwe (_header, payload)) -> parsePayload payload-        Left err -> liftIO . throwIO $ JwtExceptoin err+        Left err -> liftIO . throwIO $ JwtException err   where     tryDecode jwks token = \case         P.JwsAlgJson  alg -> liftIO $ Jwt.decode jwks (Just $ Jwt.JwsEncoding alg) token
src/Web/OIDC/Client/Types.hs view
@@ -53,7 +53,7 @@     | InternalHttpException HttpException     | JsonException Text     | UnsecuredJwt ByteString-    | JwtExceptoin JwtError+    | JwtException JwtError     | ValidationException Text   deriving (Show, Typeable) @@ -64,8 +64,8 @@ data SessionStore m = SessionStore     { sessionStoreGenerate :: m ByteString     -- ^ Generate state and nonce at random-    , sessionStoreSave :: State -> Nonce -> m ()-    , sessionStoreGet :: m (Maybe State, Maybe Nonce)-    , sessionStoreDelete :: m ()+    , sessionStoreSave     :: State -> Nonce -> m ()+    , sessionStoreGet      :: m (Maybe State, Maybe Nonce)+    , sessionStoreDelete   :: m ()     -- ^ Should delete at least nonce     }