Eerste commit
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
# 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` — 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 — 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 — of de instelling verwijderen — 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 — 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.
|
||||
Reference in New Issue
Block a user