# Ansluta till holger-konsolen över Tailscale
Konsolen körs på Henriks ThinkPad och exponeras **bara inom tailnätet**
(`tailscale serve`, inte Funnel) — den är alltså inte nåbar från internet, och
det finns ingen publik URL. För att nå den måste din maskin vara en nod i
samma tailnet.
**URL:** <https://henrik-thinkpad-t14s-gen-6.tail4eceda.ts.net>
---
## Steg 1 — Henrik ger åtkomst (görs en gång)
Välj **en** av två vägar i Tailscale-admin (<https://login.tailscale.com/admin>):
**A. Dela bara den här maskinen** (minst behörighet, rekommenderas)
1. *Machines* → `henrik-thinkpad-t14s-gen-6` → **Share…**
2. Ange Rickards e-post → skicka delningslänken.
3. Rickard öppnar länken och accepterar; maskinen dyker upp i hans egen
tailnet-lista som en delad nod. Han får åtkomst till den maskinen, inget
annat i tailnätet.
**B. Bjuda in till tailnätet** (om Rickard ska nå fler tjänster)
1. *Users* → **Invite external user** → Rickards e-post.
2. Kontrollera att tailnätets ACL släpper fram hans nod till port 443 på
`henrik-thinkpad-t14s-gen-6`.
## Steg 2 — Rickard installerar och loggar in
```bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
```
(macOS/Windows: hämta klienten från <https://tailscale.com/download> och logga
in i appen.) Logga in med det konto inbjudan/delningen gick till.
Kontrollera att maskinen syns:
```bash
tailscale status | grep henrik-thinkpad
```
## Steg 3 — Öppna konsolen
<https://henrik-thinkpad-t14s-gen-6.tail4eceda.ts.net>
Certifikatet är utfärdat av Tailscale för `.ts.net` — inga varningar ska dyka
upp. **Använd värdnamnet, inte IP-adressen**: certifikatet gäller namnet, så
`https://100.121.38.43` ger en certvarning.
Du bör se en topbar med `ok · holger v0.6.9 (…)` och en översikt med fyra kort.
## Steg 4 — Logga in för att kunna skriva
Läsning (bläddra, söka, ladda ner, se SBOM/properties) fungerar **utan**
inloggning — topbaren visar då `anonymous · reader`. Skrivning (upload,
promote, properties, SBOM-attach) kräver en bearer-token:
1. Gå till **Account** i menyn.
2. Klistra in token i fältet *Bearer token* → **Log in**.
3. Topbaren ska nu visa ditt subject och din roll, t.ex. `console-admin · admin`
— det är serverns svar, inte klientens gissning.
> Henrik skickar token separat (den ligger i en 0600-fil på maskinen och står
> aldrig i det här dokumentet). Token lever bara i fliken (sessionStorage) och
> försvinner när du stänger den eller trycker Log out.
---
## Om det inte funkar
| Symptom | Trolig orsak | Åtgärd |
|---|---|---|
| Namnet slår inte upp | MagicDNS av, eller noden inte accepterad | `tailscale status` — syns maskinen? Acceptera delningen. |
| Timeout / ingen kontakt | Laptopen sover eller är offline | Den är en **bärbar dator** — be Henrik väcka den. `tailscale ping henrik-thinkpad-t14s-gen-6` visar om noden svarar. |
| Sidan laddar men är tom | WASM-bundeln blockeras eller är halvladdad | Hårdladda (Ctrl+Shift+R). Kvarstår det: be Henrik köra `cargo xtask verify-chain`. |
| `503` eller `502` | nginx uppe men holger-servern nere | Henrik: `systemctl --user status holger-server holger-console` |
| Certifikatvarning | Du använde IP i stället för värdnamnet | Använd `https://henrik-thinkpad-t14s-gen-6.tail4eceda.ts.net` |
| Skrivningar nekas med "authentication required" | Ingen token, eller fel roll | Logga in på **Account**. Rollen sätts av servern (RBAC), inte av konsolen. |
Henrik kan verifiera hela kedjan utifrån med:
```bash
cd ~/holger-ui && cargo xtask verify-chain
```
Den kontrollerar båda tjänsterna, tailscale-konfigurationen, SPA-fallbacken,
gRPC-dörren, skrivgrinden och CSP-headern — nio kontroller, alla ska vara `OK`.