Updates the user registration and new account creation endpoints to require email confirmation. - Sets the 'confirmed' flag to 'false' by default for all new user accounts. - Generates a unique confirmation token for each new user. - Logs the confirmation link to the console for development purposes. This change ensures that users cannot log in without first verifying their email address, enhancing account security.
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
from sqlalchemy import Column, Integer, String, TIMESTAMP, TEXT, VARCHAR
|
|
from datetime import datetime, timezone
|
|
from . import Base
|
|
|
|
class Account_User(Base):
|
|
__tablename__ = 'portal_user'
|
|
__table_args__ = {"schema": "public"}
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True, unique=True)
|
|
username = Column(String(50))
|
|
account_number = Column(String(32))
|
|
house_number = Column(String(32))
|
|
email = Column(VARCHAR(350))
|
|
password_hash = Column(TEXT)
|
|
member_since = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc))
|
|
last_seen = Column(TIMESTAMP(timezone=True), default=lambda: datetime.now(timezone.utc))
|
|
password_reset_token = Column(TEXT, nullable=True)
|
|
password_reset_expires = Column(TIMESTAMP(timezone=True), nullable=True)
|
|
confirmation_token = Column(TEXT, nullable=True)
|
|
confirmation_sent_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
|
confirmed_at = Column(TIMESTAMP(timezone=True), nullable=True)
|
|
admin = Column(Integer)
|
|
admin_role = Column(Integer)
|
|
confirmed = Column(Integer)
|
|
active = Column(Integer, default=1)
|
|
user_id = Column(Integer, nullable=True) # References Customer_Customer.id
|
|
|
|
def __init__(self,
|
|
username,
|
|
account_number,
|
|
house_number,
|
|
password_hash,
|
|
member_since,
|
|
email,
|
|
last_seen,
|
|
admin,
|
|
admin_role,
|
|
confirmed,
|
|
active=1,
|
|
user_id=None,
|
|
confirmation_token=None,
|
|
confirmation_sent_at=None,
|
|
confirmed_at=None
|
|
):
|
|
self.username = username
|
|
self.account_number = account_number
|
|
self.house_number = house_number
|
|
self.password_hash = password_hash
|
|
self.member_since = member_since
|
|
self.email = email
|
|
self.last_seen = last_seen
|
|
self.admin = admin
|
|
self.admin_role = admin_role
|
|
self.confirmed = confirmed
|
|
self.active = active
|
|
self.user_id = user_id
|
|
self.confirmation_token = confirmation_token
|
|
self.confirmation_sent_at = confirmation_sent_at
|
|
self.confirmed_at = confirmed_at
|
|
|
|
def is_authenticated(self):
|
|
return True
|
|
|
|
def is_active(self):
|
|
return True
|
|
|
|
def is_anonymous(self):
|
|
return False
|
|
|
|
def get_id(self):
|
|
return str(self.id)
|