packages feed

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