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