packages feed

espial-0.0.7: src/Handler/AccountSettings.hs

module Handler.AccountSettings where

import Import
import qualified ClassyPrelude.Yesod as CP

getAccountSettingsR :: Handler Html
getAccountSettingsR = do
  (_, user) <- requireAuthPair
  let accountSettingsEl = "accountSettings" :: Text
  let accountSettings = toAccountSettingsForm user
  defaultLayout $ do
    $(widgetFile "user-settings")
    toWidgetBody [julius|
        app.userR = "@{UserR (UserNameP $ userName user)}";
        app.dat.accountSettings = #{ toJSON accountSettings } || []; 
    |]
    toWidget [julius|
      PS['Main'].renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)();
    |]

postEditAccountSettingsR :: Handler ()
postEditAccountSettingsR = do
  userId <- requireAuthId
  accountSettingsForm <- requireCheckJsonBody
  runDB (updateUserFromAccountSettingsForm userId accountSettingsForm)


getChangePasswordR :: Handler Html
getChangePasswordR = do
  void requireAuthId
  req <- getRequest
  defaultLayout $
    $(widgetFile "change-password")

postChangePasswordR :: Handler Html
postChangePasswordR = do
  userId <- requireAuthId
  mauthuname <- maybeAuthUsername
  mresult <- runInputPostResult ((,) <$> ireq textField "oldpassword" <*> ireq textField "newpassword")
  case (mauthuname, mresult) of
    (Just uname, FormSuccess (old, new)) -> do
      muser <- runDB (authenticatePassword uname old)
      case muser of
        Just _ -> do 
          new' <- liftIO (hashPassword new)
          void $ runDB (update userId [UserPasswordHash CP.=. new'])
          setMessage "Password Changed Successfully"
        _ -> setMessage "Incorrect Old Password"
    _ -> setMessage "Missing Required Fields"
  redirect ChangePasswordR