diff --git a/files/routes/posts.py b/files/routes/posts.py
index fc4b6ad2e..dcef99cf3 100644
--- a/files/routes/posts.py
+++ b/files/routes/posts.py
@@ -532,11 +532,8 @@ def submit_post(v:User, sub=None):
title = sanitize_raw_title(request.values.get("title", ""))
body = sanitize_raw_body(request.values.get("body", ""), True)
- def error(error):
- return {"error": error}, 400
-
if not title:
- return error("Please enter a better title!")
+ abort(400, "Please enter a better title!")
sub = request.values.get("sub", "").lower().replace('/h/','').strip()
@@ -546,36 +543,33 @@ def submit_post(v:User, sub=None):
torture = (v.agendaposter and not v.marseyawarded and sub != 'chudrama')
title_html = filter_emojis_only(title, graceful=True, count_marseys=True, torture=torture)
if v.marseyawarded and not marseyaward_title_regex.fullmatch(title_html):
- return error("You can only type marseys!")
+ abort(400, "You can only type marseys!")
if len(title_html) > POST_TITLE_HTML_LENGTH_LIMIT:
- return error("Rendered title is too big!")
+ abort(400, "Rendered title is too big!")
if sub == 'changelog' and not v.admin_level >= PERMS['POST_TO_CHANGELOG']:
- # we also allow 'code contributor' badgeholders to post to the changelog hole
- allowed = g.db.query(Badge.user_id).filter_by(badge_id=3).all()
- allowed = [x[0] for x in allowed]
- if v.id not in allowed: return error("You don't have sufficient permissions to post in /h/changelog")
+ abort(400, "You don't have sufficient permissions to post in /h/changelog")
if sub in {'furry','vampire','racist','femboy'} and not v.client and not v.house.lower().startswith(sub):
- return error(f"You need to be a member of House {sub.capitalize()} to post in /h/{sub}")
+ abort(400, f"You need to be a member of House {sub.capitalize()} to post in /h/{sub}")
if sub and sub != 'none':
sname = sub.strip().lower()
sub = g.db.query(Sub.name).filter_by(name=sname).one_or_none()
- if not sub: return error(f"/h/{sname} not found!")
+ if not sub: abort(400, f"/h/{sname} not found!")
sub = sub[0]
- if v.exiled_from(sub): return error(f"You're exiled from /h/{sub}")
+ if v.exiled_from(sub): abort(400, f"You're exiled from /h/{sub}")
else: sub = None
if not sub and HOLE_REQUIRED:
- return error(f"You must choose a {HOLE_NAME} for your post!")
+ abort(400, f"You must choose a {HOLE_NAME} for your post!")
- if v.is_suspended: return error("You can't perform this action while banned!")
+ if v.is_suspended: abort(400, "You can't perform this action while banned!")
if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')):
- return error("You have to type more than 280 characters!")
+ abort(400, "You have to type more than 280 characters!")
elif v.bird and len(body) > 140:
- return error("You have to type less than 140 characters!")
+ abort(400, "You have to type less than 140 characters!")
embed = None
@@ -621,7 +615,7 @@ def submit_post(v:User, sub=None):
banned_domains = g.db.query(BannedDomain).all()
for x in banned_domains:
if y.startswith(x.domain):
- return error(f'Remove the banned link "{x.domain}" and try again!
Reason for link ban: "{x.reason}"')
+ abort(400, f'Remove the banned link "{x.domain}" and try again!
Reason for link ban: "{x.reason}"')
if "twitter.com" == domain:
try:
@@ -637,7 +631,7 @@ def submit_post(v:User, sub=None):
if not url and not body and not request.files.get("file") and not request.files.get("file-url"):
- return error("Please enter a url or some text!")
+ abort(400, "Please enter a url or some text!")
if not IS_LOCALHOST:
dup = g.db.query(Submission).filter(
@@ -653,7 +647,7 @@ def submit_post(v:User, sub=None):
return redirect("/notifications")
if len(url) > 2048:
- return error("There's a 2048 character limit for URLs!")
+ abort(400, "There's a 2048 character limit for URLs!")
body, bets, options, choices = sanitize_poll_options(v, body, True)
@@ -665,10 +659,10 @@ def submit_post(v:User, sub=None):
body_html = sanitize(body, count_marseys=True, limit_pings=100, showmore=False, torture=torture)
if v.marseyawarded and marseyaward_body_regex.search(body_html):
- return error("You can only type marseys!")
+ abort(400, "You can only type marseys!")
if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT:
- return error(f"Submission body_html too long!")
+ abort(400, f"Submission body_html too long!")
flag_notify = (request.values.get("notify", "on") == "on")
flag_new = request.values.get("new", False, bool) or 'megathread' in title.lower()