From d17e29c1f537b0e4f52ca566d14a9473d92e35db Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Sat, 27 May 2023 00:58:18 +0200 Subject: [PATCH] Decode a few other message types. --- src/App/Messages/AuthenticationDaemon.purs | 57 +++++++++++++--------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/App/Messages/AuthenticationDaemon.purs b/src/App/Messages/AuthenticationDaemon.purs index 37e1d64..262cd36 100644 --- a/src/App/Messages/AuthenticationDaemon.purs +++ b/src/App/Messages/AuthenticationDaemon.purs @@ -49,10 +49,6 @@ import App.IPC as IPC -- Deletion can be triggered by either an admin or the user. Possible answers: - - 2 type User = { user :: UserPublic.UserPublic } - - 3 type UserAdded = { user :: UserPublic.UserPublic } - - 4 type UserEdited = { uid :: Int32 } - - 5 type UserValidated = { user :: UserPublic.UserPublic } - 6 type UsersList = { users :: Array(UserPublic.UserPublic) } - 7 type PermissionCheck = { user :: Int32, service :: String, resource :: String, permission :: AuthD::User::PermissionLevel } - 8 type PermissionSet = { user :: Int32, service :: String, resource :: String, permission :: AuthD::User::PermissionLevel } @@ -60,11 +56,16 @@ import App.IPC as IPC -} -- Basic message types. -type Error = { reason :: Maybe String } -type Token = { uid :: Int, token :: String } +-- TODO: note to myself: messages seem chaotic. Could be simpler. Should be simpler. +type Error = { reason :: Maybe String } +type Token = { uid :: Int, token :: String } type PasswordRecoverySent = { user :: UserPublic.UserPublic } -type PasswordRecovered = { user :: UserPublic.UserPublic } -type Contacts = { user :: Int, email :: Maybe Email.Email, phone :: Maybe Phone.Phone } +type PasswordRecovered = { user :: UserPublic.UserPublic } +type Contacts = { user :: Int, email :: Maybe Email.Email, phone :: Maybe Phone.Phone } +type User = { user :: UserPublic.UserPublic } +type UserAdded = { user :: UserPublic.UserPublic } +type UserEdited = { uid :: Int } +type UserValidated = { user :: UserPublic.UserPublic } type Password = String type GetToken = { login :: String, password :: String } @@ -79,10 +80,20 @@ codecGotToken ∷ CA.JsonCodec Token codecGotToken = CA.object "Token" (CAR.record { "uid": CA.int, "token": CA.string }) codecGotPasswordRecoverySent ∷ CA.JsonCodec PasswordRecoverySent codecGotPasswordRecoverySent = CA.object "PasswordRecoverySent" (CAR.record { user: UserPublic.codec }) +codecGotUser ∷ CA.JsonCodec User +codecGotUser = CA.object "User" (CAR.record { user: UserPublic.codec }) +codecGotUserAdded ∷ CA.JsonCodec UserAdded +codecGotUserAdded = CA.object "UserAdded" (CAR.record { user: UserPublic.codec }) +codecGotUserEdited ∷ CA.JsonCodec UserEdited +codecGotUserEdited = CA.object "UserEdited" (CAR.record { "uid": CA.int }) +codecGotUserValidated ∷ CA.JsonCodec UserValidated +codecGotUserValidated = CA.object "UserValidated" (CAR.record { user: UserPublic.codec }) codecGotPasswordRecovered ∷ CA.JsonCodec PasswordRecovered codecGotPasswordRecovered = CA.object "PasswordRecovered" (CAR.record { user: UserPublic.codec }) codecGotContacts ∷ CA.JsonCodec Contacts -codecGotContacts = CA.object "Contacts" (CAR.record { user: CA.int, email: CAR.optional Email.codec, phone: CAR.optional Phone.codec }) +codecGotContacts = CA.object "Contacts" (CAR.record { user: CA.int + , email: CAR.optional Email.codec + , phone: CAR.optional Phone.codec }) -- All possible requests. data RequestMessage @@ -107,12 +118,12 @@ data RequestMessage -- All possible answers from the authentication daemon (authd). data AnswerMessage - = GotError Error -- 0 - | GotToken Token -- 1 - -- | GotUser User -- 2 - -- | GotUserAdded UserAdded -- 3 - -- | GotUserEdited UserEdited -- 4 - -- | GotUserValidated UserValidated -- 5 + = GotError Error -- 0 + | GotToken Token -- 1 + | GotUser User -- 2 + | GotUserAdded UserAdded -- 3 + | GotUserEdited UserEdited -- 4 + | GotUserValidated UserValidated -- 5 -- | GotUsersList UsersList -- 6 -- | GotPermissionCheck PermissionCheck -- 7 -- | GotPermissionSet PermissionSet -- 8 @@ -150,16 +161,16 @@ data DecodeError decode :: Int -> String -> Either DecodeError AnswerMessage decode number string = case number of - 0 -> error_management codecGotError GotError - 1 -> error_management codecGotToken GotToken + 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 9 -> error_management codecGotPasswordRecoverySent GotPasswordRecoverySent - 10 -> error_management codecGotPasswordRecovered GotPasswordRecovered - 12 -> error_management codecGotContacts GotContacts + 10 -> error_management codecGotPasswordRecovered GotPasswordRecovered + 12 -> error_management codecGotContacts GotContacts _ -> Left UnknownNumber - -- 2 type User = { user :: UserPublic.UserPublic } - -- 3 type UserAdded = { user :: UserPublic.UserPublic } - -- 4 type UserEdited = { uid :: Int32 } - -- 5 type UserValidated = { user :: UserPublic.UserPublic } -- 6 type UsersList = { users :: Array(UserPublic.UserPublic) } -- 7 type PermissionCheck = { user :: Int32, service :: String, resource :: String, permission :: AuthD::User::PermissionLevel } -- 8 type PermissionSet = { user :: Int32, service :: String, resource :: String, permission :: AuthD::User::PermissionLevel }