{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE OverloadedStrings #-} {-| Module: Web.OIDC.Client.Types Maintainer: krdlab@gmail.com Stability: experimental -} module Web.OIDC.Client.Types ( ScopeValue , openId, profile, email, address, phone, offlineAccess , Scope , State , Nonce , Parameters , Code , IssuerLocation , OpenIdException(..) , SessionStore (..) ) where import Control.Exception (Exception) import Data.ByteString (ByteString) import Data.Text (Text) import Data.Typeable (Typeable) import Jose.Jwt (JwtError) import Network.HTTP.Client (HttpException) type IssuerLocation = Text type ScopeValue = Text openId, profile, email, address, phone, offlineAccess :: ScopeValue openId = "openid" profile = "profile" email = "email" address = "address" phone = "phone" offlineAccess = "offline_access" type Scope = [ScopeValue] type State = ByteString type Nonce = ByteString type Parameters = [(ByteString, Maybe ByteString)] type Code = ByteString data OpenIdException = DiscoveryException Text | InternalHttpException HttpException | JsonException Text | UnsecuredJwt ByteString | JwtExceptoin JwtError | ValidationException Text deriving (Show, Typeable) instance Exception OpenIdException -- | Manages state and nonce. -- (Maybe 'OIDC' should have them) 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 () -- ^ Should delete at least nonce }