- Tabellen vault_categories en vault_category_fields (db/21), startrijen handmatig (db/handmatig/21b) - VaultCategoryService met regels voor zichtbaarheid, gebruik en eigen velden - Beheer > Kluissoorten (/beheer/soorten) met gebruikstellers; soort in gebruik niet te verwijderen - Kluis en Nalatenschap (web en app) tonen soorten en eigen velden uit de database - Socketprotocol: vault.categories; GRANTs voor mijnbesluit_app in db/02 - db/20 herhaalbaar gemaakt - App versie 1.1 (versiecode 3) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014MGLqt1uKfNARQHut9ifcx
188 lines
8.6 KiB
C#
188 lines
8.6 KiB
C#
namespace MijnBesluit.Protocol;
|
|
|
|
/// <summary>De acties die de SocketServer kent. Eén vaste lijst, gedeeld door server en app.</summary>
|
|
public static class SocketActions
|
|
{
|
|
public const string Ping = "ping";
|
|
|
|
/// <summary>Vraagt een inlogcode aan voor een bestaand account.</summary>
|
|
public const string RequestLoginCode = "auth.request-code";
|
|
|
|
/// <summary>Logt in met het e-mailadres en de ontvangen code.</summary>
|
|
public const string SignIn = "auth.signin";
|
|
|
|
public const string SignOut = "auth.signout";
|
|
|
|
/// <summary>Vraagt een code aan om een nieuw account te maken; naam wordt meegestuurd.</summary>
|
|
public const string RequestRegisterCode = "auth.request-register-code";
|
|
|
|
/// <summary>Maakt het account aan met de ontvangen code.</summary>
|
|
public const string Register = "auth.register";
|
|
|
|
public const string AcceptInvitation = "auth.accept-invitation";
|
|
|
|
/// <summary>Je eigen profiel opvragen en wijzigen.</summary>
|
|
public const string OwnProfile = "account.profile";
|
|
public const string SaveOwnProfile = "account.profile-save";
|
|
|
|
/// <summary>Je inlogadres wijzigen: eerst een code naar het nieuwe adres, dan bevestigen.</summary>
|
|
public const string RequestEmailChange = "account.email-request";
|
|
public const string ConfirmEmailChange = "account.email-confirm";
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public const string DeleteAccountSummary = "account.delete-summary";
|
|
public const string RequestDeleteAccount = "account.delete-request";
|
|
public const string ConfirmDeleteAccount = "account.delete-confirm";
|
|
|
|
/// <summary>
|
|
/// Heeft iemand een profiel voor mij aangemaakt? En het antwoord daarop: dat ben ik, of dat
|
|
/// ben ik niet. Zie docs/Identiteit.md.
|
|
/// </summary>
|
|
public const string NotesAboutMe = "account.notes";
|
|
public const string AcceptNote = "account.notes-accept";
|
|
public const string DeclineNote = "account.notes-decline";
|
|
|
|
/// <summary>Alles wat het beginscherm nodig heeft, in één keer.</summary>
|
|
public const string Overview = "home.overview";
|
|
|
|
/// <summary>Hoeveel dagen vooruit het overzicht kijkt.</summary>
|
|
public const string SetLookahead = "home.lookahead";
|
|
|
|
/// <summary>De advertentie die nu op het overzicht mag staan, of geen.</summary>
|
|
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";
|
|
|
|
/// <summary>Kluisitems die iemand rechtstreeks met jou heeft gedeeld, vooraf te bespreken.</summary>
|
|
public const string VaultSharedWithMe = "vault.shared-with-me";
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public const string VaultCategories = "vault.categories";
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public const string VaultCategory = "vault.category";
|
|
|
|
/// <summary>Nalatenschappen die aan jou zijn toevertrouwd, en wat daarvan is vrijgegeven.</summary>
|
|
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";
|
|
|
|
/// <summary>Het toestel aanmelden voor meldingen, met het kenmerk van Firebase of APNs.</summary>
|
|
public const string RegisterDevice = "push.register";
|
|
public const string UnregisterDevice = "push.unregister";
|
|
|
|
/// <summary>Een proefmelding naar je eigen toestellen, om te zien of de hele keten werkt.</summary>
|
|
public const string TestDevice = "push.proef";
|
|
}
|
|
|
|
/// <summary>Een verzoek van de app aan de SocketServer.</summary>
|
|
public class SocketRequest
|
|
{
|
|
/// <summary>Meegestuurd in het antwoord, zodat de app verzoek en antwoord kan koppelen.</summary>
|
|
public string RequestId { get; set; } = Guid.NewGuid().ToString("N");
|
|
|
|
/// <summary>Eén van <see cref="SocketActions"/>.</summary>
|
|
public string Action { get; set; } = string.Empty;
|
|
|
|
/// <summary>Sessietoken uit <see cref="SocketActions.SignIn"/>. Leeg bij inloggen en registreren.</summary>
|
|
public string? Token { get; set; }
|
|
|
|
/// <summary>De gegevens van dit verzoek, als JSON-object.</summary>
|
|
public System.Text.Json.JsonElement? Payload { get; set; }
|
|
|
|
/// <summary>Versie van het protocol, zodat oude apps herkend kunnen worden.</summary>
|
|
public int Version { get; set; } = 1;
|
|
|
|
/// <summary>Vrije aanduiding van het toestel, komt in het logboek terecht.</summary>
|
|
public string? Device { get; set; }
|
|
}
|
|
|
|
/// <summary>Het antwoord van de SocketServer.</summary>
|
|
public class SocketResponse
|
|
{
|
|
public string RequestId { get; set; } = string.Empty;
|
|
|
|
/// <summary>"Ok" of "Error" — dezelfde opzet als de bestaande RenH-socketserver.</summary>
|
|
public string Status { get; set; } = "Ok";
|
|
|
|
/// <summary>Melding in gewone taal, bedoeld om aan de gebruiker te tonen.</summary>
|
|
public string? Message { get; set; }
|
|
|
|
/// <summary>
|
|
/// 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 <see cref="SocketFoutcodes"/>. Op de
|
|
/// melding zelf sturen zou werken tot iemand er een komma in zet.
|
|
/// </summary>
|
|
public string? Code { get; set; }
|
|
|
|
/// <summary>Resultaat van de actie, als JSON.</summary>
|
|
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 };
|
|
}
|
|
|
|
/// <summary>Fouten waar de app zelf iets mee moet, los van de tekst die de gebruiker leest.</summary>
|
|
public static class SocketFoutcodes
|
|
{
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
public const string SessieVerlopen = "sessie-verlopen";
|
|
}
|