From 411de1be6c34dc85ba1c5d4e2758bddbf68f9e07 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Sat, 6 Jul 2024 12:38:57 +0200 Subject: [PATCH] Authentication: dedicated message for users without a validated email address. --- src/App/Container.purs | 5 + src/App/Message/AuthenticationDaemon.purs | 127 ++++++++++++---------- 2 files changed, 72 insertions(+), 60 deletions(-) diff --git a/src/App/Container.purs b/src/App/Container.purs index 17f68b1..6152fd3 100644 --- a/src/App/Container.purs +++ b/src/App/Container.purs @@ -545,6 +545,11 @@ handleAction = case _ of handleAction $ Log $ ErrorLog "TODO: received a GotPermissionCheck message." (AuthD.GotPermissionSet _) -> do handleAction $ Log $ ErrorLog "Received a GotPermissionSet message." + (AuthD.GotErrorEmailAddressNotValidated _) -> do + handleAction $ Log $ ErrorLog """ + Cannot authenticate: your email address hasn't been validated. + Please check your email inbox. + """ m@(AuthD.GotPasswordRecovered _) -> do handleAction $ Log $ SuccessLog "your new password is now valid." handleAction $ DispatchAuthDaemonMessage m diff --git a/src/App/Message/AuthenticationDaemon.purs b/src/App/Message/AuthenticationDaemon.purs index e00e9cc..f689633 100644 --- a/src/App/Message/AuthenticationDaemon.purs +++ b/src/App/Message/AuthenticationDaemon.purs @@ -344,6 +344,11 @@ type ErrorPasswordTooLong = {} codecGotErrorPasswordTooLong :: CA.JsonCodec ErrorPasswordTooLong codecGotErrorPasswordTooLong = CA.object "ErrorPasswordTooLong" (CAR.record {}) +{- 36 -} +type ErrorEmailAddressNotValidated = {} +codecGotErrorEmailAddressNotValidated :: CA.JsonCodec ErrorEmailAddressNotValidated +codecGotErrorEmailAddressNotValidated = CA.object "ErrorEmailAddressNotValidated" (CAR.record {}) + {- 250 -} -- type KeepAlive = { } codecGotKeepAlive ∷ CA.JsonCodec KeepAlive @@ -370,36 +375,37 @@ data RequestMessage -- All possible answers from the authentication daemon (authd). data AnswerMessage - = GotError Error -- 0 - | GotToken Logged -- 1 - | GotUser User -- 2 - | GotUserAdded UserAdded -- 3 - | GotUserEdited UserEdited -- 4 - | GotUserValidated UserValidated -- 5 - | GotUsersList UsersList -- 6 - | GotPermissionCheck PermissionCheck -- 7 - | GotPermissionSet PermissionSet -- 8 - | GotPasswordRecoverySent PasswordRecoverySent -- 9 - | GotPasswordRecovered PasswordRecovered -- 10 - | GotMatchingUsers MatchingUsers -- 11 - | GotUserDeleted UserDeleted -- 12 - | GotErrorMustBeAuthenticated ErrorMustBeAuthenticated -- 20 - | GotErrorAlreadyUsedLogin ErrorAlreadyUsedLogin -- 21 - | GotErrorMailRequired ErrorMailRequired -- 22 - | GotErrorUserNotFound ErrorUserNotFound -- 23 - | GotErrorPasswordTooShort ErrorPasswordTooShort -- 24 - | GotErrorInvalidCredentials ErrorInvalidCredentials -- 25 - | GotErrorRegistrationsClosed ErrorRegistrationsClosed -- 26 - | GotErrorInvalidLoginFormat ErrorInvalidLoginFormat -- 27 - | GotErrorInvalidEmailFormat ErrorInvalidEmailFormat -- 28 - | GotErrorAlreadyUsersInDB ErrorAlreadyUsersInDB -- 29 - | GotErrorReadOnlyProfileKeys ErrorReadOnlyProfileKeys -- 30 - | GotErrorInvalidActivationKey ErrorInvalidActivationKey -- 31 - | GotErrorUserAlreadyValidated ErrorUserAlreadyValidated -- 32 - | GotErrorCannotContactUser ErrorCannotContactUser -- 33 - | GotErrorInvalidRenewKey ErrorInvalidRenewKey -- 34 - | GotErrorPasswordTooLong ErrorPasswordTooLong -- 35 - | GotKeepAlive KeepAlive -- 250 + = GotError Error -- 0 + | GotToken Logged -- 1 + | GotUser User -- 2 + | GotUserAdded UserAdded -- 3 + | GotUserEdited UserEdited -- 4 + | GotUserValidated UserValidated -- 5 + | GotUsersList UsersList -- 6 + | GotPermissionCheck PermissionCheck -- 7 + | GotPermissionSet PermissionSet -- 8 + | GotPasswordRecoverySent PasswordRecoverySent -- 9 + | GotPasswordRecovered PasswordRecovered -- 10 + | GotMatchingUsers MatchingUsers -- 11 + | GotUserDeleted UserDeleted -- 12 + | GotErrorMustBeAuthenticated ErrorMustBeAuthenticated -- 20 + | GotErrorAlreadyUsedLogin ErrorAlreadyUsedLogin -- 21 + | GotErrorMailRequired ErrorMailRequired -- 22 + | GotErrorUserNotFound ErrorUserNotFound -- 23 + | GotErrorPasswordTooShort ErrorPasswordTooShort -- 24 + | GotErrorInvalidCredentials ErrorInvalidCredentials -- 25 + | GotErrorRegistrationsClosed ErrorRegistrationsClosed -- 26 + | GotErrorInvalidLoginFormat ErrorInvalidLoginFormat -- 27 + | GotErrorInvalidEmailFormat ErrorInvalidEmailFormat -- 28 + | GotErrorAlreadyUsersInDB ErrorAlreadyUsersInDB -- 29 + | GotErrorReadOnlyProfileKeys ErrorReadOnlyProfileKeys -- 30 + | GotErrorInvalidActivationKey ErrorInvalidActivationKey -- 31 + | GotErrorUserAlreadyValidated ErrorUserAlreadyValidated -- 32 + | GotErrorCannotContactUser ErrorCannotContactUser -- 33 + | GotErrorInvalidRenewKey ErrorInvalidRenewKey -- 34 + | GotErrorPasswordTooLong ErrorPasswordTooLong -- 35 + | GotErrorEmailAddressNotValidated ErrorEmailAddressNotValidated -- 36 + | GotKeepAlive KeepAlive -- 250 encode ∷ RequestMessage -> Tuple UInt String encode m = case m of @@ -433,36 +439,37 @@ data DecodeError decode :: Int -> String -> Either DecodeError AnswerMessage decode number string = case number of - 0 -> error_management codecGotError GotError - 1 -> error_management codecGotToken GotToken - 2 -> error_management codecGotUser GotUser - 3 -> error_management codecGotUserAdded GotUserAdded - 4 -> error_management codecGotUserEdited GotUserEdited - 5 -> error_management codecGotUserValidated GotUserValidated - 6 -> error_management codecGotUsersList GotUsersList - 7 -> error_management codecGotPermissionCheck GotPermissionCheck - 8 -> error_management codecGotPermissionSet GotPermissionSet - 9 -> error_management codecGotPasswordRecoverySent GotPasswordRecoverySent - 10 -> error_management codecGotPasswordRecovered GotPasswordRecovered - 11 -> error_management codecGotMatchingUsers GotMatchingUsers - 12 -> error_management codecGotUserDeleted GotUserDeleted - 20 -> error_management codecGotErrorMustBeAuthenticated GotErrorMustBeAuthenticated - 21 -> error_management codecGotErrorAlreadyUsedLogin GotErrorAlreadyUsedLogin - 22 -> error_management codecGotErrorMailRequired GotErrorMailRequired - 23 -> error_management codecGotErrorUserNotFound GotErrorUserNotFound - 24 -> error_management codecGotErrorPasswordTooShort GotErrorPasswordTooShort - 25 -> error_management codecGotErrorInvalidCredentials GotErrorInvalidCredentials - 26 -> error_management codecGotErrorRegistrationsClosed GotErrorRegistrationsClosed - 27 -> error_management codecGotErrorInvalidLoginFormat GotErrorInvalidLoginFormat - 28 -> error_management codecGotErrorInvalidEmailFormat GotErrorInvalidEmailFormat - 29 -> error_management codecGotErrorAlreadyUsersInDB GotErrorAlreadyUsersInDB - 30 -> error_management codecGotErrorReadOnlyProfileKeys GotErrorReadOnlyProfileKeys - 31 -> error_management codecGotErrorInvalidActivationKey GotErrorInvalidActivationKey - 32 -> error_management codecGotErrorUserAlreadyValidated GotErrorUserAlreadyValidated - 33 -> error_management codecGotErrorCannotContactUser GotErrorCannotContactUser - 34 -> error_management codecGotErrorInvalidRenewKey GotErrorInvalidRenewKey - 35 -> error_management codecGotErrorPasswordTooLong GotErrorPasswordTooLong - 250 -> error_management codecGotKeepAlive GotKeepAlive + 0 -> error_management codecGotError GotError + 1 -> error_management codecGotToken GotToken + 2 -> error_management codecGotUser GotUser + 3 -> error_management codecGotUserAdded GotUserAdded + 4 -> error_management codecGotUserEdited GotUserEdited + 5 -> error_management codecGotUserValidated GotUserValidated + 6 -> error_management codecGotUsersList GotUsersList + 7 -> error_management codecGotPermissionCheck GotPermissionCheck + 8 -> error_management codecGotPermissionSet GotPermissionSet + 9 -> error_management codecGotPasswordRecoverySent GotPasswordRecoverySent + 10 -> error_management codecGotPasswordRecovered GotPasswordRecovered + 11 -> error_management codecGotMatchingUsers GotMatchingUsers + 12 -> error_management codecGotUserDeleted GotUserDeleted + 20 -> error_management codecGotErrorMustBeAuthenticated GotErrorMustBeAuthenticated + 21 -> error_management codecGotErrorAlreadyUsedLogin GotErrorAlreadyUsedLogin + 22 -> error_management codecGotErrorMailRequired GotErrorMailRequired + 23 -> error_management codecGotErrorUserNotFound GotErrorUserNotFound + 24 -> error_management codecGotErrorPasswordTooShort GotErrorPasswordTooShort + 25 -> error_management codecGotErrorInvalidCredentials GotErrorInvalidCredentials + 26 -> error_management codecGotErrorRegistrationsClosed GotErrorRegistrationsClosed + 27 -> error_management codecGotErrorInvalidLoginFormat GotErrorInvalidLoginFormat + 28 -> error_management codecGotErrorInvalidEmailFormat GotErrorInvalidEmailFormat + 29 -> error_management codecGotErrorAlreadyUsersInDB GotErrorAlreadyUsersInDB + 30 -> error_management codecGotErrorReadOnlyProfileKeys GotErrorReadOnlyProfileKeys + 31 -> error_management codecGotErrorInvalidActivationKey GotErrorInvalidActivationKey + 32 -> error_management codecGotErrorUserAlreadyValidated GotErrorUserAlreadyValidated + 33 -> error_management codecGotErrorCannotContactUser GotErrorCannotContactUser + 34 -> error_management codecGotErrorInvalidRenewKey GotErrorInvalidRenewKey + 35 -> error_management codecGotErrorPasswordTooLong GotErrorPasswordTooLong + 36 -> error_management codecGotErrorEmailAddressNotValidated GotErrorEmailAddressNotValidated + 250 -> error_management codecGotKeepAlive GotKeepAlive _ -> Left UnknownNumber where -- Signature is required since the compiler's guess is wrong.