|
from . import db |
|
from flask_login import UserMixin |
|
from werkzeug.security import generate_password_hash, check_password_hash |
|
from datetime import datetime |
|
from .config import Config |
|
|
|
class User(UserMixin, db.Model): |
|
id = db.Column(db.Integer, primary_key=True) |
|
username = db.Column(db.String(64), index=True, unique=True) |
|
password_hash = db.Column(db.String(128)) |
|
embedding_hash = db.Column(db.String(256)) |
|
salt = db.Column(db.String(32)) |
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
last_active = db.Column(db.DateTime, default=datetime.utcnow) |
|
is_admin = db.Column(db.Boolean, default=False) |
|
is_banned = db.Column(db.Boolean, default=False) |
|
storage_limit = db.Column(db.BigInteger, default=Config.DEFAULT_STORAGE_LIMIT) |
|
files = db.relationship('File', backref='owner', lazy='dynamic', cascade="all, delete-orphan") |
|
|
|
def set_password(self, password): |
|
self.password_hash = generate_password_hash(password) |
|
|
|
def check_password(self, password): |
|
return check_password_hash(self.password_hash, password) |
|
|
|
def get_used_storage(self): |
|
return sum(file.size for file in self.files) |
|
|
|
def update_last_active(self): |
|
self.last_active = datetime.utcnow() |
|
db.session.commit() |
|
|
|
class File(db.Model): |
|
id = db.Column(db.Integer, primary_key=True) |
|
filename = db.Column(db.String(256)) |
|
content = db.Column(db.LargeBinary) |
|
size = db.Column(db.BigInteger) |
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) |
|
|
|
from . import login_manager |
|
|
|
@login_manager.user_loader |
|
def load_user(id): |
|
return User.query.get(int(id)) |
|
|