95 lines
3.0 KiB
Python
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) |