Files
ygg-service/backend/routes.py
2025-11-11 21:26:34 +01:00

95 lines
3.0 KiB
Python

# 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')
# 1. Recherche brute
torrents = search_torrents(query, category_id)
# 2. Filtrage et formatage
filtered_results = filter_and_format_torrents(torrents)
return render_template(
'search_results.html',
query=query,
results=filtered_results,
user=current_user.username
)
@app.route("/torrent/<torrent_id>")
@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)