Added signup form and functionality

This commit is contained in:
2025-02-17 18:02:07 +01:00
parent 809b9dc638
commit 93bb9335a2
4 changed files with 165 additions and 37 deletions

View File

@ -3,6 +3,7 @@ from flask_login import login_user, logout_user
from app.models.users import User
from datetime import datetime, timedelta
from app.models import db
import re
import sys
@ -42,4 +43,41 @@ def login():
def logout():
logout_user()
flash('You have been logged out.', 'info')
return redirect(url_for('main.login_route'))
def signup():
username = request.form.get('username')
email = request.form.get('email')
password = request.form.get('password')
# Server-side validation
if len(username) < 5:
flash('Username must be at least 5 characters long', 'danger')
return redirect(url_for('main.login_route'))
email_regex = r'^[a-zA-Z][a-zA-Z0-9._-]*@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_regex, email):
flash('Please enter a valid email address', 'danger')
return redirect(url_for('main.login_route'))
password_regex = r'^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{8,}$'
if not re.match(password_regex, password):
flash('Password must be at least 8 characters long and contain a number and a special character', 'danger')
return redirect(url_for('main.login_route'))
# Check if username or email already exists
if User.query.filter_by(username=username).first():
flash('Username already exists', 'danger')
return redirect(url_for('main.login_route'))
if User.query.filter_by(email=email).first():
flash('Email already exists', 'danger')
return redirect(url_for('main.login_route'))
# Create new user
new_user = User(username=username, email=email, password=password)
db.session.add(new_user)
db.session.commit()
flash('Account created successfully! Please login.', 'success')
return redirect(url_for('main.login_route'))