contentdb/app/blueprints/api/support.py

48 lines
1.4 KiB
Python
Raw Normal View History

2021-01-30 18:10:38 +01:00
import datetime
2020-01-24 21:21:40 +01:00
from celery import uuid
2020-05-19 18:24:57 +02:00
from flask import jsonify, abort, make_response, url_for
2021-01-30 18:10:38 +01:00
from app.models import PackageRelease, db, Permission
from app.tasks.importtasks import makeVCSRelease
from app.utils import AuditSeverity, addAuditLog
2020-01-24 21:21:40 +01:00
def error(status, message):
2020-05-19 18:24:57 +02:00
abort(make_response(jsonify({ "success": False, "error": message }), status))
2020-01-24 21:21:40 +01:00
2021-01-30 18:10:38 +01:00
def handleCreateRelease(token, package, title, ref, reason="API"):
2020-01-24 21:21:40 +01:00
if not token.canOperateOnPackage(package):
return error(403, "API token does not have access to the package")
if not package.checkPerm(token.owner, Permission.MAKE_RELEASE):
return error(403, "Permission denied. Missing MAKE_RELEASE permission")
five_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=5)
count = package.releases.filter(PackageRelease.releaseDate > five_minutes_ago).count()
if count >= 2:
return error(429, "Too many requests, please wait before trying again")
rel = PackageRelease()
rel.package = package
rel.title = title
rel.url = ""
rel.task_id = uuid()
rel.min_rel = None
rel.max_rel = None
db.session.add(rel)
2021-01-30 18:10:38 +01:00
msg = "Created release {} ({})".format(rel.title, reason)
addAuditLog(AuditSeverity.NORMAL, token.owner, msg, package.getDetailsURL(), package)
2020-01-24 21:21:40 +01:00
db.session.commit()
makeVCSRelease.apply_async((rel.id, ref), task_id=rel.task_id)
return jsonify({
"success": True,
"task": url_for("tasks.check", id=rel.task_id),
"release": rel.getAsDictionary()
})