yesod-auth-basic-0.1.0.3: Yesod Middleware for HTTP Basic Authentication
Safe HaskellNone
LanguageHaskell2010

Yesod.Auth.Http.Basic

Description

A Yesod middleware for <<http://tools.ietf.org/html/rfc1945#section-11.1 HTTP Basic Authentication>>

Performs a single authentication lookup per request and uses the <<https://github.com/yesodweb/yesod/blob/master/yesod-core/Yesod/Core/TypeCache.hs#L21 Yesod request-local caching>> mechanisms to store valid auth credentials found in the Authorization header.

The recommended way to use this module is to override the maybeAuthId to defaultMaybeBasicAuthId and supply a lookup function.

instance YesodAuth App where
    type AuthId App = Text
    getAuthId = return . Just . credsIdent
    maybeAuthId = defaultMaybeBasicAuthId checkCreds defaultAuthSettings
      where
        checkCreds = k s -> return $ (k == "user")
                                   && (s == "secret")

WWW-Authenticate challenges are currently not implemented. The current workaround is to override the error handler:

instance Yesod App where
  errorHandler NotAuthenticated = selectRep $
      provideRep $ do
        addHeader "WWW-Authenticate" $ T.concat
              [ "RedirectJSON realm="Realm", param="myurl.com"" ]
        -- send error response here
        ...
  errorHandler e = defaultErrorHandler e
  ...

Proper response status on failed authentication is not implemented. The current workaround is to override the Yesod typeclass isAuthorized function to handle required auth routes. e.g.

instance Yesod App where
  isAuthorized SecureR _   =
    maybeAuthId >>= return . maybe AuthenticationRequired (const Authorized)
  isAuthorized _ _         = Authorized
Synopsis

Drop in replace for maybeAuthId.

defaultMaybeBasicAuthId :: MonadHandler m => CheckCreds -> AuthSettings -> m (Maybe Text) Source #

Retrieve the AuthId using Authorization header.

If valid credentials are found and authorized the auth id is cached.

TODO use more general type than Text to represent the auth id

The AuthSettings currently do nothing

data AuthSettings Source #

Authentication Settings

Instances

Instances details
Show AuthSettings Source # 
Instance details

Defined in Yesod.Auth.Http.Basic

Eq AuthSettings Source # 
Instance details

Defined in Yesod.Auth.Http.Basic

defaultAuthSettings :: AuthSettings Source #

Ready-to-go AuthSettings which can be used