mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 10:21:52 +00:00
37 lines
1.3 KiB
Haskell
37 lines
1.3 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
module Handler.PasswordUpdate where
|
|
|
|
import Startlude hiding ( ask )
|
|
|
|
import Data.Aeson
|
|
import Yesod.Core hiding ( expiresAt )
|
|
import Yesod.Persist
|
|
|
|
|
|
import Foundation
|
|
import Lib.Error
|
|
import Lib.Password
|
|
import Model
|
|
|
|
patchPasswordR :: Handler ()
|
|
patchPasswordR = handleS9ErrT $ do
|
|
PasswordUpdateReq {..} <- requireCheckJsonBody
|
|
updateAccountRegistration rootAccountName passwordUpdateReqPassword
|
|
data PasswordUpdateReq = PasswordUpdateReq
|
|
{ passwordUpdateReqPassword :: Text
|
|
} deriving (Eq, Show)
|
|
instance FromJSON PasswordUpdateReq where
|
|
parseJSON = withObject "Update Password" $ \o -> do
|
|
passwordUpdateReqPassword <- o .: "value"
|
|
pure PasswordUpdateReq { .. }
|
|
|
|
updateAccountRegistration :: Text -> Text -> S9ErrT Handler ()
|
|
updateAccountRegistration acctName newPassword = do
|
|
now <- liftIO $ getCurrentTime
|
|
account <- (lift . runDB . getBy $ UniqueAccount acctName) >>= \case
|
|
Nothing -> throwE $ NotFoundE "account" acctName
|
|
Just a -> pure a
|
|
|
|
account' <- setPassword newPassword $ (entityVal account) { accountUpdatedAt = now }
|
|
(lift . runDB $ Yesod.Persist.replace (entityKey account) account')
|