module Web.OIDC.Client.Discovery.Provider
(
Provider(..)
, Configuration(..)
) where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
import Data.Aeson (FromJSON, parseJSON, Value(..), (.:))
import Data.Text (Text)
import Jose.Jwk (Jwk)
import Web.OIDC.Client.Types (ScopeValue, IssuerLocation)
data Provider = Provider { configuration :: Configuration, jwkSet :: [Jwk] }
data Configuration = Configuration
{ issuer :: IssuerLocation
, authorizationEndpoint :: Text
, tokenEndpoint :: Text
, userinfoEndpoint :: Text
, revocationEndpoint :: Text
, jwksUri :: Text
, responseTypesSupported :: [Text]
, subjectTypesSupported :: [Text]
, idTokenSigningAlgValuesSupported :: [Text]
, scopesSupported :: [ScopeValue]
, tokenEndpointAuthMethodsSupported :: [Text]
, claimsSupported :: [Text]
}
deriving (Show, Eq)
instance FromJSON Configuration where
parseJSON (Object o) = Configuration
<$> o .: "issuer"
<*> o .: "authorization_endpoint"
<*> o .: "token_endpoint"
<*> o .: "userinfo_endpoint"
<*> o .: "revocation_endpoint"
<*> o .: "jwks_uri"
<*> o .: "response_types_supported"
<*> o .: "subject_types_supported"
<*> o .: "id_token_signing_alg_values_supported"
<*> o .: "scopes_supported"
<*> o .: "token_endpoint_auth_methods_supported"
<*> o .: "claims_supported"
parseJSON _ = mzero