Safe Haskell | None |
---|---|
Language | Haskell2010 |
- class IsUserBackend b => UserStorageBackend b where
- data User = User {}
- data Password
- makePassword :: PasswordPlain -> Password
- hidePassword :: User -> User
- newtype PasswordPlain = PasswordPlain {}
- verifyPassword :: PasswordPlain -> Password -> Bool
- data UserField
- newtype PasswordResetToken = PasswordResetToken {}
- newtype ActivationToken = ActivationToken {}
- newtype SessionId = SessionId {
- unSessionId :: Text
- data CreateUserError
- data UpdateUserError
- data TokenError = TokenInvalid
- data SortBy t
The core type class
class IsUserBackend b => UserStorageBackend b where Source #
An abstract backend for managing users. A backend library should implement the interface and an end user should build applications on top of this interface.
initUserBackend, destroyUserBackend, housekeepBackend, getUserIdByName, getUserById, listUsers, countUsers, createUser, updateUser, deleteUser, authUser, withAuthUser, verifySession, createSession, destroySession, requestPasswordReset, verifyPasswordResetToken, applyNewPassword, requestActivationToken, activateUser
initUserBackend :: b -> IO () Source #
Initialise the backend. Call once on application launch to for example create missing database tables
destroyUserBackend :: b -> IO () Source #
Destory the backend. WARNING: This is only for testing! It deletes all tables and data.
housekeepBackend :: b -> IO () Source #
This cleans up invalid sessions and other tokens. Call periodically as needed.
getUserIdByName :: b -> Text -> IO (Maybe (UserId b)) Source #
Retrieve a user id from the database
getUserById :: b -> UserId b -> IO (Maybe User) Source #
Retrieve a user from the database
listUsers :: b -> Maybe (Int64, Int64) -> SortBy UserField -> IO [(UserId b, User)] Source #
List all users unlimited, or limited, sorted by a UserField
countUsers :: b -> IO Int64 Source #
Count all users
createUser :: b -> User -> IO (Either CreateUserError (UserId b)) Source #
Create a user
updateUser :: b -> UserId b -> (User -> User) -> IO (Either UpdateUserError ()) Source #
Modify a user
deleteUser :: b -> UserId b -> IO () Source #
Delete a user
authUser :: b -> Text -> PasswordPlain -> NominalDiffTime -> IO (Maybe SessionId) Source #
Authentificate a user using username/email and password. The NominalDiffTime
describes the session duration
withAuthUser :: b -> Text -> (User -> Bool) -> (UserId b -> IO r) -> IO (Maybe r) Source #
Authentificate a user and execute a single action.
verifySession :: b -> SessionId -> NominalDiffTime -> IO (Maybe (UserId b)) Source #
Verify a SessionId
. The session duration can be extended by NominalDiffTime
createSession :: b -> UserId b -> NominalDiffTime -> IO (Maybe SessionId) Source #
Force create a session for a user. This is useful for support/admin login. If the user does not exist, this will fail.
destroySession :: b -> SessionId -> IO () Source #
Destroy a session
requestPasswordReset :: b -> UserId b -> NominalDiffTime -> IO PasswordResetToken Source #
Request a PasswordResetToken
for a given user, valid for NominalDiffTime
verifyPasswordResetToken :: b -> PasswordResetToken -> IO (Maybe User) Source #
Check if a PasswordResetToken
is still valid and retrieve the owner of it
applyNewPassword :: b -> PasswordResetToken -> Password -> IO (Either TokenError ()) Source #
Apply a new password to the owner of PasswordResetToken
iff the token is still valid
requestActivationToken :: b -> UserId b -> NominalDiffTime -> IO ActivationToken Source #
Request an ActivationToken
for a given user, valid for NominalDiffTime
activateUser :: b -> ActivationToken -> IO (Either TokenError ()) Source #
Activate the owner of ActivationToken
iff the token is still valid
User representation
Core user datatype
Password representation. When updating or creating a user, use makePassword
to create one.
The implementation details of this type are ONLY for use in backend implementations.
makePassword :: PasswordPlain -> Password Source #
Construct a password from plaintext by hashing it
hidePassword :: User -> User Source #
Strip the password from the user type.
newtype PasswordPlain Source #
Plaintext passsword. Used for authentification.
verifyPassword :: PasswordPlain -> Password -> Bool Source #
Check a plaintext password against a password
Fields of user datatype
Token types
newtype PasswordResetToken Source #
A password reset token to send out to users via email or sms
newtype ActivationToken Source #
An activation token to send out to users via email or sms
A session id for identifying user sessions
Error types
data CreateUserError Source #
Errors that happen on storage level during user creation
data UpdateUserError Source #
Errors that happen on storage level during user updating
data TokenError Source #
Errors that happen on storage level during token actions