diff --git a/src/discord_auth.py b/src/discord_auth.py index 5d92e40..accdeb6 100644 --- a/src/discord_auth.py +++ b/src/discord_auth.py @@ -12,6 +12,7 @@ # Local module imports from .discord_oauth import Discord_Oauth +from .discord_database import DiscordUser # Global variables # Used primarily due to flask routed functions being unable to use class "self" reflections @@ -147,6 +148,9 @@ def load(app): base_asset_path = os.path.dirname(os.path.realpath(__file__)) + "/../assets/" register_plugin_assets_directory(app, base_path=base_asset_path) + # DB Setup + app.db.create_all() + # Registration override_page(base_asset_path, "login.html") override_page(base_asset_path, "users/private.html") diff --git a/src/discord_database.py b/src/discord_database.py new file mode 100644 index 0000000..3add913 --- /dev/null +++ b/src/discord_database.py @@ -0,0 +1,19 @@ +from CTFd.models import db + + +class DiscordUser(db.Model): + __tablename__ = "discorduser" + __table_args__ = (db.UniqueConstraint("id"), {}) + + # Core variables + id = db.Column(db.BigInteger, primary_key=True, unique=True) # Discord ID, int64 + # Discord Username 2-32 characters + username = db.Column(db.String(128), db.ForeignKey("users.name", ondelete="CASCADE")) + discriminator = db.Column(db.Integer) # Discriminator ID, 4 digits + avatar_hash = db.Column(db.String(256)) # Avatar hash, no known limit, 33 from samples + mfa_enabled = db.Column(db.Boolean) + verified = db.Column(db.Boolean) + email = db.Column(db.String(256)) + + def __init__(self, **kwargs): + super(DiscordUser, self).__init__(**kwargs)