48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
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
|