darcsden-1.1: src/DarcsDen/State/ForgotPassword.hs
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)