from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship from main import db from werkzeug.security import generate_password_hash, check_password_hash from flask_login import UserMixin def create_new_session(user: User) -> Session: return class User(UserMixin, db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) password_hash = db.Column(db.Text) user_name = db.Column(db.Text, unique=True) is_admin = db.Column(db.Boolean) sessions = relationship("Session", back_populates="user") def set_password(self, newPassword: str): self.password_hash = generate_password_hash(newPassword) def test_password(self, password: str) -> bool: return check_password_hash(self.password_hash, password) def to_dict(self): return { "id": self.id, "username": self.user_name, "authenticated": self.is_authenticated, "is_admin": self.is_admin } class Session(db.Model): __tableanme__ = "sessions" session_id = db.Column(db.Text, primary_key=True) parent_id = db.Column(db.Integer, ForeignKey("users.id")) issue_timestamp = db.Column(db.Integer) user = relationship("User", back_populates="sessions") def session_active(self): return True