Files
MijnBesluit/docs/Website-testen.md
T
2026-09-27 14:21:31 +00:00

216 lines
10 KiB
Markdown

# De website lokaal testen
Drie stappen, daarna draait hij.
> **Draaide de website al met een oudere versie?** Draai dan eerst
> `db\03_inloggen_met_code.sql`: die voegt de tabel voor de inlogcodes toe en haalt de
> wachtwoordkolom weg. Op een verse database is dat niet nodig.
## 1. Database aanmaken
Het makkelijkst gaat dit **in HeidiSQL**: maak verbinding, dan *Bestand → SQL-bestand uitvoeren*
(Ctrl+Shift+O) en kies `D:\MijnBesluit\db\01_schema.sql`. Geen gedoe met paden of shells.
Wil je het toch vanaf de opdrachtregel, let dan op: **dit werkt niet in PowerShell.** PowerShell
kent het teken `<` niet en geeft *"The '<' operator is reserved for future use."* Gebruik een
**cmd**-venster:
```
mysql -u root -p < D:\MijnBesluit\db\01_schema.sql
```
Moet het per se in PowerShell, dan kan het zo:
```powershell
Get-Content D:\MijnBesluit\db\01_schema.sql | mysql -u root -p
```
Staat `mysql` niet in je pad, gebruik dan het volledige pad — bij MariaDB is dat meestal
`"C:\Program Files\MariaDB 11.4\bin\mysql.exe"`. Bij nieuwere versies heet het programma
`mariadb.exe`; dat werkt precies hetzelfde.
Daarna hetzelfde voor `02_applicatiegebruiker.sql`, nadat je daarin `VERVANG_DIT_WACHTWOORD` hebt
aangepast. Wil je voor het testen gewoon je eigen MariaDB-account gebruiken, dan kun je dat tweede
script overslaan.
Beide scripts mogen meerdere keren gedraaid worden; bestaande tabellen en rechten blijven staan.
Controleer achteraf in HeidiSQL of de database `mijnbesluit` er staat met dertien tabellen.
## 2. Wachtwoord en connectiereeks
Bedenk eerst één wachtwoord voor de databasegebruiker. Dat moet op **twee** plekken hetzelfde
staan, en dat is waar het vaak misgaat.
**In de database.** Heb je `02_applicatiegebruiker.sql` gedraaid zonder
`VERVANG_DIT_WACHTWOORD` aan te passen, dan is dat nu letterlijk het wachtwoord. Zet het goed:
```sql
ALTER USER 'mijnbesluit_app'@'localhost' IDENTIFIED BY 'HIER-JOUW-WACHTWOORD';
FLUSH PRIVILEGES;
```
**In de applicatie.** Niet in `appsettings.json` (dat bestand gaat mee de broncodebeheer in),
maar in user secrets:
```
cd D:\MijnBesluit
dotnet user-secrets set "ConnectionStrings:MijnBesluit" "Server=localhost;Port=3306;Database=mijnbesluit;User Id=mijnbesluit_app;Password=HIER-JOUW-WACHTWOORD;" --project src\MijnBesluit.Web
```
Controleer met `dotnet user-secrets list --project src\MijnBesluit.Web` wat er echt staat.
In Visual Studio kan het ook: rechtsklik op het project → *Gebruikersgeheimen beheren*.
Wil je eerst alleen zien dát alles draait, zet dan tijdelijk je eigen `root`-account in de
reeks. Weet je dan dat het werkt, schakel daarna pas over op `mijnbesluit_app`.
## 3. Starten
Zorg dat het ontwikkelcertificaat van .NET vertrouwd is (eenmalig):
```
dotnet dev-certs https --trust
```
Start dan het project:
```
dotnet run --project src\MijnBesluit.Web --launch-profile https
```
Of in Visual Studio: zet `MijnBesluit.Web` als startproject en druk op F5. Kies het profiel
**https**; het inlogcookie is met opzet als *Secure* gemarkeerd en werkt dus niet over gewoon http.
De site komt op **https://localhost:7014**.
Het sleutelbestand hoef je niet zelf aan te maken: bij de eerste start zet de website
`keys/masterkey.json` neer in de uitvoermap, omdat dat in `appsettings.Development.json` aanstaat.
Gooi die map weg en alles wat je tijdens het testen in de kluis hebt gezet, is onleesbaar — dat is
precies de bedoeling.
## Een rondje door de applicatie
1. **Registreren** op `/registreren`. Vul je naam en e-mailadres in en klik op *Code aanvragen*.
Er is geen wachtwoord: je krijgt een code van zes cijfers toegestuurd. Tijdens ontwikkelen
wordt die niet verstuurd maar als html-bestand neergezet in
`src\MijnBesluit.Web\bin\Debug\net8.0\mail-uitgaand` &mdash; open het nieuwste bestand, lees de
code en vul hem in. Daarna heb je meteen een eigen profiel en familieproject.
2. **Kluis** → *Toevoegen*. Kies bijvoorbeeld *Uitvaartwens* en zet de vrijgave op
"Na mijn overlijden". Sla op en klik daarna op *Bekijken*: de inhoud wordt ter plekke
ontsleuteld. Kijk in HeidiSQL in de tabel `vault_items`: in de kolom `ciphertext` staat
onleesbare rommel, alleen `title` en `category` zijn leesbaar.
3. **Familie** → iemand toevoegen met een e-mailadres, daarna *Uitnodiging sturen*.
Er wordt niets verstuurd tijdens ontwikkelen: de mail komt als html-bestand in
`src\MijnBesluit.Web\bin\Debug\net8.0\mail-uitgaand`. Open het nieuwste bestand in je browser
en klik op de link — of kopieer de `/uitnodiging/...`-link naar een **privévenster**.
4. **De uitnodiging aannemen** in dat privévenster (anders log je jezelf uit). Er is niets in te
vullen: de link uit de e-mail is zelf al het bewijs dat je bij dat adres kunt. Ga daarna terug
naar je eerste venster, ververs *Familie*: het profiel staat nu op **Geclaimd** en je kunt er
niets meer aan wijzigen.
5. **Momenten** → *Nieuw bericht* voor die persoon, met "Pas als ik er niet meer ben". In het
privévenster zie je bij Momenten nog niets staan — zo hoort het.
6. **Nalatenschap** → wijs die persoon aan als beheerder. Zet het aantal meldingen op 1 en de
bezwaartermijn op 0 dagen om de procedure te kunnen doorlopen zonder drie accounts.
Meld jezelf vanuit het privévenster als overleden, en kijk wat er gebeurt.
Voor stap 6 heb je geen achtergrondtaak nodig zolang het aantal meldingen gehaald wordt en de
bezwaartermijn 0 is; de bevestiging gebeurt dan meteen. Staat er wél een termijn, dan is het de
achtergrondtaak in de SocketServer die dat later afrondt.
## Als er iets niet werkt
**"The '<' operator is reserved for future use"** — je zit in PowerShell. Zie stap 1.
**"'mysql' is not recognized as an internal or external command"** — het programma staat niet in
je pad. Gebruik het volledige pad naar `mysql.exe` of `mariadb.exe`, of draai het script in
HeidiSQL.
**Je krijgt geen e-mail met de code** — tijdens ontwikkelen wordt er niets verstuurd. Kijk in
`src\MijnBesluit.Web\bin\Debug\net8.0\mail-uitgaand`; daar staat de mail als html-bestand.
Wil je wel echt versturen, zet dan `Smtp:WriteToDiskInsteadOfSending` op `false` en vul de
SMTP-gegevens in (zie hieronder).
**"Deze code is verlopen of al gebruikt"** — een code werkt één keer en 15 minuten. Vraag een
nieuwe aan met de knop onder het codeveld.
**"Access denied for user 'root'@'localhost'"** — verkeerd wachtwoord. Let op: achter `-p` komt
géén spatie als je het wachtwoord meteen meegeeft; laat `-p` liever leeg, dan wordt er om
gevraagd.
**Je krijgt geen e-mail met de code** — tijdens ontwikkelen wordt er niets verstuurd. Kijk in
`src\MijnBesluit.Web\bin\Debug\net8.0\mail-uitgaand`; daar staat de mail als html-bestand.
Wil je wel echt versturen, zet dan `Smtp:WriteToDiskInsteadOfSending` op `false` en vul de
SMTP-gegevens in (zie hieronder).
**"Deze code is verlopen of al gebruikt"** — een code werkt één keer en 15 minuten. Vraag een
nieuwe aan met de knop onder het codeveld.
**"Access denied for user 'mijnbesluit_app'@'localhost' (using password: YES)"** — het
wachtwoord in user secrets is niet hetzelfde als dat in de database. Zie stap 2. Het ligt niet
aan `localhost` versus `127.0.0.1`: een account dat als `@localhost` is aangemaakt, werkt ook
over TCP. Test het account eerst in HeidiSQL met precies hetzelfde wachtwoord.
**"Unable to connect to any of the specified MySQL hosts"** — MariaDB draait niet, of de
connectiereeks klopt niet. Test de reeks eerst in HeidiSQL met hetzelfde account.
**"Geen connectiereeks 'MijnBesluit' gevonden"** — de user secret staat op het verkeerde project.
Controleer met `dotnet user-secrets list --project src\MijnBesluit.Web`.
**Je wordt na het inloggen meteen weer uitgelogd** — je draait over http in plaats van https.
Gebruik het profiel *https*.
**Waarschuwing over het certificaat in de browser** — `dotnet dev-certs https --trust` nog niet
gedraaid, of de browser moet opnieuw opgestart worden.
**Je ziet je eigen wijziging niet** — Blazor Server houdt een verbinding open. Ververs met
Ctrl+F5 als een scherm blijft hangen.
## De app erbij
De website heeft de SocketServer niet nodig; die is alleen voor de Android/iOS-app. Wil je beide
tegelijk draaien, start het SocketServer-project dan met het argument `--service`, anders krijg je
het installatieschermpje in plaats van de server. Zie `docs/SocketServer-installeren.md`.
## Echte e-mail versturen
Tijdens ontwikkelen worden mails weggeschreven naar een map. Wil je ze echt versturen, zet dan de
SMTP-gegevens in user secrets &mdash; niet in `appsettings.json`, want dat bestand gaat mee de
broncodebeheer in:
```
cd D:\MijnBesluit
dotnet user-secrets set "Smtp:Host" "mail.jouwprovider.nl" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:Port" "587" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:UseStartTls" "true" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:Username" "noreply@mijnbesluit.nl" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:Password" "HIER-HET-WACHTWOORD" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:FromAddress" "noreply@mijnbesluit.nl" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:FromName" "MijnBesluit" --project src\MijnBesluit.Web
dotnet user-secrets set "Smtp:WriteToDiskInsteadOfSending" "false" --project src\MijnBesluit.Web
```
### Veilig oefenen met echte adressen
Zodra je echt verstuurt, komen uitnodigingen ook echt aan. Wil je met de namen en adressen van je
eigen familie oefenen zonder ze lastig te vallen, zet dan:
```
dotnet user-secrets set "Smtp:RedirectAllTo" "jouw@eigenadres.nl" --project src\MijnBesluit.Web
```
Alle uitgaande post gaat dan naar dat ene adres. Het oorspronkelijke adres staat in het onderwerp
(`[TEST aan eva@example.nl] ...`) en bovenaan de mail, dus je ziet precies wie hem gekregen zou
hebben. Leeglaten &mdash; of de instelling verwijderen &mdash; en het gaat weer gewoon naar de
echte ontvanger.
Dezelfde regels gelden voor `--project src\MijnBesluit.SocketServer`; die verstuurt ook mail
(uitnodigingen, bezorgde berichten, meldingen over de nalatenschap).
Voor de SocketServer als Windows-service werkt user secrets niet &mdash; die draait onder
LocalSystem. Zet de instellingen daar in `appsettings.json` naast de exe, of beter: in
omgevingsvariabelen (`Smtp__Password`), zodat het wachtwoord niet in een bestand staat dat
meegekopieerd wordt.
Wil je later van provider wisselen, dan is dit de enige plek die verandert; in de code staat
nergens een mailserver.