# Standard library import time, os # Third-party libraries import requests from flask import render_template, request, redirect, url_for, session, flash, jsonify, make_response from flask_login import logout_user, login_required, current_user # Project imports from backend.auth import authenticate_user from backend.api import search_torrents, filter_and_format_torrents, download_torrent_ygg, upload_to_alldebrid, get_alldebrid_links YGG_PASSKEY = os.getenv("YGG_PASSKEY") ALLDEBRID_KEY = os.getenv("ALLDEBRID_API_KEY") def init_app(app): @app.route('/') def home(): if 'user' in session: return redirect(url_for('dashboard')) return redirect(url_for('login')) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == "POST": username = request.form.get("username") password = request.form.get("password") ip = request.remote_addr or "unknown" user, msg = authenticate_user(username, password, ip) if user: return redirect(url_for('dashboard')) else: flash(msg) return render_template("login.html") @app.route('/dashboard') @login_required def dashboard(): return render_template('dashboard.html', user=current_user.username) @app.route('/logout') @login_required def logout(): logout_user() # Déconnecte Flask-Login session.clear() # Efface toutes les clés de session resp = make_response(redirect(url_for('login'))) resp.set_cookie('session', '', expires=0) # supprime le cookie de session return resp @app.route('/search') @login_required def search(): query = request.args.get('query') category_id = request.args.get('category_id') max_size = request.args.get('max_size', default=5, type=int) season = request.args.get('season', type=int) # None si absent episode = request.args.get('episode', type=int) # None si absent # 1. Recherche brute torrents = search_torrents(query, category_id) # 2. Filtrage et formatage filtered_results = filter_and_format_torrents(torrents, max_size, season, episode) return render_template( 'search_results.html', query=query, results=filtered_results, user=current_user.username ) @app.route("/torrent/") @login_required def torrent_details(torrent_id): try: # 1. Téléchargement depuis Ygg torrent_content, filename = download_torrent_ygg(torrent_id) # 2. Upload sur Alldebrid debrid_id = upload_to_alldebrid(torrent_content, filename) # Pause courte si nécessaire (simule un délai API) time.sleep(2) # 3. Récupération des liens directs direct_links = get_alldebrid_links(debrid_id) except requests.exceptions.RequestException as e: print("Erreur HTTP:", e) return "Erreur lors de la communication avec l'API", 500 except RuntimeError as e: print(e) return str(e), 500 return jsonify(direct_links)