]> git.lizzy.rs Git - cheatdb.git/blob - app/blueprints/api/support.py
Fix API auth crash and add more error messages
[cheatdb.git] / app / blueprints / api / support.py
1 from app.models import PackageRelease, db, Permission
2 from app.tasks.importtasks import makeVCSRelease
3 from celery import uuid
4 from flask import jsonify, abort, url_for
5 import datetime
6
7
8 def error(status, message):
9         abort(status, jsonify({ "success": False, "error": message }))
10
11
12 def handleCreateRelease(token, package, title, ref):
13         if not token.canOperateOnPackage(package):
14                 return error(403, "API token does not have access to the package")
15
16         if not package.checkPerm(token.owner, Permission.MAKE_RELEASE):
17                 return error(403, "Permission denied. Missing MAKE_RELEASE permission")
18
19         five_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=5)
20         count = package.releases.filter(PackageRelease.releaseDate > five_minutes_ago).count()
21         if count >= 2:
22                 return error(429, "Too many requests, please wait before trying again")
23
24         rel = PackageRelease()
25         rel.package = package
26         rel.title   = title
27         rel.url     = ""
28         rel.task_id = uuid()
29         rel.min_rel = None
30         rel.max_rel = None
31         db.session.add(rel)
32         db.session.commit()
33
34         makeVCSRelease.apply_async((rel.id, ref), task_id=rel.task_id)
35
36         return jsonify({
37                 "success": True,
38                 "task": url_for("tasks.check", id=rel.task_id),
39                 "release": rel.getAsDictionary()
40         })