Add email column

This commit is contained in:
Michał Gdula 2023-06-13 17:51:57 +03:00
parent 3d9b387ea8
commit c299450d1c
5 changed files with 36 additions and 8 deletions

View file

@ -7,7 +7,7 @@ from werkzeug.security import generate_password_hash, check_password_hash
from server.extensions import db from server.extensions import db
from server.models import Users, Sessions from server.models import Users, Sessions
from server.config import USER_REGEX from server.config import USER_REGEX, USER_EMAIL_REGEX
blueprint = Blueprint("auth", __name__) blueprint = Blueprint("auth", __name__)
@ -22,16 +22,18 @@ def auth():
def register(): def register():
# Get the form data # Get the form data
username = request.form["username"].strip() username = request.form["username"].strip()
email = request.form["email"].strip()
password = request.form["password"].strip() password = request.form["password"].strip()
username_regex = re.compile(USER_REGEX)
username_regex = re.compile(USER_REGEX)
email_regex = re.compile(USER_EMAIL_REGEX)
error = [] error = []
# Validate the form # Validate the form
if not username or not username_regex.match(username): if not username or not username_regex.match(username):
error.append( error.append("Username is invalid! Must be alphanumeric, and can contain ._-")
"Username is empty or invalid! Must be alphanumeric, and can contain ._-" if not email or not email_regex.match(email):
) error.append("Email is invalid! Must be email format")
if not password: if not password:
error.append("Password is empty!") error.append("Password is empty!")
elif len(password) < 8: elif len(password) < 8:
@ -48,6 +50,7 @@ def register():
register_user = Users( register_user = Users(
alt_id=str(uuid.uuid4()), alt_id=str(uuid.uuid4()),
username=username, username=username,
email=generate_password_hash(email, method="scrypt"),
password=generate_password_hash(password, method="scrypt"), password=generate_password_hash(password, method="scrypt"),
) )
db.session.add(register_user) db.session.add(register_user)

View file

@ -7,6 +7,7 @@ GAME_DIFFICULTIES = [0, 1, 2, 3, 4]
USER_MAX_TOKENS = 3 USER_MAX_TOKENS = 3
USER_REGEX = r"\b[A-Za-z0-9._-]+\b" USER_REGEX = r"\b[A-Za-z0-9._-]+\b"
USER_EMAIL_REGEX = r"[^@]+@[^@]+\.[^@]+"
MAX_TOP_SCORES = 15 MAX_TOP_SCORES = 15
MAX_SEARCH_RESULTS = 5 MAX_SEARCH_RESULTS = 5

View file

@ -56,6 +56,23 @@ class Sessions(db.Model):
) )
class Reset(db.Model):
"""
Password reset table
"""
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
reset_key = db.Column(db.String, nullable=False, unique=True)
created_at = db.Column(
db.DateTime,
nullable=False,
server_default=db.func.now(),
)
class Users(db.Model, UserMixin): class Users(db.Model, UserMixin):
""" """
User table User table
@ -65,7 +82,9 @@ class Users(db.Model, UserMixin):
alt_id = db.Column(db.String, nullable=False, unique=True) alt_id = db.Column(db.String, nullable=False, unique=True)
username = db.Column(db.String(32), unique=True, nullable=False) username = db.Column(db.String(32), unique=True, nullable=False)
email = db.Column(db.String, unique=True, nullable=False)
password = db.Column(db.String, nullable=False) password = db.Column(db.String, nullable=False)
joined_at = db.Column( joined_at = db.Column(
db.DateTime, db.DateTime,
nullable=False, nullable=False,

View file

@ -20,13 +20,18 @@
<div class="block"> <div class="block">
<h2>Register</h2> <h2>Register</h2>
<p>Don't have an account? Register here!</p> <p>Don't have an account?</p>
<form action="{{ url_for('auth.register') }}" method="POST"> <form action="{{ url_for('auth.register') }}" method="POST">
<span class="text-input"> <span class="text-input">
<label for="register-username">Username</label> <label for="register-username">Username</label>
<input type="text" name="username" placeholder="Jerry" id="register-username" required> <input type="text" name="username" placeholder="Jerry" id="register-username" required>
</span> </span>
<span class="text-input">
<label for="register-email">Username</label>
<input type="text" name="email" placeholder="jerry@example.com" id="register-email" required>
</span>
<span class="text-input"> <span class="text-input">
<label for="register-password">Password</label> <label for="register-password">Password</label>
<input type="password" name="password" placeholder="password123" id="register-password" required> <input type="password" name="password" placeholder="password123" id="register-password" required>

View file

@ -21,8 +21,8 @@ services:
db: db:
image: postgres:alpine image: postgres:alpine
restart: unless-stopped restart: unless-stopped
ports: # ports:
- "5432:5432" # - "5432:5432"
volumes: volumes:
- ./Postgres/data:/var/lib/postgresql/data - ./Postgres/data:/var/lib/postgresql/data
environment: environment: