diff --git a/drama/helpers/wrappers.py b/drama/helpers/wrappers.py index a1ff5a302..d19caf5b4 100644 --- a/drama/helpers/wrappers.py +++ b/drama/helpers/wrappers.py @@ -261,4 +261,49 @@ def no_cors(f): return resp wrapper.__name__ = f.__name__ - return wrapper \ No newline at end of file + return wrapper + + +def api(*scopes, no_ban=False): + + def wrapper_maker(f): + + def wrapper(*args, **kwargs): + + if request.path.startswith(('/api/v1','/api/v2')): + + v = kwargs.get('v') + + result = f(*args, **kwargs) + + if isinstance(result, dict): + resp = result['api']() + else: + resp = result + + if not isinstance(resp, RespObj): + resp = make_response(resp) + + return resp + + else: + + result = f(*args, **kwargs) + + if not isinstance(result, dict): + return result + + try: + if request.path.startswith('/inpage/'): + return result['inpage']() + elif request.path.startswith(('/api/vue/','/test/')): + return result['api']() + else: + return result['html']() + except KeyError: + return result + + wrapper.__name__ = f.__name__ + return wrapper + + return wrapper_maker \ No newline at end of file diff --git a/drama/routes/comments.py b/drama/routes/comments.py index 91257e756..e93402f88 100644 --- a/drama/routes/comments.py +++ b/drama/routes/comments.py @@ -159,9 +159,11 @@ def post_pid_comment_cid(cid, pid=None, anything=None, v=None): @app.post("/api/comment") +@app.post("/api/v1/comment") @limiter.limit("6/minute") @is_not_banned @validate_formkey +@api("create") def api_comment(v): parent_submission = request.form.get("submission") @@ -548,12 +550,15 @@ def api_comment(v): v.comment_count = v.comments.filter(Comment.parent_submission != None).filter_by(is_banned=False, deleted_utc=0).count() g.db.add(v) - if request.headers.get("Authorization"): return c.json - else: return render_template("comments.html", - v=v, - comments=[c], - render_replies=False, - ) + + return {"html": lambda: jsonify({"html": render_template("comments.html", + v=v, + comments=[c], + render_replies=False, + )}), + "api": lambda: c.json + } +