From 3c92a2e5fc0e1d04c8ec8199db319d3a575fcfe5 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Fri, 16 Jan 2026 17:09:18 +0000 Subject: Initial commit --- models.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 models.py (limited to 'models.py') diff --git a/models.py b/models.py new file mode 100644 index 0000000..9fcbccd --- /dev/null +++ b/models.py @@ -0,0 +1,79 @@ +from flask_sqlalchemy import SQLAlchemy +from CTFd.models import Users +import time +import secrets + +db = SQLAlchemy() + + +class OIDCConfig(db.Model): + __tablename__ = "oidc_config" + + id = db.Column(db.Integer, primary_key=True) + key = db.Column(db.String(64), unique=True, nullable=False) + value = db.Column(db.Text, nullable=False) + created = db.Column(db.Integer, default=lambda: int(time.time())) + + +class OIDCClient(db.Model): + __tablename__ = 'oidc_client' + + client_id = db.Column(db.String(32), primary_key=True) + client_secret = db.Column(db.String(128), nullable=True) + redirect_uris = db.Column(db.Text, nullable=False) + pkce = db.Column(db.Boolean, default=False, nullable=False) + created = db.Column(db.Integer, default=lambda: int(time.time())) + + +class OIDCAuthCode(db.Model): + __tablename__ = 'oidc_auth_code' + + id = db.Column(db.Integer, primary_key=True) + code = db.Column(db.String(128), unique=True, nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey(Users.id, ondelete='CASCADE'), nullable=False) + client_id = db.Column(db.String(32), db.ForeignKey(OIDCClient.client_id, ondelete='CASCADE'), nullable=False) + redirect_uri = db.Column(db.Text, nullable=False) + code_challenge = db.Column(db.String(128), nullable=True) + exp = db.Column(db.Integer, nullable=False) + + user = db.relationship(Users, backref=db.backref("oidc_auth_code", uselist=False, lazy="select")) + client = db.relationship(OIDCClient, backref=db.backref("oidc_auth_code", uselist=False, lazy="select")) + + +class OIDCRefreshToken(db.Model): + __tablename__ = 'oidc_refresh_token' + + id = db.Column(db.Integer, primary_key=True) + refresh_token = db.Column(db.String(128), unique=True, nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey(Users.id, ondelete='CASCADE'), nullable=False) + client_id = db.Column(db.String(32), db.ForeignKey(OIDCClient.client_id, ondelete='CASCADE'), nullable=False) + exp = db.Column(db.Integer, nullable=False) + + user = db.relationship(Users, backref=db.backref("oidc_refresh_token", uselist=False, lazy="select")) + client = db.relationship(OIDCClient, backref=db.backref("oidc_refresh_token", uselist=False, lazy="select")) + + +class OIDCAccessToken(db.Model): + __tablename__ = 'oidc_access_token' + + id = db.Column(db.Integer, primary_key=True) + access_token = db.Column(db.String(128), unique=True, nullable=False) + user_id = db.Column(db.Integer, db.ForeignKey(Users.id, ondelete='CASCADE'), nullable=False) + client_id = db.Column(db.String(32), db.ForeignKey(OIDCClient.client_id, ondelete='CASCADE'), nullable=False) + exp = db.Column(db.Integer, nullable=False) + + user = db.relationship(Users, backref=db.backref("oidc_access_token", uselist=False, lazy="select")) + client = db.relationship(OIDCClient, backref=db.backref("oidc_access_token", uselist=False, lazy="select")) + + +class OIDCKey(db.Model): + __tablename__ = 'oidc_key' + + id = db.Column(db.Integer, primary_key=True) + kid = db.Column(db.String(32), unique=True, nullable=False) + private_pem = db.Column(db.Text, nullable=False) + public_pem = db.Column(db.Text, nullable=False) + created = db.Column(db.Integer, default=lambda: int(time.time())) + client_id = db.Column(db.String(32), db.ForeignKey(OIDCClient.client_id, ondelete='CASCADE'), nullable=False) + + client = db.relationship(OIDCClient, backref=db.backref("oidc_key", uselist=False, lazy="select")) -- cgit v1.2.3-70-g09d2