124 lines
5.1 KiB
Markdown
124 lines
5.1 KiB
Markdown
# 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 VS\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 VS\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 `<TargetFramework>` 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.
|