# MijnBesluit Een platform om je beslissingen bij leven vast te leggen in een digitale kluis, en om berichten te versturen aan familie en vrienden — nu, op een datum in de toekomst, of pas nadat je er niet meer bent. Dit is de .NET-opzet: één solution in Visual Studio, een website, een zelfstandige SocketServer voor de app, en een MariaDB-database. ## Snel aan de praat ### 1. Database ``` mysql -u root -p < db\01_schema.sql mysql -u root -p < db\02_applicatiegebruiker.sql ``` Draaide er al een oudere versie? Draai dan ook `db\03_inloggen_met_code.sql`. Pas eerst het wachtwoord in `02_applicatiegebruiker.sql` aan. Wil je een andere schemanaam dan `mijnbesluit`, vervang die dan in beide scripts. ### 2. Sleutelbestand Bij ontwikkelen hoef je niets te doen: de website maakt `keys/masterkey.json` bij de eerste start zelf aan, omdat `Security:MaakSleutelbestandAlsHetOntbreekt` in `appsettings.Development.json` aanstaat. Voor een echte omgeving maak je het bestand eenmalig zelf aan en zet je die instelling **niet** aan: ```csharp MijnBesluit.Infrastructure.Security.FileMasterKeyProtector.CreateKeyFile(@"D:\MijnBesluit\keys\masterkey.json"); ``` Zonder dit bestand is geen enkele kluis meer te openen. Maak er een aparte back-up van, op een andere plek dan de database-back-up. Zie `docs/Beveiliging.md`. ### 3. Instellingen ``` dotnet user-secrets set "ConnectionStrings:MijnBesluit" "Server=localhost;Port=3306;Database=mijnbesluit;User Id=mijnbesluit_app;Password=..." --project src\MijnBesluit.Web dotnet user-secrets set "ConnectionStrings:MijnBesluit" "..." --project src\MijnBesluit.SocketServer ``` Tijdens ontwikkelen staat `Smtp:WriteToDiskInsteadOfSending` aan: uitnodigingsmails worden dan als html-bestand in `mail-uitgaand` gezet in plaats van verstuurd. Handig om de uitnodigingslink op te zoeken. ### 4. Draaien ``` dotnet run --project src\MijnBesluit.Web # de website dotnet run --project src\MijnBesluit.SocketServer -- --service # de server voor de app ``` In Visual Studio: stel beide projecten in als startprojecten (rechtsklik op de solution → *Opstartprojecten configureren* → *Meerdere startprojecten*). Geef het SocketServer-project `--service` mee als argument, anders verschijnt het beheerschermpje in plaats van de server. ### 5. De SocketServer als Windows-service ``` dotnet publish src\MijnBesluit.SocketServer -c Release -r win-x64 --self-contained false -o D:\MijnBesluit\publish ``` Klik daarna met de rechtermuisknop op `MijnBesluit.SocketServer.exe` en kies *Als administrator uitvoeren*. Er verschijnt een schermpje met een poortnummer en een knop **Install**. Is de service al geïnstalleerd, dan staat er **UnInstall**. Zie `docs/SocketServer-installeren.md`. Uitgebreidere uitleg met een rondje door alle schermen staat in `docs/Website-testen.md`. ## De regels controleren ``` dotnet run --project tests\MijnBesluit.SelfCheck ``` Dit loopt vijfenveertig scenario's door zonder database, webserver of packages: wachtwoorden, versleuteling, inloggen met een code per e-mail, de claim-overgang van een profiel, de overlijdensprocedure met bezwaartermijn, de kluistoegang van een nalatenschapsbeheerder, geplande berichten, de socketverbinding van app tot kluis, het draadgedrag van de server en het opslaan van het poortnummer. Het draait in een paar seconden — goed om even te doen voordat je iets aan de regels verandert. ## Mappen ``` db/ SQL voor MariaDB docs/ Architectuur, beveiliging, socketprotocol src/MijnBesluit.Domain Entiteiten en regels src/MijnBesluit.Application Handelingen en versleuteling src/MijnBesluit.Protocol Socketprotocol: framing, server, client src/MijnBesluit.Server Dispatcher en sessies voor de socketkant src/MijnBesluit.Infrastructure EF Core, sleutels, bestanden, e-mail src/MijnBesluit.ServiceBeheer De Windows-service installeren en verwijderen src/MijnBesluit.SocketServer De zelfstandige service, het beheerschermpje en de achtergrondtaken src/MijnBesluit.Web De website (Blazor) tests/MijnBesluit.SelfCheck Controle van de regels ``` ## .NET-versie Alles staat op `net8.0`; `MijnBesluit.SocketServer` op `net8.0-windows` en vast op 64 bits, omdat daar het WinForms-schermpje en de Windows-service in zitten. Wil je naar .NET 10 (zoals RenHDashboardMaui), pas dan `Directory.Build.props` en de `` in de csproj-bestanden aan. De MAUI-app op `net10.0-android` kan deze bibliotheken ook op net8.0 gewoon gebruiken. ## Naar de server Zie `docs/Uitrollen-naar-IIS.md` voor het uitrollen op een Windows-server met IIS en MariaDB. ## Wat er nog moet gebeuren Zie `docs/Volgende-stappen.md`. ## Waarom het is zoals het is Een paar keuzes zijn niet vanzelfsprekend en niet uit de code af te lezen. Die staan apart: - `docs/Identiteit.md` — dubbele profielen, claimen en samenvoegen. Waarom er niet op naam en geboortedatum wordt gezocht, en waarom de kleine versie van een profielfoto niet versleuteld is. - `docs/Beveiliging.md` — de drie lagen versleuteling en wat er gebeurt als het sleutelbestand weg is. - `docs/E-mail.md` — de eigen mailserver, SPF, DKIM en DMARC.