wai-middleware-auth-0.2.5.1: Authentication middleware that secures WAI application
Safe HaskellNone
LanguageHaskell2010

Network.Wai.Middleware.Auth.Provider

Synopsis

Documentation

class AuthProvider ap where Source #

Core Authentication class, that allows for extensibility of the Auth middleware created by mkAuthMiddleware. Most important function is handleLogin, which implements the actual behavior of a provider. It's function arguments in order:

  • ap - Current provider.
  • Request - Request made to the login page
  • [Text] - Url suffix, i.e. last part of the Url split by '/' character, for instance ["login", "complete"] suffix in the example below.
  • Render ProviderUrl - Url renderer. It takes desired suffix as first argument and produces an absolute Url renderer. It can further be used to generate provider urls, for instance in Hamlet templates as will result in "https://approot.com/_auth_middleware/providerName/login/complete?user=Hamlet" or generate Urls for callbacks.

    @?{(ProviderUrl ["login", "complete"], [("user", Hamlet)])}
    
  • (AuthLoginState -> IO Response) - Action to call on a successfull login.
  • (Status -> ByteString -> IO Response) - Should be called in case of a failure with login process by supplying a status and a short error message.

Minimal complete definition

getProviderName, getProviderInfo, handleLogin

Methods

getProviderName :: ap -> Text Source #

Return a name for the provider. It will be used as a unique identifier for this provider. Argument should not be evaluated, as there are many places were undefined value is passed to this function.

Since: 0.1.0

getProviderInfo :: ap -> ProviderInfo Source #

Get info about the provider. It will be used in rendering the web page with a list of providers.

Since: 0.1.0

handleLogin :: ap -> Request -> [Text] -> Render ProviderUrl -> (AuthLoginState -> IO Response) -> (Status -> ByteString -> IO Response) -> IO Response Source #

Handle a login request in a custom manner. Can be used to render a login page with a form or redirect to some other authentication service like OpenID or OAuth2.

Since: 0.1.0

refreshLoginState :: ap -> Request -> AuthUser -> IO (Maybe (Request, AuthUser)) Source #

Check if the login state in a session is still valid, and have the opportunity to update it. Return Nothing to indicate a session has expired, and the user will be directed to re-authenticate.

The default implementation never invalidates a session once set.

Since: 0.2.3.0

Instances

Instances details
AuthProvider Provider Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

AuthProvider OAuth2 Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.OAuth2

AuthProvider OpenIDConnect Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.OIDC

AuthProvider Google Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.OAuth2.Google

AuthProvider Gitlab Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.OAuth2.Gitlab

AuthProvider Github Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.OAuth2.Github

Provider

data Provider where Source #

Generic authentication provider wrapper.

Constructors

Provider :: AuthProvider p => p -> Provider 

newtype ProviderUrl Source #

Data type for rendering Provider specific urls.

Constructors

ProviderUrl [Text] 

data ProviderInfo Source #

Provider information used for rendering a page with list of supported providers.

type Providers = HashMap Text Provider Source #

Collection of supported providers.

Provider Parsing

type ProviderParser = (Text, Value -> Parser Provider) Source #

Aeson parser for a provider with unique provider name (same as returned by getProviderName)

mkProviderParser :: forall ap. (FromJSON ap, AuthProvider ap) => Proxy ap -> ProviderParser Source #

First argument is not evaluated and is only needed for restricting the type.

parseProviders :: Object -> [ProviderParser] -> Result Providers Source #

Parse configuration for providers from an Object.

User

data AuthUser Source #

Representation of a user for a particular Provider.

Instances

Instances details
Eq AuthUser Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

Show AuthUser Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

Generic AuthUser Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

Associated Types

type Rep AuthUser :: Type -> Type #

Methods

from :: AuthUser -> Rep AuthUser x #

to :: Rep AuthUser x -> AuthUser #

Binary AuthUser Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

Methods

put :: AuthUser -> Put #

get :: Get AuthUser #

putList :: [AuthUser] -> Put #

type Rep AuthUser Source # 
Instance details

Defined in Network.Wai.Middleware.Auth.Provider

type Rep AuthUser = D1 ('MetaData "AuthUser" "Network.Wai.Middleware.Auth.Provider" "wai-middleware-auth-0.2.5.1-F1Bn5lnBBs5AFHcEWAgbkV" 'False) (C1 ('MetaCons "AuthUser" 'PrefixI 'True) (S1 ('MetaSel ('Just "authLoginState") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 UserIdentity) :*: (S1 ('MetaSel ('Just "authProviderName") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 ByteString) :*: S1 ('MetaSel ('Just "authLoginTime") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int64))))

type AuthLoginState = ByteString Source #

An arbitrary state that comes with logged in user, eg. a username, token or an email address.

type UserIdentity = ByteString Source #

Deprecated: In favor of AuthLoginState

Template

mkRouteRender :: Maybe Text -> Text -> [Text] -> Render Provider Source #

Create a url renderer for a provider.

providersTemplate Source #

Arguments

:: Maybe Text

Error message to display, if any.

-> Render Provider

Renderer function for provider urls.

-> Providers

List of available providers.

-> Builder 

Template for the providers page