users-0.4.0.0: A library simplifying user management for web applications

Safe HaskellNone
LanguageHaskell2010

Web.Users.Types

Contents

Synopsis

The core type class

class (Show (UserId b), Eq (UserId b), ToJSON (UserId b), FromJSON (UserId b), Typeable (UserId b), PathPiece (UserId 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.

Associated Types

type UserId b :: * Source #

The storage backends userid

Methods

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 :: (FromJSON a, ToJSON a) => b -> UserId b -> IO (Maybe (User a)) Source #

Retrieve a user from the database

listUsers :: (FromJSON a, ToJSON a) => b -> Maybe (Int64, Int64) -> IO [(UserId b, User a)] Source #

List all users (unlimited, or limited)

countUsers :: b -> IO Int64 Source #

Count all users

createUser :: (FromJSON a, ToJSON a) => b -> User a -> IO (Either CreateUserError (UserId b)) Source #

Create a user

updateUser :: (FromJSON a, ToJSON a) => b -> UserId b -> (User a -> User a) -> IO (Either UpdateUserError ()) Source #

Modify a user

updateUserDetails :: (FromJSON a, ToJSON a) => b -> UserId b -> (a -> a) -> IO () Source #

Modify details of 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 :: FromJSON a => b -> Text -> (User a -> 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 :: (FromJSON a, ToJSON a) => b -> PasswordResetToken -> IO (Maybe (User a)) 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

data User a Source #

Core user datatype. Store custom information in the u_more field

Constructors

User 

Fields

Instances

Eq a => Eq (User a) Source # 

Methods

(==) :: User a -> User a -> Bool #

(/=) :: User a -> User a -> Bool #

Show a => Show (User a) Source # 

Methods

showsPrec :: Int -> User a -> ShowS #

show :: User a -> String #

showList :: [User a] -> ShowS #

ToJSON a => ToJSON (User a) Source # 
FromJSON a => FromJSON (User a) Source # 

data Password Source #

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 a -> User a Source #

Strip the password from the user type.

verifyPassword :: PasswordPlain -> Password -> Bool Source #

Check a plaintext password against a password

Token types

Error types

data CreateUserError Source #

Errors that happen on storage level during user creation

Constructors

UsernameOrEmailAlreadyTaken

Deprecated: Please use the more specific error constructors.

InvalidPassword 
UsernameAlreadyTaken 
EmailAlreadyTaken 
UsernameAndEmailAlreadyTaken 

data UpdateUserError Source #

Errors that happen on storage level during user updating

Constructors

UsernameOrEmailAlreadyExists

Deprecated: Please use the more descriptive constructors instead.

UsernameAlreadyExists 
EmailAlreadyExists 
UserDoesntExit

Deprecated: Please use UserDoesntExist instead.

UserDoesntExist 

data TokenError Source #

Errors that happen on storage level during token actions

Constructors

TokenInvalid