diff --git a/src/auth/routes.py b/src/auth/routes.py index 6bc5d5c..57b2281 100644 --- a/src/auth/routes.py +++ b/src/auth/routes.py @@ -100,7 +100,9 @@ def login(): check_password_hash(_DUMMY_HASH, password) # uniformiser le temps return _redirect_with_error("/connexion", "invalid_credentials", email) - if not check_password_hash(row["password_hash"], password): + if row["password_hash"] is None or not check_password_hash( + row["password_hash"], password + ): return _redirect_with_error("/connexion", "invalid_credentials", email) if not row["email_verified"]: @@ -177,6 +179,8 @@ def change_password(): password_confirm = request.form.get("password_confirm") or "" row = db.get_user_by_id(current_user.id) + if row["password_hash"] is None: + return _redirect_with_error("/compte/admin", "no_password_set") if not check_password_hash(row["password_hash"], current_pw): return _redirect_with_error("/compte/admin", "invalid_current_password") @@ -231,7 +235,9 @@ def confirm_email_change(): def delete_account(): current_pw = request.form.get("current_password") or "" row = db.get_user_by_id(current_user.id) - if not check_password_hash(row["password_hash"], current_pw): + if row["password_hash"] is not None and not check_password_hash( + row["password_hash"], current_pw + ): return _redirect_with_error("/compte/admin", "invalid_current_password") user_id = current_user.id diff --git a/src/auth/setup.py b/src/auth/setup.py index 8703877..ea6c717 100644 --- a/src/auth/setup.py +++ b/src/auth/setup.py @@ -63,3 +63,8 @@ def init_auth(app: Flask) -> None: "LINKEDIN_CLIENT_ID non défini : la connexion LinkedIn échouera. " "Définissez LINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRET dans .env." ) + + if not os.getenv("APP_BASE_URL"): + logger.warning( + "APP_BASE_URL non défini : le callback LinkedIn produira une URI relative invalide." + ) diff --git a/src/pages/compte_admin.py b/src/pages/compte_admin.py index 205b47c..09143a9 100644 --- a/src/pages/compte_admin.py +++ b/src/pages/compte_admin.py @@ -14,6 +14,7 @@ register_page( ERROR_MESSAGES = { "invalid_current_password": "Le mot de passe actuel est incorrect.", + "no_password_set": "Votre compte n'a pas de mot de passe (connexion via LinkedIn). Utilisez la réinitialisation de mot de passe pour en définir un.", "password_too_short": "Le nouveau mot de passe doit faire au moins 8 caractères.", "password_mismatch": "Les nouveaux mots de passe ne correspondent pas.", "invalid_email": "L'adresse email n'est pas valide.",