packages feed

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)