Added signup form and functionality
This commit is contained in:
@ -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'))
|
Reference in New Issue
Block a user