namespace MijnBesluit.Protocol; /// De acties die de SocketServer kent. Eén vaste lijst, gedeeld door server en app. public static class SocketActions { public const string Ping = "ping"; /// Vraagt een inlogcode aan voor een bestaand account. public const string RequestLoginCode = "auth.request-code"; /// Logt in met het e-mailadres en de ontvangen code. public const string SignIn = "auth.signin"; public const string SignOut = "auth.signout"; /// Vraagt een code aan om een nieuw account te maken; naam wordt meegestuurd. public const string RequestRegisterCode = "auth.request-register-code"; /// Maakt het account aan met de ontvangen code. public const string Register = "auth.register"; public const string AcceptInvitation = "auth.accept-invitation"; /// Je eigen profiel opvragen en wijzigen. public const string OwnProfile = "account.profile"; public const string SaveOwnProfile = "account.profile-save"; /// Je inlogadres wijzigen: eerst een code naar het nieuwe adres, dan bevestigen. public const string RequestEmailChange = "account.email-request"; public const string ConfirmEmailChange = "account.email-confirm"; /// /// Je account opheffen: eerst opvragen wát er weggaat, dan een code per e-mail, dan weg. /// Onomkeerbaar, en daarom in drie stappen. Zie AccountOpheffenService. /// public const string DeleteAccountSummary = "account.delete-summary"; public const string RequestDeleteAccount = "account.delete-request"; public const string ConfirmDeleteAccount = "account.delete-confirm"; /// /// Heeft iemand een profiel voor mij aangemaakt? En het antwoord daarop: dat ben ik, of dat /// ben ik niet. Zie docs/Identiteit.md. /// public const string NotesAboutMe = "account.notes"; public const string AcceptNote = "account.notes-accept"; public const string DeclineNote = "account.notes-decline"; /// Alles wat het beginscherm nodig heeft, in één keer. public const string Overview = "home.overview"; /// Hoeveel dagen vooruit het overzicht kijkt. public const string SetLookahead = "home.lookahead"; /// De advertentie die nu op het overzicht mag staan, of geen. public const string Advertentie = "home.advertentie"; public const string ListFamilies = "family.list"; public const string ListMembers = "family.members"; public const string AddMember = "family.add-member"; public const string UpdatePerson = "family.update-person"; public const string Invite = "family.invite"; public const string RemoveMember = "family.remove-member"; public const string VaultList = "vault.list"; public const string VaultOpen = "vault.open"; public const string VaultSave = "vault.save"; public const string VaultUpdate = "vault.update"; public const string VaultDelete = "vault.delete"; // Bijlagen. Die gaan in stukken over de lijn, want een socketbericht is begrensd. public const string FileBegin = "vault.file-begin"; public const string FileChunk = "vault.file-chunk"; public const string FileEnd = "vault.file-end"; public const string FileCancel = "vault.file-cancel"; public const string FileList = "vault.file-list"; public const string FileRead = "vault.file-read"; public const string FileDelete = "vault.file-delete"; public const string Inbox = "message.inbox"; public const string Outbox = "message.outbox"; public const string MessageRead = "message.read"; public const string MessageReadSent = "message.read-sent"; public const string MessageCompose = "message.compose"; public const string MessageDraft = "message.draft"; public const string MessageUpdate = "message.update"; public const string MessageWithdraw = "message.withdraw"; public const string MessageDelete = "message.delete"; public const string DeclareDeath = "legacy.declare-death"; public const string ObjectDeath = "legacy.object"; public const string LegacyStatus = "legacy.status"; public const string AppointManager = "legacy.appoint-manager"; public const string RemoveManager = "legacy.remove-manager"; public const string FileListPerson = "vault.file-list-person"; public const string FileListMessage = "vault.file-list-message"; public const string FileProfilePhoto = "vault.file-profile"; /// Kluisitems die iemand rechtstreeks met jou heeft gedeeld, vooraf te bespreken. public const string VaultSharedWithMe = "vault.shared-with-me"; /// /// De soorten kluisitems die deze gebruiker te zien krijgt, met bij een door de beheerder gemaakte /// soort de velden van het formulier. Een oudere server kent dit niet; de app valt dan terug op /// de ingebouwde lijst. /// public const string VaultCategories = "vault.categories"; /// /// Eén soort op nummer, met zijn velden, ook als die soort niet meer wordt aangeboden. Voor het /// lezen van het item van een ander, waar de lijst van jezelf de soort niet hoeft te bevatten. /// public const string VaultCategory = "vault.category"; /// Nalatenschappen die aan jou zijn toevertrouwd, en wat daarvan is vrijgegeven. public const string LegacyEntrusted = "legacy.entrusted"; public const string LegacyEntrustedItems = "legacy.entrusted-items"; public const string LegacyManagers = "legacy.managers"; public const string LegacySettings = "legacy.settings"; /// Het toestel aanmelden voor meldingen, met het kenmerk van Firebase of APNs. public const string RegisterDevice = "push.register"; public const string UnregisterDevice = "push.unregister"; /// Een proefmelding naar je eigen toestellen, om te zien of de hele keten werkt. public const string TestDevice = "push.proef"; } /// Een verzoek van de app aan de SocketServer. public class SocketRequest { /// Meegestuurd in het antwoord, zodat de app verzoek en antwoord kan koppelen. public string RequestId { get; set; } = Guid.NewGuid().ToString("N"); /// Eén van . public string Action { get; set; } = string.Empty; /// Sessietoken uit . Leeg bij inloggen en registreren. public string? Token { get; set; } /// De gegevens van dit verzoek, als JSON-object. public System.Text.Json.JsonElement? Payload { get; set; } /// Versie van het protocol, zodat oude apps herkend kunnen worden. public int Version { get; set; } = 1; /// Vrije aanduiding van het toestel, komt in het logboek terecht. public string? Device { get; set; } } /// Het antwoord van de SocketServer. public class SocketResponse { public string RequestId { get; set; } = string.Empty; /// "Ok" of "Error" — dezelfde opzet als de bestaande RenH-socketserver. public string Status { get; set; } = "Ok"; /// Melding in gewone taal, bedoeld om aan de gebruiker te tonen. public string? Message { get; set; } /// /// Een kort kenmerk van de fout, voor de app om op te reageren. Alleen ingevuld waar de app /// iets anders moet doen dan de melding tonen - zie . Op de /// melding zelf sturen zou werken tot iemand er een komma in zet. /// public string? Code { get; set; } /// Resultaat van de actie, als JSON. public object? Payload { get; set; } public static SocketResponse Ok(string requestId, object? payload = null) => new() { RequestId = requestId, Status = "Ok", Payload = payload }; public static SocketResponse Error(string requestId, string message, string? code = null) => new() { RequestId = requestId, Status = "Error", Message = message, Code = code }; } /// Fouten waar de app zelf iets mee moet, los van de tekst die de gebruiker leest. public static class SocketFoutcodes { /// /// Het token is niet meer geldig. De app hoort dan niet "opnieuw proberen" aan te bieden - /// dat lukt nooit - maar het bewaarde token weg te gooien en naar het inlogscherm te gaan. /// public const string SessieVerlopen = "sessie-verlopen"; }