From ff73022863c64ec9708a39415cde209d0a91fc78 Mon Sep 17 00:00:00 2001 From: Aevann Date: Wed, 1 Mar 2023 00:22:59 +0200 Subject: [PATCH] mive /edit_post and /edit_comment to the bottom --- files/routes/comments.py | 153 ++++++++++++++++----------------- files/routes/posts.py | 181 +++++++++++++++++++-------------------- 2 files changed, 166 insertions(+), 168 deletions(-) diff --git a/files/routes/comments.py b/files/routes/comments.py index d61ed9def..7a6080161 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -374,83 +374,6 @@ def comment(v:User): if v.client: return c.json(db=g.db) return {"comment": render_template("comments.html", v=v, comments=[c])} -@app.post("/edit_comment/") -@limiter.limit('1/second', scope=rpath) -@limiter.limit("10/minute;100/hour;200/day") -@limiter.limit("10/minute;100/hour;200/day", key_func=get_ID) -@is_not_permabanned -def edit_comment(cid, v): - c = get_comment(cid, v=v) - - if time.time() - c.created_utc > 7*24*60*60 and not (c.post and c.post.private): - abort(403, "You can't edit comments older than 1 week!") - - if c.author_id != v.id: abort(403) - if not c.parent_submission and not c.wall_user_id: - abort(403) - - body = sanitize_raw_body(request.values.get("body", ""), False) - - if len(body) < 1 and not (request.files.get("file") and not g.is_tor): - abort(400, "You have to actually type something!") - - if body != c.body or request.files.get("file") and not g.is_tor: - if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')): - abort(403, "You have to type more than 280 characters!") - elif v.bird and len(body) > 140: - abort(403, "You have to type less than 140 characters!") - - execute_antispam_comment_check(body, v) - - body = process_files(request.files, v, body) - body = body.strip()[:COMMENT_BODY_LENGTH_LIMIT] # process_files potentially adds characters to the post - - body_for_sanitize = body - if v.owoify: - body_for_sanitize = owoify(body_for_sanitize) - if v.marsify: - body_for_sanitize = marsify(body_for_sanitize) - - torture = (v.agendaposter and not v.marseyawarded and not (c.parent_submission and c.post.sub == 'chudrama')) - - body_html = sanitize(body_for_sanitize, golden=False, limit_pings=5, torture=torture) - - if len(body_html) > COMMENT_BODY_HTML_LENGTH_LIMIT: abort(400) - - if v.marseyawarded and marseyaward_body_regex.search(body_html): - abort(403, "You can only type marseys!") - - c.body = body - - process_poll_options(v, c) - - c.body_html = body_html - - execute_blackjack(v, c, c.body, "comment") - execute_under_siege(v, c, c.body, "comment") - - if not (c.parent_submission and c.post.id in ADMIGGER_THREADS) and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in c.body.lower() and not (c.parent_submission and c.post.sub == 'chudrama'): - abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your comment!') - - - if int(time.time()) - c.created_utc > 60 * 3: c.edited_utc = int(time.time()) - - g.db.add(c) - - notify_users = NOTIFY_USERS(body, v) - - for x in notify_users-bots: - notif = g.db.query(Notification).filter_by(comment_id=c.id, user_id=x).one_or_none() - if not notif: - n = Notification(comment_id=c.id, user_id=x) - g.db.add(n) - if not v.shadowbanned: - push_notif({x}, f'New mention of you by @{c.author_name}', c.body, c) - - g.db.commit() - return {"body": c.body, "comment": c.realbody(v)} - - @app.post("/delete/comment/") @limiter.limit('1/second', scope=rpath) @limiter.limit(DEFAULT_RATELIMIT) @@ -670,3 +593,79 @@ def toggle_comment_nsfw(cid, v): if comment.over_18: return {"message": "Comment has been marked as +18!"} else: return {"message": "Comment has been unmarked as +18!"} + +@app.post("/edit_comment/") +@limiter.limit('1/second', scope=rpath) +@limiter.limit("10/minute;100/hour;200/day") +@limiter.limit("10/minute;100/hour;200/day", key_func=get_ID) +@is_not_permabanned +def edit_comment(cid, v): + c = get_comment(cid, v=v) + + if time.time() - c.created_utc > 7*24*60*60 and not (c.post and c.post.private): + abort(403, "You can't edit comments older than 1 week!") + + if c.author_id != v.id: abort(403) + if not c.parent_submission and not c.wall_user_id: + abort(403) + + body = sanitize_raw_body(request.values.get("body", ""), False) + + if len(body) < 1 and not (request.files.get("file") and not g.is_tor): + abort(400, "You have to actually type something!") + + if body != c.body or request.files.get("file") and not g.is_tor: + if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')): + abort(403, "You have to type more than 280 characters!") + elif v.bird and len(body) > 140: + abort(403, "You have to type less than 140 characters!") + + execute_antispam_comment_check(body, v) + + body = process_files(request.files, v, body) + body = body.strip()[:COMMENT_BODY_LENGTH_LIMIT] # process_files potentially adds characters to the post + + body_for_sanitize = body + if v.owoify: + body_for_sanitize = owoify(body_for_sanitize) + if v.marsify: + body_for_sanitize = marsify(body_for_sanitize) + + torture = (v.agendaposter and not v.marseyawarded and not (c.parent_submission and c.post.sub == 'chudrama')) + + body_html = sanitize(body_for_sanitize, golden=False, limit_pings=5, torture=torture) + + if len(body_html) > COMMENT_BODY_HTML_LENGTH_LIMIT: abort(400) + + if v.marseyawarded and marseyaward_body_regex.search(body_html): + abort(403, "You can only type marseys!") + + c.body = body + + process_poll_options(v, c) + + c.body_html = body_html + + execute_blackjack(v, c, c.body, "comment") + execute_under_siege(v, c, c.body, "comment") + + if not (c.parent_submission and c.post.id in ADMIGGER_THREADS) and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in c.body.lower() and not (c.parent_submission and c.post.sub == 'chudrama'): + abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your comment!') + + + if int(time.time()) - c.created_utc > 60 * 3: c.edited_utc = int(time.time()) + + g.db.add(c) + + notify_users = NOTIFY_USERS(body, v) + + for x in notify_users-bots: + notif = g.db.query(Notification).filter_by(comment_id=c.id, user_id=x).one_or_none() + if not notif: + n = Notification(comment_id=c.id, user_id=x) + g.db.add(n) + if not v.shadowbanned: + push_notif({x}, f'New mention of you by @{c.author_name}', c.body, c) + + g.db.commit() + return {"body": c.body, "comment": c.realbody(v)} diff --git a/files/routes/posts.py b/files/routes/posts.py index a62d7018e..78accba45 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -251,97 +251,6 @@ def more_comments(v, cid): return render_template("comments.html", v=v, comments=comments, p=p, render_replies=True) -@app.post("/edit_post/") -@limiter.limit('1/second', scope=rpath) -@limiter.limit("10/minute;100/hour;200/day") -@limiter.limit("10/minute;100/hour;200/day", key_func=get_ID) -@is_not_permabanned -def edit_post(pid, v): - p = get_post(pid) - if not v.can_edit(p): abort(403) - - # Disable edits on things older than 1wk unless it's a draft or editor is a jannie - if (time.time() - p.created_utc > 7*24*60*60 and not p.private - and not v.admin_level >= PERMS['POST_EDITING']): - abort(403, "You can't edit posts older than 1 week!") - - title = sanitize_raw_title(request.values.get("title", "")) - body = sanitize_raw_body(request.values.get("body", ""), True) - - if v.id == p.author_id: - if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')): - abort(403, "You have to type more than 280 characters!") - elif v.bird and len(body) > 140: - abort(403, "You have to type less than 140 characters!") - - if not title: - abort(400, "Please enter a better title!") - if title != p.title: - torture = (v.agendaposter and not v.marseyawarded and p.sub != 'chudrama' and v.id == p.author_id) - - title_html = filter_emojis_only(title, golden=False, torture=torture) - - if v.id == p.author_id and v.marseyawarded and not marseyaward_title_regex.fullmatch(title_html): - abort(403, "You can only type marseys!") - - if 'megathread' in title.lower() and 'megathread' not in p.title.lower(): - p.new = True - - p.title = title - p.title_html = title_html - - body = process_files(request.files, v, body) - body = body.strip()[:POST_BODY_LENGTH_LIMIT(v)] # process_files() may be adding stuff to the body - - if body != p.body: - torture = (v.agendaposter and not v.marseyawarded and p.sub != 'chudrama' and v.id == p.author_id) - - body_html = sanitize(body, golden=False, limit_pings=100, showmore=False, torture=torture) - - if v.id == p.author_id and v.marseyawarded and marseyaward_body_regex.search(body_html): - abort(403, "You can only type marseys!") - - - p.body = body - - process_poll_options(v, p) - - execute_under_siege(v, p, p.body, 'submission') - - for text in [p.body, p.title, p.url]: - if execute_blackjack(v, p, text, 'submission'): break - - if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT: - abort(400, "Submission body_html too long!") - - p.body_html = body_html - - if v.id == p.author_id and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in f'{p.body}{p.title}'.lower() and p.sub != 'chudrama': - abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your post!') - - - if not p.private and not p.ghost: - notify_users = NOTIFY_USERS(f'{p.title} {p.body}', v) - if notify_users: - cid, text = notif_comment2(p) - for x in notify_users: - add_notif(cid, x, text, pushnotif_url=p.permalink) - - if v.id == p.author_id: - if int(time.time()) - p.created_utc > 60 * 3: p.edited_utc = int(time.time()) - g.db.add(p) - else: - ma=ModAction( - kind="edit_post", - user_id=v.id, - target_submission_id=p.id - ) - g.db.add(ma) - - - return redirect(p.permalink) - - def thumbnail_thread(pid:int, vid:int): db = db_session() def expand_url(post_url, fragment_url): @@ -1047,3 +956,93 @@ def get_post_title(v): title = html.unescape(title) return {"url": url, "title": title} + +@app.post("/edit_post/") +@limiter.limit('1/second', scope=rpath) +@limiter.limit("10/minute;100/hour;200/day") +@limiter.limit("10/minute;100/hour;200/day", key_func=get_ID) +@is_not_permabanned +def edit_post(pid, v): + p = get_post(pid) + if not v.can_edit(p): abort(403) + + # Disable edits on things older than 1wk unless it's a draft or editor is a jannie + if (time.time() - p.created_utc > 7*24*60*60 and not p.private + and not v.admin_level >= PERMS['POST_EDITING']): + abort(403, "You can't edit posts older than 1 week!") + + title = sanitize_raw_title(request.values.get("title", "")) + body = sanitize_raw_body(request.values.get("body", ""), True) + + if v.id == p.author_id: + if v.longpost and (len(body) < 280 or ' [](' in body or body.startswith('[](')): + abort(403, "You have to type more than 280 characters!") + elif v.bird and len(body) > 140: + abort(403, "You have to type less than 140 characters!") + + if not title: + abort(400, "Please enter a better title!") + if title != p.title: + torture = (v.agendaposter and not v.marseyawarded and p.sub != 'chudrama' and v.id == p.author_id) + + title_html = filter_emojis_only(title, golden=False, torture=torture) + + if v.id == p.author_id and v.marseyawarded and not marseyaward_title_regex.fullmatch(title_html): + abort(403, "You can only type marseys!") + + if 'megathread' in title.lower() and 'megathread' not in p.title.lower(): + p.new = True + + p.title = title + p.title_html = title_html + + body = process_files(request.files, v, body) + body = body.strip()[:POST_BODY_LENGTH_LIMIT(v)] # process_files() may be adding stuff to the body + + if body != p.body: + torture = (v.agendaposter and not v.marseyawarded and p.sub != 'chudrama' and v.id == p.author_id) + + body_html = sanitize(body, golden=False, limit_pings=100, showmore=False, torture=torture) + + if v.id == p.author_id and v.marseyawarded and marseyaward_body_regex.search(body_html): + abort(403, "You can only type marseys!") + + + p.body = body + + process_poll_options(v, p) + + execute_under_siege(v, p, p.body, 'submission') + + for text in [p.body, p.title, p.url]: + if execute_blackjack(v, p, text, 'submission'): break + + if len(body_html) > POST_BODY_HTML_LENGTH_LIMIT: + abort(400, "Submission body_html too long!") + + p.body_html = body_html + + if v.id == p.author_id and v.agendaposter and not v.marseyawarded and AGENDAPOSTER_PHRASE not in f'{p.body}{p.title}'.lower() and p.sub != 'chudrama': + abort(403, f'You have to include "{AGENDAPOSTER_PHRASE}" in your post!') + + + if not p.private and not p.ghost: + notify_users = NOTIFY_USERS(f'{p.title} {p.body}', v) + if notify_users: + cid, text = notif_comment2(p) + for x in notify_users: + add_notif(cid, x, text, pushnotif_url=p.permalink) + + if v.id == p.author_id: + if int(time.time()) - p.created_utc > 60 * 3: p.edited_utc = int(time.time()) + g.db.add(p) + else: + ma=ModAction( + kind="edit_post", + user_id=v.id, + target_submission_id=p.id + ) + g.db.add(ma) + + + return redirect(p.permalink)