60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
from . import db
|
|
from datetime import datetime
|
|
import hashlib
|
|
|
|
class AdminConfig(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
password_hash = db.Column(db.String(64), nullable=False)
|
|
last_updated = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
@classmethod
|
|
def check_password(cls, password):
|
|
"""Check if the provided password matches the stored hash"""
|
|
admin = cls.query.first()
|
|
if not admin:
|
|
return False
|
|
|
|
# Create hash from input password
|
|
hash_input = hashlib.sha256(password.encode()).hexdigest()
|
|
|
|
# Compare with stored hash
|
|
return hash_input == admin.password_hash
|
|
|
|
@classmethod
|
|
def set_password(cls, password):
|
|
"""Set a new admin password"""
|
|
admin = cls.query.first()
|
|
|
|
# Create hash from the password
|
|
password_hash = hashlib.sha256(password.encode()).hexdigest()
|
|
|
|
if admin:
|
|
admin.password_hash = password_hash
|
|
admin.last_updated = datetime.utcnow()
|
|
else:
|
|
admin = cls(password_hash=password_hash)
|
|
db.session.add(admin)
|
|
|
|
db.session.commit()
|
|
return True
|
|
|
|
|
|
class Game(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
igdb_id = db.Column(db.Integer, unique=True, nullable=False)
|
|
name = db.Column(db.String(100), nullable=False)
|
|
cover_url = db.Column(db.String(255))
|
|
description = db.Column(db.Text)
|
|
release_date = db.Column(db.DateTime)
|
|
platform = db.Column(db.String(100))
|
|
developer = db.Column(db.String(100))
|
|
publisher = db.Column(db.String(100))
|
|
status = db.Column(db.String(20), default="Playing") # Playing, Completed, On Hold
|
|
progress = db.Column(db.Integer, default=0) # 0-100%
|
|
notes = db.Column(db.Text)
|
|
date_added = db.Column(db.DateTime, default=datetime.utcnow)
|
|
last_updated = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
def __repr__(self):
|
|
return f'<Game {self.name}>'
|