s2-dungeonsandexploits/flask/models/user.py

45 lines
1.4 KiB
Python
Raw Normal View History

2022-11-18 09:04:33 +01:00
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError
from flask_login import UserMixin
from server import db
hasher = PasswordHasher()
class User(UserMixin, db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.Unicode, unique=True, nullable=False)
password = db.Column(db.String, nullable=False)
world = db.Column(db.JSON, nullable=True, default=None)
claimed_base = db.Column(db.JSON, nullable=False, default="")
inventory = db.Column(db.Unicode, nullable=True, default=None)
loaded_world = db.Column(db.JSON, nullable=True, default=None)
def get_id(self):
return str(self.id)
@classmethod
def exists(cls, username):
return cls.query.filter(cls.username == username).first() is not None
@classmethod
def register(cls, username, password, roles=None):
user = cls.query.filter(cls.username == username).first()
if user is None:
user = cls(username=username)
db.session.add(user)
2022-11-18 11:08:08 +01:00
user.password = hasher.hash(password)
2022-11-18 09:04:33 +01:00
db.session.commit()
return user
def verify(self, password):
try:
hasher.verify(self.password, password)
except VerifyMismatchError:
return False
if hasher.check_needs_rehash(self.password):
self.password = hasher.hash(password)
db.session.commit()
return True