implementation of the email systrem and the verification for the user account
This commit is contained in:
+62
-9
@@ -1878,6 +1878,17 @@ def login():
|
||||
stored_user = _normalize_user_doc(stored_user_raw)
|
||||
|
||||
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'))
|
||||
|
||||
session['username'] = stored_user.get("username")
|
||||
session['display_name'] = stored_user.get("display_name") or stored_user.get("username")
|
||||
session['is_admin'] = stored_user.get("is_admin", False)
|
||||
@@ -1889,8 +1900,8 @@ def login():
|
||||
|
||||
if request.is_json:
|
||||
return jsonify({"error": "Invalid credentials"}), 401
|
||||
|
||||
flash('Login fehlgeschlagen. Bitte prüfen Sie Ihre Eingaben.', 'error')
|
||||
get_flashed_messages()
|
||||
|
||||
return render_template('login.html')
|
||||
|
||||
@@ -1934,26 +1945,73 @@ def register():
|
||||
contact_person = _sanitize_text(contact_person, 120)
|
||||
email = _sanitize_text(email, 254)
|
||||
|
||||
from modules.emailservice.email import send_register_token
|
||||
import secrets
|
||||
|
||||
token = secrets.token_hex(3).upper()
|
||||
|
||||
try:
|
||||
existing_users = user_store.get_all_users() or []
|
||||
is_first_user = len(existing_users) == 0
|
||||
|
||||
if not user_store.add_user(username, password, school_name, contact_person, email, marketing_opt_in=marketing_opt_in):
|
||||
if not user_store.add_user(
|
||||
username, password, school_name, contact_person, email,
|
||||
marketing_opt_in=marketing_opt_in,
|
||||
verified=False,
|
||||
verification_token=token
|
||||
):
|
||||
flash("Benutzer konnte nicht erstellt werden.", "error")
|
||||
return redirect(url_for("register"))
|
||||
|
||||
if is_first_user:
|
||||
user_store.make_admin(username)
|
||||
|
||||
email_sent = send_register_token(email, token)
|
||||
if not email_sent:
|
||||
flash("Konto erstellt, aber E-Mail konnte nicht gesendet werden. Bitte Support kontaktieren.", "error")
|
||||
else:
|
||||
flash("Schulregistrierung erfolgreich. Bitte überprüfen Sie Ihre E-Mails für den Bestätigungscode.", "success")
|
||||
|
||||
except Exception:
|
||||
flash("MongoDB ist derzeit nicht erreichbar.", "error")
|
||||
return redirect(url_for("register"))
|
||||
|
||||
flash("Schulregistrierung erfolgreich. Bitte jetzt einloggen.", "success")
|
||||
return redirect(url_for("login"))
|
||||
return redirect(url_for("verify_account", username=username))
|
||||
|
||||
return render_template("register.html")
|
||||
|
||||
|
||||
@app.route("/verify", methods=["GET", "POST"])
|
||||
def verify_account():
|
||||
if request.method == "POST":
|
||||
username = (request.form.get("username") or "").strip()
|
||||
token = (request.form.get("token") or "").strip().upper()
|
||||
|
||||
if not username or not token:
|
||||
flash("Bitte Benutzername und Token eingeben.", "error")
|
||||
return redirect(url_for("verify_account"))
|
||||
|
||||
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. Bitte einloggen.", "success")
|
||||
return redirect(url_for("login"))
|
||||
|
||||
if user.get("verification_token") == token:
|
||||
user_store.verify_user(username)
|
||||
flash("Konto erfolgreich verifiziert! Sie können sich jetzt einloggen.", "success")
|
||||
return redirect(url_for("login"))
|
||||
else:
|
||||
flash("Ungültiger Bestätigungscode. Bitte erneut versuchen.", "error")
|
||||
return redirect(url_for("verify_account", username=username))
|
||||
|
||||
prefilled_username = request.args.get("username", "")
|
||||
return render_template("verify.html", username=prefilled_username)
|
||||
|
||||
|
||||
@app.route('/download-sample')
|
||||
def download_sample():
|
||||
# Ensure the file is only served from the specific directory
|
||||
@@ -1969,11 +2027,6 @@ def preise():
|
||||
return render_template("preise.html")
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
from flask import request, jsonify, session, flash, redirect, url_for, render_template
|
||||
from pymongo.errors import PyMongoError
|
||||
|
||||
|
||||
@app.route('/preise/book-option', methods=['POST'])
|
||||
@login_required
|
||||
def book_option_package():
|
||||
|
||||
Reference in New Issue
Block a user