remembering logins + tokens

This commit is contained in:
CEF Server 2024-11-28 02:54:10 +00:00
parent 83404812d0
commit 6871aa2449
5 changed files with 242 additions and 19 deletions

View file

@ -1,8 +1,8 @@
from typing import Optional
from typing import List, Optional
from sqlalchemy import CHAR, Index, String, TIMESTAMP, text
from sqlalchemy import CHAR, ForeignKeyConstraint, Index, String, TIMESTAMP, text
from sqlalchemy.dialects.mysql import INTEGER, TINYINT
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
import datetime
class Base(DeclarativeBase):
@ -39,3 +39,38 @@ class Users(Base):
created_at: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP, server_default=text('current_timestamp()'))
temporary: Mapped[Optional[int]] = mapped_column(TINYINT(1), server_default=text('1'))
invite_code: Mapped[Optional[str]] = mapped_column(String(32))
invited_by: Mapped[Optional[str]] = mapped_column(String(64))
sessions: Mapped[List['Sessions']] = relationship('Sessions', back_populates='users')
tokens: Mapped[List['Tokens']] = relationship('Tokens', back_populates='users')
class Sessions(Base):
__tablename__ = 'sessions'
__table_args__ = (
ForeignKeyConstraint(['username'], ['users.username'], ondelete='CASCADE', name='sessions_ibfk_1'),
Index('ix_sessions_username', 'username')
)
id: Mapped[int] = mapped_column(INTEGER(11), primary_key=True)
username: Mapped[Optional[str]] = mapped_column(String(64))
hash: Mapped[Optional[str]] = mapped_column(String(128))
expiry: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP)
users: Mapped['Users'] = relationship('Users', back_populates='sessions')
class Tokens(Base):
__tablename__ = 'tokens'
__table_args__ = (
ForeignKeyConstraint(['username'], ['users.username'], ondelete='CASCADE', name='token_username_fk'),
Index('ix_tokens_username', 'username')
)
id: Mapped[int] = mapped_column(INTEGER(11), primary_key=True)
username: Mapped[Optional[str]] = mapped_column(String(64))
hash: Mapped[Optional[str]] = mapped_column(String(128))
name: Mapped[Optional[str]] = mapped_column(String(128))
created_at: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP, server_default=text('current_timestamp()'))
users: Mapped['Users'] = relationship('Users', back_populates='tokens')