Jun 26 - Implement registration function for user to register account
This commit is contained in:
@@ -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
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user