timetracker/.tasks/done/TT-014-go-serve-binary.md
2026-08-03 21:51:48 +02:00

53 lines
2.1 KiB
Markdown

# TT-014 — Go APK-Serve-Binary
**Type:** Story
**Priority:** High
**Labels:** go, tooling, server
**Depends on:**
**Blocks:** TT-016 (serve_apk Make-Target)
---
## Summary
Implementiere einen portablen HTTP-Server in Go der eine APK per WLAN bereitstellt.
Kein Python, kein Flask, keine externen Abhängigkeiten — nur Go Standard-Library.
Das kompilierte Binary `scripts/serve/serve` wird von `make serve_apk` gestartet.
## Funktionsumfang
| Feature | Detail |
|---------|--------|
| Landingpage `/` | HTML-Template mit App-Name, Version, Größe, Build-Datum, SHA256 |
| Download `/download` | APK als Streaming-Response mit Content-Disposition |
| SHA256-Endpoint `/sha256` | JSON: `{"sha256":"…","filename":"…"}` |
| No-Cache-Header | `Cache-Control: no-store` auf allen Responses |
| QR-Code im Terminal | `qrencode -t UTF8 <url>` via `os/exec` |
| Lokale IP | UDP-Trick: Verbindung zu 8.8.8.8:80, eigene IP ablesen |
| CLI-Flags | `--dir build/apk` (default), `--port 8888`, `--debug` |
| Versioninfo | APK-Dateiname parsen: `timetrack-0.1.0+3.apk` → Version + Build-Nummer |
| SHA256 Sidecar | `.sha256`-Datei neben APK lesen (Format: `<hash> <pfad>`) |
## HTML-Template
- Design: modernes Card-Layout, dunkles Theme (Timetrack-Blau `#2563EB`)
- Felder: Version, Größe MB, Build-Datum, Plattform
- Verifizierungs-Sektion: SHA256 anzeigen + JS-Datei-Hash-Prüfung (Web Crypto API)
- Installationshinweis für Android (Sicherheitseinstellungen)
## Go-Modul
```
scripts/serve/
go.mod (module timetrack/serve, go 1.21, keine externen deps)
main.go (alles in einem File — überschaubar)
```
## Acceptance Criteria
- [ ] `go build -o serve ./scripts/serve/` kompiliert ohne Fehler
- [ ] `./serve --dir build/apk --port 8888` startet Server
- [ ] Landingpage zeigt korrekte Metadaten wenn APK vorhanden
- [ ] `/download` liefert APK mit korrektem MIME-Type
- [ ] QR-Code erscheint im Terminal (falls `qrencode` verfügbar)
- [ ] Server startet auch wenn kein `qrencode` vorhanden (graceful fallback)
- [ ] Klarer Fehler wenn kein `.apk` im `--dir` gefunden
## Files to create
- `scripts/serve/go.mod`
- `scripts/serve/main.go`