spawner/docs/guides/debug-api-swagger.md
XPS\Micro 2c8cf47564 docs: add Swagger/OpenAPI documentation for DEBUG-API
- Install flasgger dependency (0.9.7.1)
- Initialize Swagger in app.py with config
- Add YAML docstring with OpenAPI spec to debug_management()
- Create comprehensive debug-api-swagger.md guide
- Create debug-api-cheatsheet.md for quick reference
- Swagger UI available at /swagger endpoint
- OpenAPI JSON at /openapi.json
2026-02-02 17:25:24 +01:00

458 lines
9.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DEBUG-API Swagger/OpenAPI Dokumentation
**Status:** ✅ Vollständig dokumentiert mit Flasgger
**Zugänglich unter:** `http://localhost:5000/swagger` (UI) oder `http://localhost:5000/openapi.json` (JSON)
---
## 🚀 Schnellstart
### Swagger UI öffnen:
```
http://localhost:5000/swagger
```
### OpenAPI JSON herunterladen:
```
http://localhost:5000/openapi.json
```
---
## 📚 DEBUG-API Endpoints
### 1⃣ VIEW-LOGS: Letzte 100 Log-Zeilen anzeigen
**Endpoint:** `GET /api/admin/debug?action=view-logs`
**Authentifizierung:**
```bash
# Option 1: Mit DEBUG_TOKEN Header
curl -H "X-Debug-Token: your-secret-token" \
"http://localhost:5000/api/admin/debug?action=view-logs"
# Option 2: Mit Admin JWT Token
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:5000/api/admin/debug?action=view-logs"
```
**Response (200 OK):**
```json
{
"action": "view-logs",
"source": "Flask Log File",
"total_lines": 1234,
"displayed_lines": 100,
"logs": "[2026-02-02 17:30:45] User test@example.com registered..."
}
```
**Response (404 Not Found):**
```json
{
"error": "Log-Datei nicht gefunden: /app/logs/spawner.log"
}
```
---
### 2⃣ CLEAR-LOGS: Log-Datei leeren
**Endpoint:** `GET|POST /api/admin/debug?action=clear-logs`
**Authentifizierung:** (wie oben)
**Response (200 OK):**
```json
{
"action": "clear-logs",
"message": "Log-Datei wurde geleert",
"log_file": "/app/logs/spawner.log"
}
```
---
### 3⃣ LIST-USERS: Alle registrierten User auflisten
**Endpoint:** `GET /api/admin/debug?action=list-users`
**Authentifizierung:** (wie oben)
**Response (200 OK):**
```json
{
"action": "list-users",
"users": [
{
"id": 1,
"email": "admin@example.com",
"slug": "u-a1b2c3d4",
"state": "active",
"is_admin": true,
"is_blocked": false,
"created_at": "2026-01-15T10:30:00",
"last_used": "2026-02-02T17:30:00"
},
{
"id": 2,
"email": "user@example.com",
"slug": "u-e5f6g7h8",
"state": "verified",
"is_admin": false,
"is_blocked": false,
"created_at": "2026-02-01T14:00:00",
"last_used": null
}
],
"total": 2
}
```
---
### 4⃣ DELETE-EMAIL: User und alle Daten löschen
**Endpoint:** `GET|POST /api/admin/debug?action=delete-email&email=test@example.com`
⚠️ **ACHTUNG:** Dies löscht den User und alle zugehörigen Daten (Container, Tokens, etc.) **komplett**!
**Authentifizierung:** (wie oben)
**Parameter:**
- `email` (required): Email-Adresse des zu löschenden Users
**cURL Beispiel:**
```bash
curl -H "X-Debug-Token: your-secret-token" \
"http://localhost:5000/api/admin/debug?action=delete-email&email=test@example.com"
```
**Response (200 OK):**
```json
{
"action": "delete-email",
"message": "User test@example.com wurde gelöscht",
"user_id": 123
}
```
**Response (404 Not Found):**
```json
{
"error": "User test@example.com nicht gefunden"
}
```
**Response (500 Error):**
```json
{
"error": "Fehler beim Löschen: Docker container not found"
}
```
---
### 5⃣ DELETE-TOKEN: Magic Link Tokens für User löschen
**Endpoint:** `GET|POST /api/admin/debug?action=delete-token&email=test@example.com`
Entfernt alle Magic Link Tokens für einen User (nützlich bei Token-Spam).
**Authentifizierung:** (wie oben)
**Parameter:**
- `email` (required): Email-Adresse des Users
**cURL Beispiel:**
```bash
curl -H "X-Debug-Token: your-secret-token" \
"http://localhost:5000/api/admin/debug?action=delete-token&email=test@example.com"
```
**Response (200 OK):**
```json
{
"action": "delete-token",
"message": "5 Tokens für test@example.com gelöscht",
"tokens_deleted": 5
}
```
---
### 6⃣ INFO: Hilfe und verfügbare Actions
**Endpoint:** `GET /api/admin/debug` oder `GET /api/admin/debug?action=info`
Zeigt diese Hilfe mit allen verfügbaren Actions an.
**Response (200 OK):**
```json
{
"endpoint": "/api/admin/debug",
"auth": "X-Debug-Token Header oder Admin JWT",
"actions": {
"view-logs": "Zeigt letzte 100 Zeilen der Logs",
"clear-logs": "Löscht alle Logs",
"list-users": "Listet alle registrierten User auf",
"delete-email": "Löscht User (Parameter: email=...)",
"delete-token": "Löscht Magic Link Tokens (Parameter: email=...)",
"info": "Diese Hilfe"
},
"examples": [...]
}
```
---
## 🔐 Authentifizierung
Die DEBUG-API unterstützt zwei Authentifizierungsmethoden:
### Methode 1: DEBUG_TOKEN (Empfohlen)
```bash
curl -H "X-Debug-Token: your-secret-token" \
"http://localhost:5000/api/admin/debug?action=list-users"
```
**Konfigurieren in `.env`:**
```bash
DEBUG_TOKEN=your-super-secret-token-here
```
**In Docker:**
```bash
docker exec spawner cat /app/.env | grep DEBUG_TOKEN
```
### Methode 2: JWT Admin Token
```bash
# 1. JWT Token von Admin abrufen
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "admin@example.com"}'
# Magic Link Token klicken/kopieren...
# 2. Mit JWT Token DEBUG-API aufrufen
curl -H "Authorization: Bearer $JWT_TOKEN" \
"http://localhost:5000/api/admin/debug?action=list-users"
```
---
## 📋 Swagger API Spezifikation
### Automatisch generiert:
Flasgger generiert automatisch OpenAPI 3.0 Spezifikation aus den Python-Docstrings.
**Verfügbar unter:**
- **UI:** `http://localhost:5000/swagger`
- **JSON:** `http://localhost:5000/openapi.json`
- **YAML:** `http://localhost:5000/apispec.json`
### Herunterladen & Importieren:
```bash
# OpenAPI JSON herunterladen
curl http://localhost:5000/openapi.json > swagger.json
# In Postman importieren:
# 1. Postman öffnen
# 2. File → Import
# 3. swagger.json wählen
```
---
## 🧪 Test-Beispiele
### Test 1: Logs anzeigen
```bash
DEBUG_TOKEN=secret123
curl -H "X-Debug-Token: $DEBUG_TOKEN" \
"http://localhost:5000/api/admin/debug?action=view-logs" | jq '.logs | head -20'
```
### Test 2: User auflisten
```bash
curl -H "X-Debug-Token: $DEBUG_TOKEN" \
"http://localhost:5000/api/admin/debug?action=list-users" | jq '.users[] | {email, state, is_blocked}'
```
### Test 3: User löschen (Vorsicht!)
```bash
curl -H "X-Debug-Token: $DEBUG_TOKEN" \
"http://localhost:5000/api/admin/debug?action=delete-email&email=test@example.com"
```
### Test 4: Tokens für User löschen
```bash
curl -H "X-Debug-Token: $DEBUG_TOKEN" \
"http://localhost:5000/api/admin/debug?action=delete-token&email=spam@example.com"
```
---
## ⚠️ Wichtige Hinweise
### DEBUG_TOKEN in Production
**Sicherheit:**
- ✅ Verwende starken, zufälligen Token (min. 32 Zeichen)
- ✅ Speichere Token **nicht** im Git-Repo
- ✅ Nur `.env` hat den Token (in `.gitignore`)
- ⚠️ DEBUG-Endpoints sind nur für Admin/Development
- ❌ Nicht in produktiven URLs exponieren
**Best Practice:**
```bash
# Generiere sicheren Token
python3 -c "import secrets; print(secrets.token_hex(32))"
# In .env speichern (nicht committen!)
DEBUG_TOKEN=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
```
### Datenschutz (DSGVO)
Die DEBUG-API kann User komplett löschen (inkl. Containers, Tokens, Sessions).
**Protokollierung:**
```bash
# Admin-Aktion wird geloggt
[2026-02-02 17:30:45] User test@example.com vollständig gelöscht von Admin admin@example.com
```
**Verifikation:**
```bash
# Prüfe ob User gelöscht wurde
docker exec spawner python3 -c "
from app import app, db
from models import User
with app.app_context():
user = User.query.filter_by(email='test@example.com').first()
print('User found!' if user else 'User deleted ✓')
"
```
---
## 🔗 Integration in Tools
### Postman
```
1. File → Import
2. Link: http://localhost:5000/openapi.json
3. Collection erstellt mit allen Endpoints
```
### Swagger Editor
```
1. https://editor.swagger.io öffnen
2. File → Import URL
3. http://localhost:5000/openapi.json eintragen
```
### Insomnia
```
1. Application → Preferences → Data
2. "Import Data"
3. URL: http://localhost:5000/openapi.json
```
---
## 📊 OpenAPI Spezifikation
**Version:** 3.0.0
**Title:** Container Spawner API
**Version:** 2.0.0
**Base Path:** `/api/admin`
### Security Schemes:
- `jwt`: Bearer Token (JWT)
- `debug_token`: X-Debug-Token Header
### Endpoint Tags:
- `Debug` - DEBUG-API Endpoints
- `Admin` - Admin-Management Endpoints
- `Auth` - Authentifizierung
---
## 🐛 Troubleshooting
### Problem: Swagger UI zeigt 404
```bash
# Prüfe ob Flasgger installiert ist
docker exec spawner pip list | grep flasgger
# Falls nicht installiert:
docker exec spawner pip install flasgger==0.9.7.1
docker-compose restart spawner
```
### Problem: DEBUG_TOKEN wird nicht erkannt
```bash
# Prüfe ob DEBUG_TOKEN in .env definiert ist
docker exec spawner cat /app/.env | grep DEBUG_TOKEN
# Falls leer, füge hinzu:
# DEBUG_TOKEN=your-secret-token
docker-compose down
docker-compose up -d
```
### Problem: OpenAPI JSON ist leer
```bash
# Prüfe Flasgger-Version
docker exec spawner pip show flasgger
# Falls veraltete Version:
docker exec spawner pip install --upgrade flasgger
docker-compose restart spawner
```
---
## 📝 Dokumentation aktualisieren
Bei neuen DEBUG-Endpoints:
1. **Python-Docstring mit YAML aktualisieren**
```python
@admin_bp.route('/debug/new-action', methods=['GET'])
def new_action():
"""
Neue Aktion
---
tags:
- Debug
parameters:
- name: param
in: query
type: string
responses:
200:
description: Erfolg
"""
```
2. **Diese Dokumentation updaten** (guides/debug-api-swagger.md)
3. **Flasgger generiert UI automatisch** unter `/swagger`
---
**Zuletzt aktualisiert:** 2026-02-02
**Flasgger-Version:** 0.9.7.1
**OpenAPI-Version:** 3.0.0