-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A library simplifying user management for web applications -- @package users @version 0.1.0.0 module Web.Users.Types -- | Errors that happen on storage level during user creation data CreateUserError UsernameOrEmailAlreadyTaken :: CreateUserError InvalidPassword :: CreateUserError -- | Errors that happen on storage level during user updating data UpdateUserError UsernameOrEmailAlreadyExists :: UpdateUserError UserDoesntExit :: UpdateUserError -- | Errors that happen on storage level during token actions data TokenError TokenInvalid :: TokenError -- | 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. class (Show (UserId b), Eq (UserId b), ToJSON (UserId b), FromJSON (UserId b), Typeable (UserId b), PathPiece (UserId b)) => UserStorageBackend b where type family UserId b :: * updateUserDetails backend userId f = do { _ <- updateUser backend userId $ \ user -> user {u_more = f (u_more user)}; return () } initUserBackend :: UserStorageBackend b => b -> IO () destroyUserBackend :: UserStorageBackend b => b -> IO () housekeepBackend :: UserStorageBackend b => b -> IO () getUserById :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> UserId b -> IO (Maybe (User a)) listUsers :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> Maybe (Int64, Int64) -> IO [(UserId b, User a)] countUsers :: UserStorageBackend b => b -> IO Int64 createUser :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> User a -> IO (Either CreateUserError (UserId b)) updateUser :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> UserId b -> (User a -> User a) -> IO (Either UpdateUserError ()) updateUserDetails :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> UserId b -> (a -> a) -> IO () deleteUser :: UserStorageBackend b => b -> UserId b -> IO () authUser :: UserStorageBackend b => b -> Text -> Text -> NominalDiffTime -> IO (Maybe SessionId) verifySession :: UserStorageBackend b => b -> SessionId -> NominalDiffTime -> IO (Maybe (UserId b)) destroySession :: UserStorageBackend b => b -> SessionId -> IO () requestPasswordReset :: UserStorageBackend b => b -> UserId b -> NominalDiffTime -> IO PasswordResetToken verifyPasswordResetToken :: (UserStorageBackend b, FromJSON a, ToJSON a) => b -> PasswordResetToken -> IO (Maybe (User a)) applyNewPassword :: UserStorageBackend b => b -> PasswordResetToken -> Text -> IO (Either TokenError ()) requestActivationToken :: UserStorageBackend b => b -> UserId b -> NominalDiffTime -> IO ActivationToken activateUser :: UserStorageBackend b => b -> ActivationToken -> IO (Either TokenError ()) -- | A password reset token to send out to users via email or sms newtype PasswordResetToken PasswordResetToken :: Text -> PasswordResetToken unPasswordResetToken :: PasswordResetToken -> Text -- | An activation token to send out to users via email or sms newtype ActivationToken ActivationToken :: Text -> ActivationToken unActivationToken :: ActivationToken -> Text -- | A session id for identifying user sessions newtype SessionId SessionId :: Text -> SessionId unSessionId :: SessionId -> Text -- | Password representation. When updating or creating a user, set to -- PasswordPlain data Password PasswordPlain :: !Text -> Password PasswordHash :: !Text -> Password PasswordHidden :: Password -- | Core user datatype. Store custom information in the u_more -- field data User a User :: !Text -> !Text -> !Password -> !Bool -> !a -> User a u_name :: User a -> !Text u_email :: User a -> !Text u_password :: User a -> !Password u_active :: User a -> !Bool u_more :: User a -> !a instance Typeable PasswordResetToken instance Typeable ActivationToken instance Typeable SessionId instance Typeable Password instance Typeable User instance Show CreateUserError instance Eq CreateUserError instance Show UpdateUserError instance Eq UpdateUserError instance Show TokenError instance Eq TokenError instance Show PasswordResetToken instance Eq PasswordResetToken instance ToJSON PasswordResetToken instance FromJSON PasswordResetToken instance PathPiece PasswordResetToken instance Show ActivationToken instance Eq ActivationToken instance ToJSON ActivationToken instance FromJSON ActivationToken instance PathPiece ActivationToken instance Show SessionId instance Eq SessionId instance ToJSON SessionId instance FromJSON SessionId instance PathPiece SessionId instance Show Password instance Eq Password instance Show a => Show (User a) instance Eq a => Eq (User a) instance FromJSON a => FromJSON (User a) instance ToJSON a => ToJSON (User a)