module Handler.Register where import Import import Yesod.Form.Bootstrap3 import Handler.Home (getHomeR) getRegisterR :: Handler Html getRegisterR = do (registerWidget, registerEnctype) <- generateFormPost registerForm defaultLayout $ do setTitle "Register" [whamlet|

Register
^{registerWidget} |] postRegisterR :: Handler Html postRegisterR = do ((result,registerWidget), registerEnctype) <- runFormPost registerForm let again err = defaultLayout $ do setTitle "Register" [whamlet|
Error: #{err}

Register ^{registerWidget} |] case result of FormSuccess (user,mail) -> do _ <- runDB $ do uid <- insert user insert $ Email mail uid Nothing getHomeR FormFailure (err:_) -> again err _ -> again "Invalid input" registerForm :: Html -> MForm Handler (FormResult (User,Text), Widget) registerForm extra = do (nameRes, nameView) <- mreq textField ((withAutofocus . withPlaceholder "Username") (bfs ("Username" :: Text))) Nothing (pwRes, pwView) <- mreq passwordField (bfs ("Password" :: Text)) Nothing (pwcRes, pwcView) <- mreq passwordField (bfs ("Confirm password" :: Text)) Nothing (emailRes, emailView) <- mreq emailField (withPlaceholder "User@mail" (bfs ("Email" :: Text))) Nothing time <- lift $ liftIO getCurrentTime let confirmRes = case pwRes of FormSuccess x -> case pwcRes of FormSuccess y -> if x == y then FormSuccess x else FormFailure ["Passwords did not match"] a -> a a -> a let registerRes = (,) <$> (User <$> nameRes <*> (Just <$> confirmRes) <*> (FormSuccess time)) <*> emailRes let widget = [whamlet| #{extra}

Username ^{fvInput nameView}

Password ^{fvInput pwView}

Confirm password ^{fvInput pwcView}

Email ^{fvInput emailView} |] return (registerRes, widget)