# WireGuard TV

Ein WireGuard VPN Client speziell entwickelt für Amazon Fire TV Stick mit vollständiger D-Pad Fernbedienungs-Navigation.

## Beschreibung

WireGuard TV ermöglicht es, eine sichere VPN-Verbindung auf dem Amazon Fire TV Stick herzustellen. Die App ist vollständig für die Bedienung mit der Fire TV Fernbedienung optimiert und bietet eine intuitive Leanback-Oberfläche.

### Features

- **D-Pad Navigation** - Vollständig mit Fire TV Fernbedienung bedienbar
- **Web-Interface** - Configs per Browser vom Smartphone oder PC hochladen und verwalten
- **Datei-Import** - .conf Dateien vom lokalen Speicher importieren (per ADB übertragen)
- **Auto-Connect** - Automatische Verbindung beim Gerätestart (pro Tunnel konfigurierbar)
- **Geo-Location Anzeige** - Zeigt aktuelle öffentliche IP mit Land und Flagge an
- **Status Anzeige** - RX/TX Bytes, Verbindungsstatus in Echtzeit
- **Web-Server Autostart** - Optional Server beim Gerätestart automatisch starten
- **Passwortschutz** - Web-Interface kann mit Passwort geschützt werden
- **Kill Switch** - Internet blockieren wenn VPN getrennt (in Einstellungen)

---

## Installation

### Voraussetzungen

- Amazon Fire TV Stick (1. Generation oder neuer)
- Computer mit ADB (Android Debug Bridge)
- Beide Geräte im selben Netzwerk

### Fire TV für ADB vorbereiten

1. **Entwickleroptionen aktivieren:**
   - Einstellungen > Mein Fire TV > Info
   - 7x auf "Fire TV Stick" klicken bis "Du bist jetzt Entwickler" erscheint

2. **ADB aktivieren:**
   - Einstellungen > Mein Fire TV > Entwickleroptionen
   - "ADB-Debugging" aktivieren
   - "Apps aus unbekannten Quellen" aktivieren

3. **IP-Adresse herausfinden:**
   - Einstellungen > Mein Fire TV > Info > Netzwerk
   - IP-Adresse notieren (z.B. 192.168.1.100)

### ADB installieren

```bash
# Debian/Ubuntu
sudo apt install adb

# Fedora
sudo dnf install android-tools

# Arch Linux
sudo pacman -S android-tools
```

### App installieren

```bash
# Mit Fire TV verbinden
adb connect 192.168.1.100:5555

# Beim ersten Mal: Auf dem TV "Erlauben" wählen und "Immer von diesem Computer erlauben" anhaken

# Verbindung prüfen
adb devices

# App installieren
adb install wireguard-tv.apk

# Oder bei Update:
adb install -r wireguard-tv.apk
```

---

## Benutzung

### WireGuard-Konfiguration hinzufügen

#### Methode 1: Web-Upload (empfohlen)

Der einfachste Weg - funktioniert mit jedem Gerät im gleichen Netzwerk:

1. In WireGuard TV App: **"Web-Upload"** wählen und Server starten
2. Die angezeigte URL (z.B. `http://192.168.1.100:8080`) im Browser öffnen
3. Im Tab **"Config hochladen"**:
   - .conf Datei auswählen ODER Config-Text direkt einfügen
   - Namen vergeben und hochladen
4. Der Tunnel erscheint sofort in der App

**Web-Interface Features:**
- Tunnel verwalten (Verbinden, Trennen, Löschen, Bearbeiten)
- Autostart pro Tunnel aktivieren/deaktivieren
- Geo-Location Anzeige (IP, Land, Stadt)
- Server-Einstellungen (Port, Passwort, Autostart)

#### Methode 2: Datei-Import (via ADB)

1. Config-Datei per ADB übertragen:
   ```bash
   adb push meine-config.conf /sdcard/Download/
   ```

2. In WireGuard TV App: **"Datei importieren"** wählen
3. Die Datei aus der Liste auswählen

**Unterstützte Pfade:**
- `/sdcard/Download/`
- `/sdcard/WireGuard/`
- `/sdcard/wireguard/`

#### Methode 3: Manuell eingeben

1. **"Tunnel hinzufügen"** wählen
2. Alle Felder manuell ausfüllen (Private Key, Addresses, Public Key, Endpoint, etc.)

### Tunnel verbinden

- Tunnel mit D-Pad auswählen
- Enter/OK drücken
- **"Verbinden"** wählen

### Autostart aktivieren

1. Tunnel mit D-Pad auswählen und Enter drücken
2. **"Autostart beim Boot"** aktivieren
3. Der Tunnel verbindet sich automatisch beim Gerätestart

**Hinweis:** Beim ersten Aktivieren wird der Tunnel sofort verbunden, damit die VPN-Berechtigung erteilt wird (erforderlich für Autostart).

### Tastenkürzel

| Taste | Funktion |
|-------|----------|
| Enter/OK | Tunnel-Aktionen öffnen |
| Zurück | Navigation zurück |
| D-Pad | Zwischen Elementen navigieren |

