Jun 26 - Implement registration function for user to register account

This commit is contained in:
2026-06-26 13:40:34 -04:00
parent a47335110c
commit adb39a4aa8
7 changed files with 210 additions and 5 deletions
+18 -3
View File
@@ -17,10 +17,12 @@ admin_settings_bp = Blueprint("admin_settings", __name__, url_prefix="/admin/set
@admin_settings_bp.route("/")
@admin_required
def settings():
email_settings = get_settings_dict("email.")
groq_settings = get_settings_dict("groq.")
email_settings = get_settings_dict("email.")
groq_settings = get_settings_dict("groq.")
registration_settings = get_settings_dict("registration.")
return render_template("admin/settings.html",
email=email_settings, groq=groq_settings)
email=email_settings, groq=groq_settings,
registration=registration_settings)
@admin_settings_bp.route("/email", methods=["POST"])
@@ -58,6 +60,19 @@ def save_groq():
return redirect(url_for("admin_settings.settings"))
@admin_settings_bp.route("/registration", methods=["POST"])
@admin_required
def save_registration():
admin = session["user"]
enabled = "1" if request.form.get("registration_enabled") == "1" else "0"
set_setting("registration.enabled", enabled)
log_action(admin["id"], "UPDATE_REGISTRATION_SETTINGS", "app_settings", None,
f"User self-registration {'enabled' if enabled == '1' else 'disabled'}.")
flash(f"Registration {'enabled' if enabled == '1' else 'disabled'} successfully.", "success")
logger.info(f"Registration setting set to '{enabled}' by admin_id={admin['id']}.")
return redirect(url_for("admin_settings.settings"))
@admin_settings_bp.route("/test-email", methods=["POST"])
@admin_required
def test_email():
+48 -2
View File
@@ -8,8 +8,9 @@ from models import (
authenticate, check_login_allowed, change_password, log_action,
get_user_by_email, create_password_reset_token,
get_password_reset_user, consume_password_reset_token,
purge_expired_reset_tokens, update_user_profile,
purge_expired_reset_tokens, update_user_profile, register_user,
)
from config import get_setting
from utils.decorators import login_required
from utils.email import send_email
@@ -59,7 +60,52 @@ def login():
else:
error = "Invalid username or password."
return render_template("login.html", error=error)
reg_enabled = get_setting("registration.enabled", "0") == "1"
return render_template("login.html", error=error, reg_enabled=reg_enabled)
@auth_bp.route("/register", methods=["GET", "POST"])
def register():
if "user" in session:
return redirect(url_for("index"))
if get_setting("registration.enabled", "0") != "1":
flash("Registration is currently disabled. Contact your administrator.", "warning")
return redirect(url_for("auth.login"))
if request.method == "GET":
return render_template("register.html")
username = request.form.get("username", "").strip()
full_name = request.form.get("full_name", "").strip()
email = request.form.get("email", "").strip().lower()
password = request.form.get("password", "")
confirm = request.form.get("confirm_password", "")
errors = []
if not username or len(username) < 3:
errors.append("Username must be at least 3 characters.")
if len(password) < 8:
errors.append("Password must be at least 8 characters.")
if password != confirm:
errors.append("Passwords do not match.")
if errors:
return render_template("register.html", errors=errors,
username=username, full_name=full_name, email=email)
try:
new_id = register_user(username, password, full_name, email or None)
logger.info(f"New user registered: '{username}' id={new_id}.")
flash("Account created successfully. You can now sign in.", "success")
return redirect(url_for("auth.login"))
except ValueError as e:
return render_template("register.html", errors=[str(e)],
username=username, full_name=full_name, email=email)
except Exception as e:
logger.error(f"register error: {e}")
return render_template("register.html",
errors=["An unexpected error occurred. Please try again."],
username=username, full_name=full_name, email=email)
@auth_bp.route("/logout")