Files
MamieHenriette/webapp/twitch_auth.py
T
Mow910andCursor b274dcaa51 Ajout de fonctionnalités majeures Twitch, Discord et interface web
Nouvelles fonctionnalités :
- Système de modération Twitch complet (bans, timeouts, avertissements)
- Filtre de liens intelligent pour Twitch avec whitelist/blacklist
- Notifications d'événements Twitch (follows, subs, raids, etc.)
- Système Freeloot Discord avec flux RSS dédié
- Salons automatiques Discord (création/suppression dynamique)
- Authentification utilisateur pour l'interface web (login/register)
- Gestion des utilisateurs et permissions
- Interface de modération Twitch dans la webapp
- Interface de gestion des événements Twitch
- Configuration des paramètres utilisateur
- Migration BDD pour les mots bannis

Améliorations de l'interface :
- Refonte complète des templates (configurations, commandes, humeurs, etc.)
- Nouvelle page de settings utilisateur
- Page de gestion des utilisateurs (admin)
- Page d'erreur 403 personnalisée
- Amélioration de la navigation et du design global
- Intégration de nouvelles sections dans le menu principal

Modifications techniques :
- Ajout de nouveaux modèles en base de données
- Extension des helpers database
- Mise à jour des dépendances (requirements.txt)
- Amélioration de la gestion des annonces Twitch
- Refactorisation du code pour meilleure maintenabilité

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 22:37:22 +01:00

77 lines
2.6 KiB
Python

import asyncio
import logging
from flask import render_template, request, redirect, url_for, flash
from twitchAPI.twitch import Twitch
from twitchAPI.type import TwitchAPIException
from twitchAPI.oauth import UserAuthenticator
from database import db
from database.helpers import ConfigurationHelper
from twitchbot import USER_SCOPE
from webapp import webapp
from webapp.auth import require_page
auth: UserAuthenticator
@webapp.route("/configurations/twitch/help")
@require_page("configurations")
def twitchConfigurationHelp():
return render_template("twitch-aide.html", token_redirect_url=_buildUrl())
@webapp.route("/configurations/twitch/request-token")
@require_page("configurations")
def twitchRequestToken():
global auth
helper = ConfigurationHelper()
twitch = asyncio.run(Twitch(helper.getValue('twitch_client_id'), helper.getValue('twitch_client_secret')))
auth = UserAuthenticator(twitch, USER_SCOPE, url=_buildUrl())
return redirect(auth.return_auth_url())
@webapp.route("/configurations/twitch/receive-token")
def twitchReceiveToken():
global auth
state = request.args.get('state')
code = request.args.get('code')
logging.info("Callback Twitch reçu - state: %s, code: %s", state, code is not None)
if not hasattr(auth, 'state') or auth is None:
logging.error('Objet auth non initialisé - veuillez réessayer')
return redirect(url_for('openConfigurations'))
if state != auth.state:
logging.error('State invalide - attendu: %s, reçu: %s', auth.state, state)
return redirect(url_for('openConfigurations'))
if code is None:
logging.error('Pas de code retourné par Twitch')
return redirect(url_for('openConfigurations'))
try:
token, refresh = asyncio.run(auth.authenticate(user_token=code))
logging.info('Tokens Twitch obtenus avec succès')
helper = ConfigurationHelper()
helper.createOrUpdate('twitch_access_token', token)
helper.createOrUpdate('twitch_refresh_token', refresh)
db.session.commit()
logging.info('Tokens Twitch sauvegardés en base de données')
flash('Token Twitch enregistré. Redémarrez l\'application pour que le bot utilise le nouveau token.', 'success')
except TwitchAPIException as e:
logging.error('Erreur API Twitch: %s', e)
flash(f'Erreur API Twitch : {e}', 'error')
except Exception as e:
logging.error('Erreur inattendue: %s', e)
flash(f'Erreur inattendue : {e}', 'error')
return redirect(url_for('openConfigurations'))
# hack pas fou mais on estime qu'on sera toujours en ssl en connecté
def _buildUrl():
url = f'{request.url_root[:-1]}{url_for('twitchReceiveToken')}'
if url.find('localhost') != -1 : return url
url = url.replace('http://', 'https://')
return url