patrickandClaude Sonnet 5 be36786913 feat: QR-Code-Einrichtung (Kamera-Scan statt Token abtippen)
Neuer QrEnrollmentScanScreen (mobile_scanner) liest das JSON {url, token}
aus dem Portal-QR-Code (KioskDevicesPage → Bearer-Gerät anlegen) und füllt
EnrollmentScreen automatisch aus. Manuelle Eingabe bleibt als Fallback.
CAMERA-Permission ergänzt. v0.1.4+5, weiterhin release-signiert (gleicher
Fingerprint wie v0.1.3+4).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
2026-09-10 13:27:40 +02:00

TimeMaster Kiosk (Flutter)

Stempeluhr-App für Android-Tablets, gedacht für den Betrieb hinter WireGuard- VPN (feste Geräte-IP). Kein Ed25519-Request-Signing wie beim Browser-PC- Terminal – Geräte-Auth läuft über ein einfaches Bearer-Token, siehe backend/app/core/kiosk_security.py::_verify_bearer_device im Haupt-Repo.

Vollständiger Architektur-Plan: /home/sysops/.claude/plans/staged-marinating-dove.md.

Ersteinrichtung

  1. Auf dem Server: python cli.py kiosk add --company "Acme GmbH" --name "Eingang" --auth-mode bearer [--ip-whitelist 10.8.0.0/24]
  2. CLI gibt Token einmalig aus – in der App unter „Ersteinrichtung" zusammen mit der Server-URL eintragen.
  3. Gerät erscheint in KioskDevicesPage als „pending" – Admin genehmigt.

Login-Modi

  • PIN: Personalnummer + PIN (POST /kiosk/auth/pin)
  • NFC: Kartenscan (Android-eigenes NFC, 13,56 MHz/ISO14443) + Pflicht-PIN als Zweitfaktor (POST /kiosk/auth/nfc)
  • Liste: Mitarbeiter aus Liste tippen (POST /kiosk/auth/list)

Wichtig – Hardware-Inkompatibilität: Die PC-Terminals nutzen einen 125-kHz-EM4100-Leser (HID-Keyboard-Wedge, siehe project_kiosk_hardening- Memory). Android-NFC liest nur 13,56-MHz-Karten (ISO14443/Mifare/NTAG). Bestehende Mitarbeiterkarten für die PC-Terminals funktionieren NICHT am Tablet und umgekehrt – für Tablet-NFC-Login werden separate 13,56-MHz- Karten/Tags benötigt, die zusätzlich über POST /users/{id}/kiosk-nfc hinterlegt werden müssen (gleiches Feld, zwei unterschiedliche physische Kartentypen).

Build

Kein lokales Flutter-SDK nötig – Build läuft auf root@192.168.1.236 (gleiche Umgebung wie timemaster-mobile, siehe dortige Memory-Notiz project_android_app.md für Setup-Details: flutteruser, /opt/flutter, /opt/android-sdk).

# Auf 236, als flutteruser:
cd /opt/timemaster-kiosk
flutter build apk --release --target-platform android-arm64

Umfang v1

Nur Login + Stempeln + Heartbeat. Kein Offline-Modus, keine NTAG424- Kryptografie, kein Android-Lock-Task/MDM (App läuft im normalen Vollbild, kein Geräte-Pinning).

S
Description
No description provided
Readme
125 KiB
0 Stars 1 Watchers 0 Forks
Languages
Dart 99.8%
Kotlin 0.2%