aboutsummaryrefslogtreecommitdiff
path: root/app/models.py
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2019-11-22 14:33:22 +0000
committerrubenwardy <rw@rubenwardy.com>2019-11-27 01:06:58 +0000
commit4ce388c8aa5d5502408609983535a9812d41d6d1 (patch)
tree5ad9123949ca2068dfe975284d0f1b3acdf5b437 /app/models.py
parentcb5451fe5d49e0eda379e3cd636c54e8ea1a3f8e (diff)
downloadcheatdb-4ce388c8aa5d5502408609983535a9812d41d6d1.tar.xz
Add API Token creation
Diffstat (limited to 'app/models.py')
-rw-r--r--app/models.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/app/models.py b/app/models.py
index 9a80873..736a0dc 100644
--- a/app/models.py
+++ b/app/models.py
@@ -92,6 +92,7 @@ class Permission(enum.Enum):
CREATE_THREAD = "CREATE_THREAD"
UNAPPROVE_PACKAGE = "UNAPPROVE_PACKAGE"
TOPIC_DISCARD = "TOPIC_DISCARD"
+ CREATE_TOKEN = "CREATE_TOKEN"
# Only return true if the permission is valid for *all* contexts
# See Package.checkPerm for package-specific contexts
@@ -142,6 +143,7 @@ class User(db.Model, UserMixin):
packages = db.relationship("Package", backref="author", lazy="dynamic")
requests = db.relationship("EditRequest", backref="author", lazy="dynamic")
threads = db.relationship("Thread", backref="author", lazy="dynamic")
+ tokens = db.relationship("APIToken", backref="owner", lazy="dynamic")
replies = db.relationship("ThreadReply", backref="author", lazy="dynamic")
def __init__(self, username, active=False, email=None, password=None):
@@ -183,6 +185,11 @@ class User(db.Model, UserMixin):
return user.rank.atLeast(UserRank.MODERATOR)
elif perm == Permission.CHANGE_EMAIL:
return user == self or (user.rank.atLeast(UserRank.MODERATOR) and user.rank.atLeast(self.rank))
+ elif perm == Permission.CREATE_TOKEN:
+ if user == self:
+ return user.rank.atLeast(UserRank.MEMBER)
+ else:
+ return user.rank.atLeast(UserRank.MODERATOR) and user.rank.atLeast(self.rank)
else:
raise Exception("Permission {} is not related to users".format(perm.name))
@@ -776,6 +783,16 @@ class PackageScreenshot(db.Model):
return self.url.replace("/uploads/", ("/thumbnails/{:d}/").format(level))
+class APIToken(db.Model):
+ id = db.Column(db.Integer, primary_key=True)
+ access_token = db.Column(db.String(34), unique=True)
+ name = db.Column(db.String(100), nullable=False)
+ owner_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
+ created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow)
+
+ def canOperateOnPackage(self, package):
+ return packages.count() == 0 or package in packages
+
class EditRequest(db.Model):
id = db.Column(db.Integer, primary_key=True)