216 lines
10 KiB
Markdown
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 VS\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 VS\MijnBesluit\db\01_schema.sql
|
|
```
|
|
|
|
Moet het per se in PowerShell, dan kan het zo:
|
|
|
|
```powershell
|
|
Get-Content D:\MijnBesluit VS\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.
|