cahnges to the user management

This commit is contained in:
2026-08-25 12:50:34 +02:00
parent ac9fa27db8
commit 7aeb325d4e
4 changed files with 261 additions and 133 deletions
+60 -12
View File
@@ -26,6 +26,8 @@ from bson.objectid import ObjectId
import user as user_store
import buchungen
import server_steering as steering
from modules.emailservice.email import send_register_token
import secrets
app = Flask(__name__)
app.secret_key = "ASDfhbsdfseiufhgildsrfrjg874368546987s6e8468f4!?FAUS/&s"
@@ -1881,15 +1883,9 @@ def login():
if stored_user:
if stored_user.get("verified", True) is False:
if request.is_json:
return jsonify({
"error": "Account not verified",
"username": stored_user.get("username"),
"needs_verification": True
}, 403)
flash('Bitte verifizieren Sie Ihre E-Mail-Adresse, bevor Sie sich einloggen.', 'error')
return redirect(url_for('login'))
flash('Bitte verifizieren Sie Ihr Konto mit dem Code aus der E-Mail, bevor Sie sich einloggen.', 'error')
return redirect(url_for('verify_account', username=stored_user.get("username")))
session['username'] = stored_user.get("username")
session['display_name'] = stored_user.get("display_name") or stored_user.get("username")
@@ -1991,7 +1987,7 @@ def verify_account():
if not username or not token:
flash("Bitte Benutzername und Token eingeben.", "error")
return redirect(url_for("verify_account"))
return redirect(url_for("verify_account", username=username))
user = _find_user(username)
if not user:
@@ -2002,8 +1998,6 @@ def verify_account():
flash("Konto ist bereits verifiziert. Bitte einloggen.", "success")
return redirect(url_for("login"))
# Die Funktion verify_user_token übernimmt jetzt das Hashing und den Vergleich.
# Sie gibt True zurück, wenn es passt, und False, wenn der Token falsch ist.
is_valid = user_store.verify_user_token(username, token)
if is_valid:
@@ -2016,6 +2010,60 @@ def verify_account():
prefilled_username = request.args.get("username", "")
return render_template("verify.html", username=prefilled_username)
@app.route("/resend-token", methods=["POST"])
def resend_token():
username = (request.form.get("username") or "").strip()
user = _find_user(username)
if not user:
flash("Benutzer nicht gefunden.", "error")
return redirect(url_for("verify_account"))
if user.get("verified"):
flash("Konto ist bereits verifiziert.", "info")
return redirect(url_for("login"))
new_token = secrets.token_hex(3).upper()
user_store.update_verification_token(user["username"], new_token)
if send_register_token(user["email"], new_token):
flash("Ein neuer Bestätigungscode wurde an Ihre E-Mail-Adresse gesendet.", "success")
else:
flash("E-Mail konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", "error")
return redirect(url_for("verify_account", username=username))
@app.route("/change-email", methods=["POST"])
def change_email_and_resend():
username = (request.form.get("username") or "").strip()
new_email = (request.form.get("new_email") or "").strip().lower()
if not username or not new_email or "@" not in new_email:
flash("Bitte geben Sie eine gültige E-Mail-Adresse ein.", "error")
return redirect(url_for("verify_account", username=username))
user = _find_user(username)
if not user:
flash("Benutzer nicht gefunden.", "error")
return redirect(url_for("verify_account"))
if user_store.email_exists(new_email):
flash("Diese E-Mail-Adresse wird bereits verwendet.", "error")
return redirect(url_for("verify_account", username=username))
new_token = secrets.token_hex(3).upper()
user_store.update_user_email_and_token(username, new_email, new_token)
if send_register_token(new_email, new_token):
flash("E-Mail-Adresse erfolgreich geändert und neuer Code gesendet.", "success")
else:
flash("E-Mail-Adresse geändert, aber der Code konnte nicht gesendet werden.", "error")
return redirect(url_for("verify_account", username=username))
@app.route('/download-sample')
def download_sample():
# Ensure the file is only served from the specific directory