module Handler.Reactivate where import Import import Control.Monad import Data.Text.Encoding getReactivateR :: Handler Html getReactivateR = do (reactivateWidget, enctype) <- generateFormPost reactivateForm defaultLayout $ do setTitle "Eidolon :: Reactivate account" $(widgetFile "reactivate") postReactivateR :: Handler Html postReactivateR = do ((result, reactivateWidget), enctype) <- runFormPost reactivateForm case result of FormSuccess temp -> do tempUsers <- runDB $ selectList [UserEmail ==. temp] [] case tempUsers of users -> do userTokens <- foldM (\userTokens (Entity userId user) -> do token <- liftIO $ generateString -- aId <- runDB $ insert $ Activator token user -- runDB $ delete userId tId <- runDB $ insert $ Token (encodeUtf8 token) "activate" (Just userId) return $ (user, token) : userTokens ) [] users sent <- foldM (\sent (user, token) -> case sent of False -> return False True -> do activateLink <- ($ ActivateR token) <$> getUrlRender sendMail (userEmail user) "Reset your password" $ [shamlet|

Welcome again to Eidolon To reset your password visit the following link: #{activateLink} See you soon! |] return True ) True userTokens setMessage "Your new passwort will arrive in your e-mail" redirect $ HomeR [] -> do setMessage "No user mith this Email" redirect $ LoginR reactivateForm :: Form Text reactivateForm = renderDivs $ (\a -> a) <$> areq emailField "Email" Nothing