summaryrefslogtreecommitdiffstats
path: root/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'models.py')
-rw-r--r--models.py79
1 files changed, 79 insertions, 0 deletions
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"))