Files
ohm_streaming/README.md
T
root 1fe7392063 feat: Complete Sonarr integration with security enhancements
This commit adds comprehensive Sonarr webhook integration and implements
critical security improvements identified in code review.

## Sonarr Integration
- Full webhook support for Grab, Download, Rename, Delete, and Test events
- HMAC SHA256 signature verification for webhook authentication
- Series mapping system (Sonarr TVDB ID → Anime Provider URL)
- 11 new API endpoints for configuration, mappings, search, and downloads
- Comprehensive test suite (31 tests, all passing)
- Complete documentation in docs/SONARR_INTEGRATION.md

## Security Enhancements
- CORS restricted to specific origins (user's IP: 192.168.1.204:3000)
- Path traversal prevention via sanitize_filename() and is_safe_filename()
- Structured logging infrastructure (replaced all print() statements)
- Environment-based configuration with .env support
- Filename sanitization prevents malicious path attacks

## New Features
- Lpayer and Sibnet downloader support
- Kitsu API integration for anime metadata
- Recommendation engine based on download history
- Latest releases endpoint for new anime
- Modular web interface with component-based templates

## Configuration
- Centralized settings via app/config.py with pydantic-settings
- Sonarr config auto-created in config/ directory
- Example configurations provided for easy setup

## Tests
- 31 Sonarr integration tests (23 functionality + 9 security)
- 100+ tests passing in core test files
- Security utilities fully tested

## Documentation
- Updated CLAUDE.md with Sonarr and testing info
- Added IMPROVEMENTS_2024-01-24.md analysis
- Added SONARR_IMPLEMENTATION.md technical summary

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-24 21:25:47 +00:00

409 lines
15 KiB
Markdown

# Ohm Stream Downloader
**Application web complète pour télécharger des animes et fichiers depuis divers hébergeurs.**
Interface moderne avec recherche d'anime, métadonnées enrichies, téléchargements parallèles et streaming vidéo.
## ✨ Fonctionnalités
### 🎬 Recherche et Téléchargement d'Animes
- **Recherche unifiée** : Recherchez sur 4 providers simultanément (Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree)
- **Métadonnées riches** : Synopsis, genres, notes, année de sortie, studio, nombre d'épisodes, statut
- **Téléchargement par épisode** : Sélectionnez et téléchargez des épisodes individuels
- **Téléchargement de saison complète** : Téléchargez tous les épisodes d'un coup
- **Streaming vidéo** : Regardez vos animes directement dans le navigateur
- **Recherche floue** : Gestion des fautes de frappe et variations de noms
### 📁 Hébergeurs de Fichiers Supportés
- **1fichier** (1fichier.com, 1fichier.fr)
- **Uptobox** (uptobox.com, uptobox.fr)
- **Doodstream** (doodstream.com, dood.to, dood.lol, etc.)
- **Rapidfile** (rapidfile.net, rapidfile.com)
### 🎥 Hébergeurs Vidéo Supportés
- **VidMoly** (vidmoly.to, vidmoly.com)
- **SendVid** (sendvid.com)
### 🚀 Gestion des Téléchargements
- **Téléchargements parallèles** : Jusqu'à 3 téléchargements simultanés
- **Pause/Reprise** : Contrôle total sur vos téléchargements
- **Progression en temps réel** : Vitesse, progression, taille
- **Reprise automatique** : Support des HTTP Range pour reprendre les téléchargements interrompus
### 🌐 Interface Web
- **Design moderne** : Interface sombre avec gradients et animations
- **Responsive** : Fonctionne sur desktop et mobile
- **Mise à jour automatique** : Rafraîchissement chaque seconde
- **Métadonnées visuelles** : Affichage des informations anime avec icônes
### 🔌 API REST
- **Endpoints REST** : Intégration facile avec d'autres applications
- **Documentation automatique** : Swagger UI disponible
## 📋 Configuration Requise
- Python 3.8+
- pip
## 🚀 Installation
```bash
# Cloner le repository
git clone https://github.com/votre-user/Ohm_streaming.git
cd Ohm_streaming
# Créer l'environnement virtuel
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Installer les dépendances
pip install -r requirements.txt
# Lancer le serveur de développement
uvicorn main:app --reload --host 0.0.0.0 --port 3000
```
Accédez à l'interface : http://localhost:3000/web
## 📖 Utilisation
### Interface Web
1. **Onglet Recherche d'Anime** :
- Entrez le nom d'un anime (ex: "Naruto", "One Piece")
- Sélectionnez la langue (VOSTFR ou VF)
- Cochez "Inclure les métadonnées" pour plus d'informations
- Cliquez sur "Rechercher"
- Sélectionnez un épisode et cliquez sur "Télécharger"
- Ou utilisez "Toute la saison" pour tout télécharger
2. **Onglet Lien Direct** :
- Collez un lien de téléchargement direct
- Cliquez sur "Télécharger"
3. **Onglet Providers** :
- Utilisez les onglets spécifiques à chaque provider
- Chaque onglet a ses propres options de recherche
### API Endpoints
#### Téléchargements
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| POST | `/api/download` | Créer un nouveau téléchargement |
| GET | `/api/downloads` | Lister tous les téléchargements |
| GET | `/api/download/{task_id}` | Statut d'un téléchargement |
| POST | `/api/download/{task_id}/pause` | Mettre en pause |
| POST | `/api/download/{task_id}/resume` | Reprendre |
| DELETE | `/api/download/{task_id}` | Annuler/Supprimer |
| GET | `/api/download/{task_id}/file` | Télécharger le fichier terminé |
#### Anime
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/anime/search` | Rechercher un anime (paramètres: `q`, `lang`, `include_metadata`) |
| GET | `/api/anime/metadata` | Obtenir les métadonnées d'un anime (paramètre: `url`) |
| GET | `/api/anime/episodes` | Liste des épisodes d'un anime (paramètres: `url`, `lang`) |
| POST | `/api/anime/download` | Télécharger un épisode |
| POST | `/api/anime/download-season` | Télécharger toute une saison |
#### Streaming Vidéo
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/video/{task_id}` | Stream une vidéo (support Range/seeking) |
| GET | `/stream/{filename}` | Stream par nom de fichier |
| GET | `/player/{task_id}` | Lecteur vidéo pour un téléchargement |
| GET | `/watch/{filename}` | Lecteur vidéo par nom de fichier |
#### Système
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/` | Informations sur l'API |
| GET | `/api/providers` | Liste des providers supportés |
| GET | `/health` | Vérifier l'état du serveur |
| GET | `/web` | Interface web |
### Exemples API
**Rechercher un anime avec métadonnées :**
```bash
curl "http://localhost:3000/api/anime/search?q=naruto&lang=vostfr&include_metadata=true"
```
**Obtenir les épisodes d'un anime :**
```bash
curl "http://localhost:3000/api/anime/episodes?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr"
```
**Télécharger une saison complète :**
```bash
curl -X POST "http://localhost:3000/api/anime/download-season?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr"
```
**Créer un téléchargement direct :**
```bash
curl -X POST http://localhost:3000/api/download \
-H "Content-Type: application/json" \
-d '{"url": "https://1fichier.com/?xxxxx"}'
```
## 🏗️ Structure du Projet
```
Ohm_streaming/
├── main.py # Application FastAPI & endpoints API
├── app/
│ ├── models/ # Modèles Pydantic
│ │ └── __init__.py # DownloadTask, AnimeMetadata, etc.
│ ├── downloaders/ # Downloaders par provider
│ │ ├── base.py # Classe BaseDownloader
│ │ ├── animesama.py # Anime-Sama (avec métadonnées)
│ │ ├── animeultime.py # Anime-Ultime (avec métadonnées)
│ │ ├── nekosama.py # Neko-Sama (avec métadonnées)
│ │ ├── vostfree.py # Vostfree (avec métadonnées)
│ │ ├── unfichier.py # 1fichier
│ │ ├── uptobox.py # Uptobox
│ │ ├── doodstream.py # Doodstream
│ │ ├── rapidfile.py # Rapidfile
│ │ ├── vidmoly.py # VidMoly
│ │ ├── sendvid.py # SendVid
│ │ └── __init__.py # Registry des downloaders
│ ├── providers.py # Configuration des providers
│ └── download_manager.py # Gestionnaire de file d'attente
├── downloads/ # Fichiers téléchargés
├── templates/
│ ├── index.html # Interface web principale
│ └── player.html # Lecteur vidéo
├── static/ # Fichiers statiques (CSS, JS, images)
└── requirements.txt # Dépendances Python
```
## ⚙️ Configuration
Modifiez ces paramètres dans `main.py` :
```python
download_manager = DownloadManager(
download_dir="downloads", # Répertoire de stockage
max_parallel=3 # Téléchargements simultanés
)
```
## 🔧 Ajouter un Provider
### Ajouter un Hébergeur de Fichiers
1. Créez `app/downloaders/myhost.py` :
```python
from .base import BaseDownloader
from bs4 import BeautifulSoup
class MyHostDownloader(BaseDownloader):
def can_handle(self, url: str) -> bool:
return "myhost.com" in url.lower()
async def get_download_link(self, url: str) -> tuple[str, str]:
# Extraire le lien de téléchargement direct
response = await self.client.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# ... logique d'extraction ...
return download_url, filename
```
2. Ajoutez-le dans `app/providers.py` :
```python
FILE_HOSTS = {
# ...
"myhost": {
"name": "MyHost",
"domains": ["myhost.com"],
"icon": "📁",
"color": "#4ecdc4"
}
}
```
### Ajouter un Provider Anime avec Métadonnées
1. Créez le downloader avec les méthodes requises :
```python
class MyAnimeDownloader(BaseDownloader):
async def search_anime(self, query: str, lang: str = "vostfr", include_metadata: bool = False):
# Implémenter la recherche
async def get_anime_metadata(self, anime_url: str) -> dict:
# Extraire: synopsis, genres, rating, release_year, studio, etc.
return {
'synopsis': '...',
'genres': ['Action', 'Aventure'],
'rating': '8.5/10',
'release_year': 2023,
'studio': 'Studio Name',
# ...
}
async def get_episodes(self, anime_url: str, lang: str = "vostfr"):
# Retourner la liste des épisodes
```
2. Enregistrez-le dans `app/providers.py` et `main.py`
## 🗺️ Roadmap / Plans Futurs
### Version 2.2 - Système de Favoris ✅ (Terminé)
- [x] **Favoris** : Sauvegarder les animes favoris avec métadonnées complètes
- [x] **API REST complète** : 6 endpoints pour gérer les favoris
- [x] **Tri et filtrage** : Par titre, rating, année, provider, genre
- [x] **Statistiques** : Distribution par provider et genre
- [x] **Stockage persistant** : Base JSON (favorites.json)
### Version 2.3 - Base de Données & Authentification
- [ ] **SQLite avec SQLAlchemy** : Persistance complète des données
- [ ] **Système d'authentification local** :
- [ ] Inscription et connexion utilisateur
- [ ] Tokens JWT avec expiration (7 jours)
- [ ] Hachage de mot de passe bcrypt
- [ ] Préférences utilisateur personnalisables
- [ ] **Profils utilisateurs** :
- [ ] Table User : username, email, preferences, admin
- [ ] Historique de téléchargement par utilisateur
- [ ] Historique de visionnage (position, progression)
- [ ] Préférences : langue par défaut, thème, auto-download
- [ ] **Rétrocompatibilité** : Accès anonyme toujours possible
**Nouveaux endpoints :**
- `POST /api/auth/register` - Inscription
- `POST /api/auth/login` - Connexion (JWT)
- `GET /api/auth/me` - Profil utilisateur
- `PUT /api/auth/me/preferences` - Préférences
- `GET /api/auth/me/download-history` - Historique
- `GET /api/auth/me/watch-history` - Visionnage
### Version 2.4 - APIs Externes & Recommandations
- [ ] **Intégration Jikan API** (MyAnimeList) :
- [ ] Métadonnées enrichies (poster, notes, genres)
- [ ] Limitation de débit : 3 req/sec
- [ ] **Intégration AniList API** (GraphQL) :
- [ ] Recommandations basées sur l'historique
- [ ] Limitation de débit : 90 req/min
- [ ] **Système de cache** :
- [ ] Cache API dans la base de données
- [ ] TTL configurable (168h par défaut)
- [ ] Mécanisme de fallback (AniList → Jikan)
- [ ] **Enrichissement automatique** :
- [ ] Fusion des données providers + API externes
- [ [ ] Affichage des posters dans les résultats
**Nouveaux endpoints :**
- `GET /api/anime/metadata?enrich=true` - Métadonnées enrichies
- `GET /api/recommendations` - Suggestions personnalisées
### Version 2.5 - Webhooks & Automatisation ✅ (Terminé)
- [x] **Support Sonarr Webhook** :
- [x] `POST /api/webhook/sonarr` - Réception événements
- [x] Auto-téléchargement des nouveaux épisodes
- [x] Vérification HMAC SHA256 (optionnel)
- [x] Gestion des événements : Download, Rename, Delete
- [x] **Automatisations** :
- [x] Déclenchement automatique sur nouvel épisode
- [x] Analyse des infos épisodes depuis Sonarr
- [x] Mapping automatique vers les providers
- [x] Système de mapping series Sonarr → anime providers
- [x] Configuration API pour webhooks et mappings
**Nouveaux endpoints :**
- `POST /api/webhook/sonarr` - Webhook principal Sonarr
- `POST /api/webhook/test/sonarr` - Test de payload
- `GET /api/sonarr/config` - Configuration webhook
- `PUT /api/sonarr/config` - Mise à jour configuration
- `GET /api/sonarr/mappings` - Liste des mappings
- `POST /api/sonarr/mappings` - Créer mapping
- `DELETE /api/sonarr/mappings/{id}` - Supprimer mapping
- `GET /api/sonarr/search` - Rechercher anime
- `GET /api/sonarr/episodes` - Liste épisodes
- `GET /api/sonarr/suggest` - Suggestions mappings
- `POST /api/sonarr/download` - Déclencher téléchargement manuel
**Documentation :** Voir [docs/SONARR_INTEGRATION.md](docs/SONARR_INTEGRATION.md)
### Version 2.6 - Gestion de Bibliothèque Avancée
- [ ] **Bibliothèque personnelle** : Gérer sa collection d'anime téléchargés
- [ ] **Statistiques détaillées** :
- [ ] Temps de visionnage total
- [ ] Espace disque utilisé
- [ ] Animes les plus regardés
- [ ] Graphiques de statistiques
- [ ] **Marquage d'épisodes** :
- [ ] Marquer épisodes comme vus/non vus
- [ ] Système de progression automatique
- [ ] Reprendre la lecture là où on s'est arrêté
- [ ] **Listes de lecture** : Créer des playlists personnalisées
- [ ] **Notes personnelles** : Noter les animes et laisser des commentaires
### Version 2.7 - Qualité et Formats
- [ ] **Sélection de qualité** : Choisir entre 1080p, 720p, 480p
- [ ] **Conversion automatique** : Convertir en différents formats
- [ ] **Compression** : Réduire la taille des fichiers
- [ ] **Extraction de sous-titres** : Télécharger les subs automatiquement
- [ ] **Multi-audio** : Gérer les versions VF/VOSTFR
### Version 3.0 - Fonctionnalités Sociales & Mobile
- [ ] **Fonctionnalités sociales** :
- [ ] Partage de listes avec amis
- [ ] Système de commentaires et avis
- [ ] Intégration Discord/Telegram (notifications)
- [ ] **Mobile & PWA** :
- [ ] Application mobile native iOS/Android
- [ ] Progressive Web App pour offline
- [ ] Chromecast/AirPlay support
- [ ] Interface optimisée mobile
### Version 4.0 - Fonctionnalités Avancées
- [ ] **Sauvegarde cloud** : Sync avec Google Drive/Dropbox
- [ ] **Streaming distant** : Regarder partout
- [ ] **Multi-utilisateurs** : Profils et permissions
- [ ] **API publique** : API pour développeurs tiers
- [ ] **Plugins** : Système d'extensions
### Améliorations Continues
- [ ] **Performance** : Optimisation du chargement et de l'interface
- [ ] **Accessibilité** : Support lecteur d'écran, clavier
- [ ] **Tests automatisés** : Suite de tests E2E
- [ ] **Documentation** : Guides d'utilisation et API
- [ ] **Internationalisation** : Support multilingue complet
## 🤝 Contribution
Les contributions sont les bienvenues !
1. Fork le projet
2. Créez une branche (`git checkout -b feature/AmazingFeature`)
3. Commit (`git commit -m 'Add some AmazingFeature'`)
4. Push (`git push origin feature/AmazingFeature`)
5. Ouvrez une Pull Request
## 📝 Licence
Ce projet est à usage éducatif uniquement. Respectez les droits d'auteur et les lois locales.
## ⚠️ Avertissement
Ce logiciel est destiné à un usage personnel et éducatif. Les utilisateurs sont responsables de vérifier qu'ils ont le droit de télécharger du contenu protégé par des droits d'auteur dans leur juridiction.
## 📧 Support
Pour les bugs et suggestions :
- Ouvrez une issue sur GitHub
- Discutez avec la communauté
---
**Développé avec ❤️ pour la communauté anime**
*Version actuelle : 2.1*
*Dernière mise à jour : Janvier 2026*