diff --git a/otterwiki/auth.py b/otterwiki/auth.py index 71a1d22..9a0cb7d 100644 --- a/otterwiki/auth.py +++ b/otterwiki/auth.py @@ -20,7 +20,7 @@ from otterwiki.server import app, db from otterwiki.helper import toast, send_mail, serialize, deserialize, SerializeError from otterwiki.util import random_password, empty -from otterwiki.models import TimeStamp +from otterwiki.models import User as UserModel from datetime import datetime import hmac @@ -39,33 +39,8 @@ def check_password_hash_backport(pwhash, password): class SimpleAuth: - # User Model - class User(UserMixin, db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(128)) - email = db.Column(db.String(128), index=True, unique=True) - password_hash = db.Column(db.String(512)) - first_seen = db.Column(TimeStamp()) - last_seen = db.Column(TimeStamp()) - is_approved = db.Column(db.Boolean(), default=False) - is_admin = db.Column(db.Boolean(), default=False) - email_confirmed = db.Column(db.Boolean(), default=False) - allow_read = db.Column(db.Boolean(), default=False) - allow_write = db.Column(db.Boolean(), default=False) - allow_upload = db.Column(db.Boolean(), default=False) - - def __repr__(self): - permissions = "" - if self.allow_read: permissions+="R" - if self.allow_write: permissions+="W" - if self.allow_upload: permissions+="U" - if self.is_admin: permissions+="A" - return f"' {permissions}>" - - def __init__(self): - with app.app_context(): - # create tables - db.create_all() + class User(UserMixin, UserModel): + pass def user_loader(self, id): return self.User.query.filter_by(id=int(id)).first() diff --git a/otterwiki/models.py b/otterwiki/models.py index 1a5a929..7e3ed38 100644 --- a/otterwiki/models.py +++ b/otterwiki/models.py @@ -5,6 +5,7 @@ __all__ = ['Preferences', 'Drafts'] + class TimeStamp(db.types.TypeDecorator): # thanks to https://mike.depalatis.net/blog/sqlalchemy-timestamps.html impl = db.types.DateTime @@ -22,6 +23,7 @@ def process_result_value(self, value, dialect): return value.astimezone(UTC) + class Preferences(db.Model): name = db.Column(db.String(256), primary_key=True) value = db.Column(db.Text) @@ -29,6 +31,7 @@ class Preferences(db.Model): def __str__(self): return '{}: {}'.format(self.name, self.value) + class Drafts(db.Model): id = db.Column(db.Integer, primary_key=True) pagepath = db.Column(db.String(2048), index=True) @@ -40,3 +43,29 @@ class Drafts(db.Model): datetime = db.Column(TimeStamp()) +class User(db.Model): + __tablename__ = "user" + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(128)) + email = db.Column(db.String(128), index=True, unique=True) + password_hash = db.Column(db.String(512)) + first_seen = db.Column(TimeStamp()) + last_seen = db.Column(TimeStamp()) + is_approved = db.Column(db.Boolean(), default=False) + is_admin = db.Column(db.Boolean(), default=False) + email_confirmed = db.Column(db.Boolean(), default=False) + allow_read = db.Column(db.Boolean(), default=False) + allow_write = db.Column(db.Boolean(), default=False) + allow_upload = db.Column(db.Boolean(), default=False) + + def __repr__(self): + permissions = "" + if self.allow_read: + permissions += "R" + if self.allow_write: + permissions += "W" + if self.allow_upload: + permissions += "U" + if self.is_admin: + permissions += "A" + return f"' {permissions}>"