lucienne-0.0.1: Lucienne/Controller/AddNewUser.hs
module Lucienne.Controller.AddNewUser
(addNewUser,doAddNewUser)
where
import Control.Applicative ((<$>))
import Lucienne.Controller.Imports
import qualified Lucienne.View.AddNewUser as View
import qualified Lucienne.Database as DB
import qualified Lucienne.Model.User as U
import qualified Lucienne.Url as Url
addNewUser :: User -> Controller Response
addNewUser user =
if U.mayAddUsers user then
getMessages >>= ok . toResponse . View.addNewUser
else
mzero
doAddNewUser :: User -> Controller Response
doAddNewUser user =
if U.mayAddUsers user then
do
decodeBody
Just username <- lookParameter "username"
Just password <- lookParameter "password"
Just checkPassword <- lookParameter "check_password"
mayAddUsers <- maybe False (const True) <$> lookParameter "may_add_users"
if password == checkPassword && not (null password)
then do
alreadyInUse <- lift $ DB.usernameExists username
if alreadyInUse
then seeOther $ withMessage UsernameExists Url.addNewUser
else do _ <- lift $ DB.addUser $ U.newUser username password mayAddUsers
seeHomeWith UserCreated
else seeOther $ concat [ withMessage CheckPassword Url.addNewUser
, "&name=",username]
else
mzero