module Hope.User (module Hope.User.Types, userLogin, userLogout, userAdd, getUserID, getUsername, getUserInfo, doesUserExist, removeUser, editUser, getAllUsers, countUsers) where import Hope.DatabaseT import Hope.Module import Hope.Session import Hope.User.Operations import Hope.User.Types import Hope.Util import Control.Monad (liftM) userLogin :: (MonadCGI m, MonadDatabase m, MonadSession m) => Username -> Password -> m (Maybe UserID) userLogin u p = do muid <- authenticate u p maybe endCurrentSession setCurrentUserID muid return muid userLogout :: Hope () userLogout = endCurrentSession -- | Tries to add a new user. Returns the 'UserID' of the new -- user if successful. If there is already a user with the given -- username, no user is added, and 'Nothing' is returned. -- -- Also logs in as the new user if it was created by an anonymous user. userAdd :: (MonadCGI m, MonadDatabase m, MonadSession m) => Username -> Password -> m (Maybe UserID) userAdd u p = do muid <- addUser u p case muid of Nothing -> return () Just uid -> whenMonoid (liftM not isLoggedIn) $ setCurrentUserID uid return muid setCurrentUserID :: (MonadCGI m, MonadDatabase m, MonadSession m) => UserID -> m () setCurrentUserID uid = do base <- baseURI setCurrentSessionUser base uid