diff --git a/src/App/Page/Setup.purs b/src/App/Page/Setup.purs index 2d9347e..c76c363 100644 --- a/src/App/Page/Setup.purs +++ b/src/App/Page/Setup.purs @@ -2,9 +2,11 @@ -- | Users can also erase their account. module App.Page.Setup where -import Prelude (Unit, bind, discard, pure, ($), (<<<), (==)) +import Prelude (Unit, bind, discard, pure, ($), (<<<), (==), (<>), show, map) -import Data.Maybe (Maybe(..)) +import Data.Array as A +import Data.Maybe (Maybe(..), maybe) +import Data.Either (Either(..)) import Effect.Aff.Class (class MonadAff) import Halogen as H import Halogen.HTML as HH @@ -15,6 +17,8 @@ import Web.Event.Event (Event) import Bulma as Bulma +import App.Validation.Password as P + import App.Type.LogMessage import App.Message.AuthenticationDaemon as AuthD @@ -46,6 +50,7 @@ data NewPasswordInput data Action = HandleNewPassword NewPasswordInput | ChangePasswordAttempt Event + | SendChangePasswordMessage | CancelModal | DeleteAccountPopup | DeleteAccount @@ -142,10 +147,31 @@ handleAction = case _ of _ , "" -> H.raise $ Log $ UnableToSend "Confirm your password!" pass, confirmation -> do if pass == confirmation - then do H.raise $ Log $ SystemLog "Changing the password" - H.raise $ ChangePassword pass + then case P.password pass of + Left errors -> H.raise $ Log $ UnableToSend $ A.fold $ map show_error_password errors + Right _ -> handleAction SendChangePasswordMessage else H.raise $ Log $ UnableToSend "Confirmation differs from password" + SendChangePasswordMessage -> do + state <- H.get + H.raise $ Log $ SystemLog "Changing the password" + H.raise $ ChangePassword state.newPasswordForm.password + + + where + show_error_password :: P.Error -> String + show_error_password = case _ of + P.ParsingError {error, position} -> + "position " <> show position <> " " <> maybe "" string_error_password error + + string_error_password :: P.PasswordParsingError -> String + string_error_password = case _ of + P.CannotParse -> "cannot parse the password" + P.CannotEntirelyParse -> "cannot entirely parse the password" + P.Size min max n -> "password size should be between " + <> show min <> " and " <> show max + <> " (currently: " <> show n <> ")" + handleQuery :: forall a m. MonadAff m => Query a -> H.HalogenM State Action () Output m (Maybe a) handleQuery = case _ of -- For now, no message actually needs to be handled here.