---

## Web-Interface

Das integrierte Web-Interface ermöglicht die komfortable Verwaltung vom Smartphone oder PC aus.

### Server starten

1. In der App: **"Web-Upload"** > **"Server starten"**
2. URL wird angezeigt (z.B. `http://192.168.1.100:8080`)
3. URL im Browser öffnen

### Tabs

- **Tunnel verwalten** - Alle Tunnel anzeigen, verbinden, trennen, löschen, Autostart
- **Config hochladen** - Neue Konfiguration per Datei oder Text hinzufügen
- **Einstellungen** - Server-Port, Passwort, Autostart konfigurieren

### Einstellungen

- **Port** - Standard: 8080 (änderbar)
- **Passwortschutz** - Optional, schützt das Web-Interface
- **Server-Autostart** - Server automatisch beim Gerätestart starten

---

## Projekt-Struktur

```
wireguard-tv/
├── app/                        # Fire TV App
│   └── src/main/
│       ├── java/.../
│       │   ├── ui/             # Activities, Fragments, Presenter
│       │   ├── vpn/            # WireGuard Tunnel Service
│       │   ├── web/            # HTTP Server & Web-Interface
│       │   ├── data/           # Repository, Settings (DataStore)
│       │   ├── model/          # Data Classes
│       │   ├── receiver/       # Boot Receiver
│       │   ├── tile/           # Quick Settings Tile
│       │   └── util/           # Hilfsklassen (IpGeoService)
│       └── res/                # Layouts, Drawables, Values
│
├── build.gradle                # Root Build Config
└── settings.gradle             # Projekt-Einstellungen
```

---

## Build (für Entwickler)

### Voraussetzungen

- Android Studio Hedgehog (2023.1.1) oder neuer
- JDK 17
- Android SDK 34

### Android Studio installieren

```bash
# Flatpak (empfohlen)
flatpak install flathub com.google.AndroidStudio
flatpak run com.google.AndroidStudio

# Oder Snap
sudo snap install android-studio --classic
```

### Bauen

**Mit Android Studio:**
1. Projekt öffnen (File > Open)
2. Gradle Sync abwarten
3. Build > Build Bundle(s) / APK(s) > Build APK(s)

**Mit Kommandozeile:**
```bash
# Debug Build
./gradlew assembleDebug

# Release Build
./gradlew assembleRelease

# APK Speicherort
ls -la app/build/outputs/apk/debug/app-debug.apk
```

---

## Debugging

### ADB Verbindung

```bash
# Verbinden
adb connect 192.168.1.100:5555

# Verbindung prüfen
adb devices

# Trennen
adb disconnect 192.168.1.100:5555

# ADB Server neu starten (bei Problemen)
adb kill-server && adb start-server
```

### Logs anzeigen

```bash
# Live Log der WireGuard TV App
adb logcat -s WireGuardTV:* AndroidRuntime:E

# Nur Crash-Logs
adb logcat -s AndroidRuntime:E

# Log in Datei speichern
adb logcat -d > debug.log

# Log leeren (vor Test)
adb logcat -c

# Boot-Logs prüfen (für Autostart-Debugging)
adb logcat -s BootReceiver:* WireGuardTV:*
```

### App neu installieren

```bash
# Deinstallieren
adb uninstall de.hackernet.wireguardtv

# Neu installieren
adb install app/build/outputs/apk/debug/app-debug.apk
```

### Häufige Probleme

**"Offline" bei `adb devices`:**
```bash
adb disconnect
adb kill-server
adb start-server
adb connect 192.168.1.100:5555
```

**App-Update schlägt fehl:**
```bash
adb uninstall de.hackernet.wireguardtv
adb install app-debug.apk
```

**VPN-Berechtigung fehlt:**
- VPN manuell einmal verbinden
- Berechtigung wird automatisch angefragt

---

## Technische Details

| Eigenschaft | Wert |
|-------------|------|
| Min SDK | 22 (Android 5.1, Fire TV Stick 1. Gen) |
| Target SDK | 34 (Android 14) |
| WireGuard Backend | wireguard-android Tunnel Library |
| UI Framework | AndroidX Leanback |
| Datenspeicherung | Jetpack DataStore |
| Web Server | Embedded HTTP Server |
| Geo-Location | ip-api.com (kostenlos) |

---

## Sicherheitshinweise

- Der Web-Server ist nur im **lokalen Netzwerk** erreichbar
- **Passwortschutz** für das Web-Interface wird empfohlen
- Der Server startet **nicht automatisch** (optional aktivierbar)
- Configs werden **verschlüsselt** im App-internen Speicher gespeichert
- HTTP-Verbindung zu ip-api.com ist explizit erlaubt (für Geo-Location)

---

## Lizenz

MIT License - siehe LICENSE Datei

---

## Autor

**HackerSoft - HACKER-NET Telekommunikation**

Website: [HACKER-NET.DE](https://hacker-net.de)
