module DarcsDen.State.ForgotPassword where import Control.Monad import Control.Monad.Trans import System.Random import Database.Redis.Monad import DarcsDen.State.User import DarcsDen.State.Util createFpForUser :: MonadIO m => User -> m String createFpForUser u = withRedis $ do rs <- liftIO $ replicateM 50 (randomRIO ('a', 'z')) let k = "forgotpassword:"++rs set k (uName u) expire k (24*60*60) return rs getUserFromFp :: MonadIO m => String -> m (Maybe User) getUserFromFp str = withRedis $ do let k = "forgotpassword:"++str muid <- get k case muid of RBulk (Just un) -> getUser un _ -> return Nothing deleteFp :: MonadIO m => String -> m (Reply Int) deleteFp str = withRedis $ del ("forgotpassword:"++str)