# embed_routes.py from flask import Blueprint, request, jsonify, redirect, url_for from auth_backend import register_end_user, login_end_user, reset_end_user_password from typing import Tuple # Création du Blueprint 'embed_bp' embed_bp = Blueprint('embed_bp', __name__) # --- Style et Structure de Base des Formulaires --- # Le style CSS est inclus directement pour que le client n'ait qu'un seul bloc à copier/coller. HTML_FORM_STYLE = """ """ # Le placeholder CLIENT_ID_PLACEHOLDER sera remplacé par l'ID de votre client. BASE_FORM_STRUCTURE = """ {style}
""" # --- 1. Formulaire d'Inscription (Sign Up) --- REGISTRATION_FIELDS = """ """ REGISTRATION_FOOTER = 'Déjà un compte? Connectez-vous
' REGISTRATION_FORM_HTML_TEMPLATE = BASE_FORM_STRUCTURE.format( style=HTML_FORM_STYLE, title="Inscription", id_prefix="reg", route="register", fields=REGISTRATION_FIELDS, button_text="S'inscrire", footer=REGISTRATION_FOOTER ) # --- 2. Formulaire de Connexion (Login) --- LOGIN_FIELDS = """ """ LOGIN_FOOTER = 'Pas encore de compte? Inscrivez-vous
' LOGIN_FORM_HTML_TEMPLATE = BASE_FORM_STRUCTURE.format( style=HTML_FORM_STYLE, title="Connexion", id_prefix="log", route="login", fields=LOGIN_FIELDS, button_text="Se connecter", footer=LOGIN_FOOTER ) # --- 3. Formulaire de Récupération de Compte (Password Reset) --- RESET_FIELDS = """ """ RESET_FOOTER = '' RESET_FORM_HTML_TEMPLATE = BASE_FORM_STRUCTURE.format( style=HTML_FORM_STYLE, title="Réinitialisation du Mot de Passe", id_prefix="reset", route="reset-password", fields=RESET_FIELDS, button_text="Réinitialiser le Mot de Passe", footer=RESET_FOOTER ) # --- Fonction Utilitaires pour Récupérer les Formulaires --- def get_forms_html(client_id: str) -> Tuple[str, str, str, str]: """ Génère les codes HTML des trois formulaires en injectant le client_id. Retourne (registration_html, login_html, reset_html, javascript_snippet) """ reg_html = REGISTRATION_FORM_HTML_TEMPLATE.replace('CLIENT_ID_PLACEHOLDER', client_id) log_html = LOGIN_FORM_HTML_TEMPLATE.replace('CLIENT_ID_PLACEHOLDER', client_id) res_html = RESET_FORM_HTML_TEMPLATE.replace('CLIENT_ID_PLACEHOLDER', client_id) # Script JavaScript pour gérer les soumissions AJAX et l'affichage des messages JAVASCRIPT_SNIPPET = """ """ return reg_html, log_html, res_html, JAVASCRIPT_SNIPPET # ---------------------------------------------------------------------- # --- Routes API pour la Soumission des Formulaires Embarqués (Unauthenticated) --- # ---------------------------------------------------------------------- @embed_bp.route("/register", methods=['POST']) def embed_register(): """ Point de terminaison pour l'inscription d'un utilisateur final. """ client_id = request.form.get("client_id") username = request.form.get("username") email = request.form.get("email") password = request.form.get("password") confirm_password = request.form.get("confirm_password") if not all([client_id, username, email, password, confirm_password]): return jsonify({"status": "Error", "message": "Tous les champs sont requis."}), 400 user_id, message, _ = register_end_user(client_id, username, email, password, confirm_password) if user_id: return jsonify({"status": "Success", "message": message, "user_id": user_id}), 200 else: return jsonify({"status": "Error", "message": message}), 400 @embed_bp.route("/login", methods=['POST']) def embed_login(): """ Point de terminaison pour la connexion d'un utilisateur final. """ client_id = request.form.get("client_id") email = request.form.get("email") password = request.form.get("password") if not all([client_id, email, password]): return jsonify({"status": "Error", "message": "Email et mot de passe sont requis."}), 400 user_id, message, user_data = login_end_user(client_id, email, password) if user_id: # Note : Vous devriez créer un token JWT ici ou gérer la session d'une autre manière sécurisée return jsonify({"status": "Success", "message": message, "user_id": user_id, "user_data": user_data}), 200 else: return jsonify({"status": "Error", "message": message}), 401 @embed_bp.route("/reset-password", methods=['POST']) def embed_reset_password(): """ Point de terminaison pour la réinitialisation de mot de passe d'un utilisateur final. """ client_id = request.form.get("client_id") email = request.form.get("email") new_password = request.form.get("new_password") confirm_password = request.form.get("confirm_password") if not all([client_id, email, new_password, confirm_password]): return jsonify({"status": "Error", "message": "Tous les champs sont requis."}), 400 success, message = reset_end_user_password(client_id, email, new_password, confirm_password) if success: return jsonify({"status": "Success", "message": message}), 200 else: return jsonify({"status": "Error", "message": message}), 400