- epic-claimer-new.js: Complete rewrite with practical approach - FlareSolverr integration for Cloudflare solving - Cookie persistence (saved to epic-cookies.json) - Auto-load cookies on startup (no login needed if valid) - Manual login fallback via noVNC if needed - Proper 2FA/OTP support - Better error handling and logging - SETUP.md: Complete setup guide - Docker Compose examples - Environment variable reference - Troubleshooting section - 2FA setup instructions - Volume backup/restore - README.md: Add reference to SETUP.md - OAUTH_DEVICE_FLOW_ISSUE.md: Document why OAuth Device Flow doesn't work - Epic Games doesn't provide public device auth credentials - Client credentials flow requires registered app - Hybrid approach is the practical solution How it works: 1. First run: Login via browser (FlareSolverr helps with Cloudflare) 2. Cookies saved to epic-cookies.json 3. Subsequent runs: Load cookies, no login needed 4. If cookies expire: Auto-fallback to login flow 5. Manual login via noVNC if automation fails This is the approach used by all successful Epic Games claimer projects.
350 lines
7.7 KiB
Markdown
350 lines
7.7 KiB
Markdown
# Epic Games Free Games Claimer - Setup Guide
|
|
|
|
## 🚀 Quick Start (Docker Compose)
|
|
|
|
### Voraussetzungen
|
|
|
|
- Docker & Docker Compose
|
|
- Epic Games Account (Email, Passwort, optional 2FA)
|
|
|
|
### 1. docker-compose.yml erstellen
|
|
|
|
```yaml
|
|
services:
|
|
# FlareSolverr für Cloudflare Bypass
|
|
flaresolverr:
|
|
image: ghcr.io/flaresolverr/flaresolverr:latest
|
|
container_name: flaresolverr
|
|
ports:
|
|
- "8191:8191"
|
|
environment:
|
|
- LOG_LEVEL=info
|
|
- LOG_HTML=false
|
|
- CAPTCHA_SOLVER=none
|
|
restart: unless-stopped
|
|
networks:
|
|
- fgc-network
|
|
|
|
# Free Games Claimer
|
|
free-games-claimer:
|
|
image: git.sky-net.it/nocci/free-games-claimer:latest
|
|
# ODER: build: . # Selbst bauen für neueste Version
|
|
container_name: fgc
|
|
ports:
|
|
- "6080:6080" # noVNC (Web-Browser für Login)
|
|
# - "5900:5900" # VNC (optional)
|
|
volumes:
|
|
- fgc-data:/fgc/data
|
|
- fgc-browser:/home/fgc/.cache/browser
|
|
- fgc-playwright:/home/fgc/.cache/ms-playwright
|
|
environment:
|
|
# Epic Games Login
|
|
- EG_EMAIL=deine@email.com
|
|
- EG_PASSWORD=dein_passwort
|
|
- EG_OTPKEY= # Optional: 2FA Secret (Base32)
|
|
|
|
# Login-Modus
|
|
- EG_MODE=new # "new" für API-Modus, "legacy" für Browser
|
|
|
|
# FlareSolverr Integration
|
|
- FLARESOLVERR_URL=http://flaresolverr:8191/v1
|
|
|
|
# Browser-Einstellungen
|
|
- SHOW=0 # 0=headless, 1=visible (für Debugging)
|
|
- WIDTH=1920
|
|
- HEIGHT=1080
|
|
|
|
# Timeouts
|
|
- TIMEOUT=60 # Standard-Timeout in Sekunden
|
|
- LOGIN_TIMEOUT=180 # Login-Timeout (länger für Captchas)
|
|
|
|
# Optional: Notifications
|
|
# - NOTIFY=apprise://...
|
|
|
|
# Keep-Alive (Container läuft weiter nach Durchlauf)
|
|
- KEEP_ALIVE_SECONDS=86400
|
|
networks:
|
|
- fgc-network
|
|
depends_on:
|
|
- flaresolverr
|
|
restart: unless-stopped
|
|
|
|
networks:
|
|
fgc-network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
fgc-data:
|
|
fgc-browser:
|
|
fgc-playwright:
|
|
```
|
|
|
|
### 2. Environment-Variablen setzen
|
|
|
|
**WICHTIG:** Ersetze die Platzhalter:
|
|
|
|
```bash
|
|
# .env Datei erstellen (nicht versionieren!)
|
|
cat > .env << EOF
|
|
EG_EMAIL=deine@email.com
|
|
EG_PASSWORD=dein_passwort
|
|
EG_OTPKEY= # Optional, wenn 2FA aktiv
|
|
NOTIFY= # Optional, für Benachrichtigungen
|
|
EOF
|
|
```
|
|
|
|
### 3. Starten
|
|
|
|
```bash
|
|
# Container starten
|
|
docker compose up -d
|
|
|
|
# Logs ansehen
|
|
docker compose logs -f fgc
|
|
|
|
# Container stoppen
|
|
docker compose down
|
|
```
|
|
|
|
---
|
|
|
|
## 🔐 Erster Login (WICHTIG!)
|
|
|
|
### Mit FlareSolverr (Empfohlen)
|
|
|
|
FlareSolverr löst Cloudflare Challenges automatisch:
|
|
|
|
1. Container starten (FlareSolverr läuft mit)
|
|
2. Erster Login wird automatisch versucht
|
|
3. Falls Captcha: FlareSolverr versucht es zu lösen
|
|
4. Nach Erfolg: Tokens werden gespeichert
|
|
|
|
### Ohne FlareSolverr (Manuell)
|
|
|
|
Falls Cloudflare Captchas nicht automatisch lösbar sind:
|
|
|
|
```bash
|
|
# Container mit visible Browser starten
|
|
docker compose up -d
|
|
|
|
# noVNC im Browser öffnen
|
|
http://localhost:6080
|
|
|
|
# Manuell bei Epic Games einloggen
|
|
# Cookies/Tokens werden automatisch gespeichert!
|
|
```
|
|
|
|
**Beim nächsten Start:** Kein Login nötig (gespeicherte Session)!
|
|
|
|
---
|
|
|
|
## 📋 Environment-Variablen
|
|
|
|
### Epic Games Login
|
|
|
|
| Variable | Beschreibung | Beispiel |
|
|
|----------|-------------|----------|
|
|
| `EG_EMAIL` | Epic Games Account Email | `user@example.com` |
|
|
| `EG_PASSWORD` | Epic Games Passwort | `secret123` |
|
|
| `EG_OTPKEY` | 2FA Secret (Base32) | `JBSWY3DPEHPK3PXP` |
|
|
| `EG_PARENTALPIN` | Parental Control PIN | `1234` |
|
|
|
|
### Login-Modus
|
|
|
|
| Variable | Beschreibung | Werte |
|
|
|----------|-------------|-------|
|
|
| `EG_MODE` | Login-Methode | `new` (API), `legacy` (Browser) |
|
|
|
|
### Browser & Display
|
|
|
|
| Variable | Beschreibung | Default |
|
|
|----------|-------------|---------|
|
|
| `SHOW` | Visible Browser | `0` (headless) |
|
|
| `WIDTH` | Browser Breite | `1920` |
|
|
| `HEIGHT` | Browser Höhe | `1080` |
|
|
| `BROWSER_DIR` | Browser Profil Pfad | `/fgc/data/browser` |
|
|
|
|
### Timeouts
|
|
|
|
| Variable | Beschreibung | Default |
|
|
|----------|-------------|---------|
|
|
| `TIMEOUT` | Standard-Timeout (Sekunden) | `60` |
|
|
| `LOGIN_TIMEOUT` | Login-Timeout (Sekunden) | `180` |
|
|
| `LOGIN_VISIBLE_TIMEOUT` | Login Button Detection (ms) | `20000` |
|
|
|
|
### FlareSolverr
|
|
|
|
| Variable | Beschreibung | Default |
|
|
|----------|-------------|---------|
|
|
| `FLARESOLVERR_URL` | FlareSolverr API URL | `http://flaresolverr:8191/v1` |
|
|
|
|
### Notifications
|
|
|
|
| Variable | Beschreibung | Beispiel |
|
|
|----------|-------------|----------|
|
|
| `NOTIFY` | Apprise Notification URL | `tgram://...` |
|
|
| `NOTIFY_TITLE` | Notification Titel | `Free Games Claimer` |
|
|
|
|
### Debugging
|
|
|
|
| Variable | Beschreibung | Default |
|
|
|----------|-------------|---------|
|
|
| `DEBUG` | Playwright Inspector | `0` |
|
|
| `DEBUG_NETWORK` | Log Network Requests | `0` |
|
|
| `DRYRUN` | Nicht wirklich claimen | `0` |
|
|
| `TIME` | Timing-Informationen | `0` |
|
|
|
|
---
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### Cloudflare / Captcha Probleme
|
|
|
|
**Symptom:** "Incorrect response" oder Captcha-Schleife
|
|
|
|
**Lösung 1: FlareSolverr prüfen**
|
|
```bash
|
|
docker compose logs flaresolverr
|
|
# Sollte "Serving on http://0.0.0.0:8191" zeigen
|
|
```
|
|
|
|
**Lösung 2: Manuelles Login**
|
|
```bash
|
|
# noVNC öffnen
|
|
http://localhost:6080
|
|
|
|
# Einmal manuell einloggen
|
|
# Cookies bleiben gespeichert!
|
|
```
|
|
|
|
**Lösung 3: Browser-Profil resetten**
|
|
```bash
|
|
docker volume rm fgc-browser
|
|
docker compose up -d
|
|
```
|
|
|
|
### Login schlägt fehl
|
|
|
|
**Symptom:** "Login failed" oder Timeout
|
|
|
|
**Lösung:**
|
|
1. Email/Passwort prüfen
|
|
2. 2FA: EG_OTPKEY korrekt setzen
|
|
3. Mit `SHOW=1` debuggen
|
|
|
|
### Container startet nicht
|
|
|
|
**Symptom:** Exit Code 1 oder hängt
|
|
|
|
**Logs prüfen:**
|
|
```bash
|
|
docker compose logs fgc
|
|
```
|
|
|
|
**Volumes prüfen:**
|
|
```bash
|
|
docker volume ls | grep fgc
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 2FA / OTP einrichten
|
|
|
|
### Epic Games 2FA Secret auslesen
|
|
|
|
1. Epic Games Website → Account → Passwort & Sicherheit
|
|
2. Zwei-Faktor-Authentifizierung → Authentifizierungs-App
|
|
3. **NICHT** QR-Code scannen, sondern "Manuell eingeben" wählen
|
|
4. Secret kopieren (Base32, z.B. `JBSWY3DPEHPK3PXP`)
|
|
|
|
### In docker-compose.yml
|
|
|
|
```yaml
|
|
environment:
|
|
- EG_OTPKEY=JBSWY3DPEHPK3PXP # Dein Secret hier
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Updates
|
|
|
|
### Image Update
|
|
|
|
```bash
|
|
# Aktuellen Container stoppen
|
|
docker compose down
|
|
|
|
# Neues Image pullen
|
|
docker compose pull
|
|
|
|
# Neu starten
|
|
docker compose up -d
|
|
```
|
|
|
|
### Selbst bauen (neueste Version)
|
|
|
|
```bash
|
|
# In docker-compose.yml: build: . statt image: ...
|
|
cd /path/to/free-games-claimer
|
|
docker compose build --no-cache
|
|
docker compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## 📁 Volumes (Persistenz)
|
|
|
|
| Volume | Inhalt | Wichtig |
|
|
|--------|--------|---------|
|
|
| `fgc-data` | JSON-Datenbank, Screenshots | ✅ Claim-Status |
|
|
| `fgc-browser` | Browser-Profil, Cookies | ✅ Login-Session |
|
|
| `fgc-playwright` | Playwright Browser | ⚡ Schnellere Starts |
|
|
|
|
**Backup:**
|
|
```bash
|
|
# Alle Volumes sichern
|
|
docker run --rm -v fgc-data:/data -v $(pwd)/backup:/backup alpine tar czf /backup/fgc-data.tar.gz -C /data .
|
|
```
|
|
|
|
**Restore:**
|
|
```bash
|
|
docker run --rm -v fgc-data:/data -v $(pwd)/backup:/backup alpine tar xzf /backup/fgc-data.tar.gz -C /data
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 Nächste Schritte
|
|
|
|
1. **Einrichten:** docker-compose.yml anpassen
|
|
2. **Starten:** `docker compose up -d`
|
|
3. **Erster Login:** noVNC oder mit FlareSolverr
|
|
4. **Automatisieren:** Cron-Job für regelmäßige Ausführung
|
|
|
|
### Cron-Job Beispiel (alle 6 Stunden)
|
|
|
|
```yaml
|
|
# In docker-compose.yml
|
|
command: >
|
|
bash -c "
|
|
node epic-games &&
|
|
node gog &&
|
|
sleep 86400
|
|
"
|
|
```
|
|
|
|
Oder mit Host-Cron:
|
|
```bash
|
|
# Host-Cron bearbeiten
|
|
crontab -e
|
|
|
|
# Alle 6 Stunden
|
|
0 */6 * * * docker compose -f /path/to/docker-compose.yml up --rm free-games-claimer
|
|
```
|
|
|
|
---
|
|
|
|
## 🆘 Support
|
|
|
|
- **Issues:** https://git.sky-net.it/nocci/free-games-claimer/issues
|
|
- **Dokumentation:** README.md im Repository
|
|
- **FlareSolverr:** https://github.com/FlareSolverr/FlareSolverr
|