from bottle import route, run, request, redirect from sessions import get_or_create_session, save_session # Création d'un hash de mot de passe import hashlib def hash_password(password: str) -> str: """ Renvoie le hash sha256 du mot de passe. """ return hashlib.sha256(password.encode()).hexdigest() USERS = { "alice": { "nom": "Alice", "prenom": "Dupont", # évidement aucun intérêt ici d'avoir le hash si le mdp est dans le code # c'est juste pour l'exemple :) "password_hash": hash_password("password") }, "bob": { "nom": "Bob", "prenom": "Martin", # idem ! "password_hash": hash_password("supersecret") } } @route("/login", method=["GET", "POST"]) def login(): """ Authentifie l'utilisateur et crée une session. Reçoit le nom d'utilisateur et le mot de passe en POST. La page de redirection est spécifiée dans le paramètre "next" de l'URL. Rajouter un template et une logique pour afficher les erreurs. """ if request.method == "POST": # on récupère le nom d'utilisateur et le mot de passe username = request.forms.get("username") password = request.forms.get("password") next = request.query.get("next", "/") # on vérifie si l'utilisateur existe et si le mot de passe est correct if (username in USERS and USERS[username]["password_hash"] == hash_password(password)): # on crée une session pour l'utilisateur session_id, session_data, created = get_or_create_session() session_data["user"] = username session_data["nom"] = USERS[username]["nom"] session_data["prenom"] = USERS[username]["prenom"] save_session(session_id, session_data) return redirect(next) else: return "Nom d'utilisateur ou mot de passe incorrect." return '''
''' @route("/") def index(): """ Page protégée, accessible uniquement si l'utilisateur est authentifié. """ _, session, _ = get_or_create_session() if "user" not in session: return redirect("/login?next=/") return f"Bonjour {USERS[session['user']]['nom']} {USERS[session['user']]['prenom']} !" if __name__ == "__main__": run(host='localhost', port=38083, debug=True, reloader=True)