53 lines
2.1 KiB
Markdown
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`
|