kitchen sink formatting pass
This commit is contained in:
parent
0e1a01eb75
commit
3c056d3410
14 changed files with 56 additions and 109 deletions
|
@ -197,13 +197,11 @@ class User(CreatedBase):
|
||||||
|
|
||||||
@lazy
|
@lazy
|
||||||
def any_block_exists(self, other):
|
def any_block_exists(self, other):
|
||||||
|
|
||||||
return g.db.query(UserBlock).filter(
|
return g.db.query(UserBlock).filter(
|
||||||
or_(and_(UserBlock.user_id == self.id, UserBlock.target_id == other.id), and_(
|
or_(and_(UserBlock.user_id == self.id, UserBlock.target_id == other.id), and_(
|
||||||
UserBlock.user_id == other.id, UserBlock.target_id == self.id))).first()
|
UserBlock.user_id == other.id, UserBlock.target_id == self.id))).first()
|
||||||
|
|
||||||
def validate_2fa(self, token):
|
def validate_2fa(self, token):
|
||||||
|
|
||||||
x = pyotp.TOTP(self.mfa_secret)
|
x = pyotp.TOTP(self.mfa_secret)
|
||||||
return x.verify(token, valid_window=1)
|
return x.verify(token, valid_window=1)
|
||||||
|
|
||||||
|
|
|
@ -302,7 +302,6 @@ def get_comment_trees_eager(
|
||||||
query_filter_callable: Callable[[Query], Query],
|
query_filter_callable: Callable[[Query], Query],
|
||||||
sort: str="old",
|
sort: str="old",
|
||||||
v: Optional[User]=None) -> tuple[list[Comment], defaultdict[Comment, list[Comment]]]:
|
v: Optional[User]=None) -> tuple[list[Comment], defaultdict[Comment, list[Comment]]]:
|
||||||
|
|
||||||
if v:
|
if v:
|
||||||
votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
|
votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery()
|
||||||
blocking = v.blocking.subquery()
|
blocking = v.blocking.subquery()
|
||||||
|
|
|
@ -59,6 +59,7 @@ def remove_admin(v, username):
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
return {"message": "Admin removed!"}
|
return {"message": "Admin removed!"}
|
||||||
|
|
||||||
|
|
||||||
@app.post("/@<username>/delete_note/<id>")
|
@app.post("/@<username>/delete_note/<id>")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
|
@ -70,11 +71,11 @@ def delete_note(v,username,id):
|
||||||
'success':True, 'message': 'Note deleted', 'note': id
|
'success':True, 'message': 'Note deleted', 'note': id
|
||||||
}), 200)
|
}), 200)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/@<username>/create_note")
|
@app.post("/@<username>/create_note")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def create_note(v,username):
|
def create_note(v,username):
|
||||||
|
|
||||||
def result(msg,succ,note):
|
def result(msg,succ,note):
|
||||||
return make_response(jsonify({
|
return make_response(jsonify({
|
||||||
'success':succ, 'message': msg, 'note': note
|
'success':succ, 'message': msg, 'note': note
|
||||||
|
@ -111,6 +112,7 @@ def create_note(v,username):
|
||||||
|
|
||||||
return result('Note saved',True,note.json())
|
return result('Note saved',True,note.json())
|
||||||
|
|
||||||
|
|
||||||
@app.post("/@<username>/revert_actions")
|
@app.post("/@<username>/revert_actions")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(3)
|
@admin_level_required(3)
|
||||||
|
@ -159,11 +161,11 @@ def revert_actions(v, username):
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
return {"message": "Admin actions reverted!"}
|
return {"message": "Admin actions reverted!"}
|
||||||
|
|
||||||
|
|
||||||
@app.post("/@<username>/club_allow")
|
@app.post("/@<username>/club_allow")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def club_allow(v, username):
|
def club_allow(v, username):
|
||||||
|
|
||||||
u = get_user(username, v=v)
|
u = get_user(username, v=v)
|
||||||
|
|
||||||
if not u: abort(404)
|
if not u: abort(404)
|
||||||
|
@ -188,11 +190,11 @@ def club_allow(v, username):
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
return {"message": f"@{username} has been allowed into the {CC_TITLE}!"}
|
return {"message": f"@{username} has been allowed into the {CC_TITLE}!"}
|
||||||
|
|
||||||
|
|
||||||
@app.post("/@<username>/club_ban")
|
@app.post("/@<username>/club_ban")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def club_ban(v, username):
|
def club_ban(v, username):
|
||||||
|
|
||||||
u = get_user(username, v=v)
|
u = get_user(username, v=v)
|
||||||
|
|
||||||
if not u: abort(404)
|
if not u: abort(404)
|
||||||
|
@ -309,7 +311,6 @@ def update_filter_status(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def image_posts_listing(v):
|
def image_posts_listing(v):
|
||||||
|
|
||||||
try: page = int(request.values.get('page', 1))
|
try: page = int(request.values.get('page', 1))
|
||||||
except: page = 1
|
except: page = 1
|
||||||
|
|
||||||
|
@ -348,7 +349,6 @@ def reported_posts(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def reported_comments(v):
|
def reported_comments(v):
|
||||||
|
|
||||||
page = max(1, int(request.values.get("page", 1)))
|
page = max(1, int(request.values.get("page", 1)))
|
||||||
|
|
||||||
listing = g.db.query(Comment
|
listing = g.db.query(Comment
|
||||||
|
@ -583,7 +583,6 @@ def badge_remove_post(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def users_list(v):
|
def users_list(v):
|
||||||
|
|
||||||
try: page = int(request.values.get("page", 1))
|
try: page = int(request.values.get("page", 1))
|
||||||
except: page = 1
|
except: page = 1
|
||||||
|
|
||||||
|
@ -628,7 +627,6 @@ def loggedout_list(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def alt_votes_get(v):
|
def alt_votes_get(v):
|
||||||
|
|
||||||
u1 = request.values.get("u1")
|
u1 = request.values.get("u1")
|
||||||
u2 = request.values.get("u2")
|
u2 = request.values.get("u2")
|
||||||
|
|
||||||
|
@ -762,7 +760,6 @@ def admin_link_accounts(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_removed(v):
|
def admin_removed(v):
|
||||||
|
|
||||||
try: page = int(request.values.get("page", 1))
|
try: page = int(request.values.get("page", 1))
|
||||||
except: page = 1
|
except: page = 1
|
||||||
|
|
||||||
|
@ -790,7 +787,6 @@ def admin_removed(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_removed_comments(v):
|
def admin_removed_comments(v):
|
||||||
|
|
||||||
try: page = int(request.values.get("page", 1))
|
try: page = int(request.values.get("page", 1))
|
||||||
except: page = 1
|
except: page = 1
|
||||||
|
|
||||||
|
@ -927,7 +923,6 @@ def unverify(user_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_title_change(user_id, v):
|
def admin_title_change(user_id, v):
|
||||||
|
|
||||||
user = g.db.query(User).filter_by(id=user_id).one_or_none()
|
user = g.db.query(User).filter_by(id=user_id).one_or_none()
|
||||||
|
|
||||||
new_name=request.values.get("title").strip()[:256]
|
new_name=request.values.get("title").strip()[:256]
|
||||||
|
@ -1052,7 +1047,6 @@ def ban_user(user_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def unban_user(user_id, v):
|
def unban_user(user_id, v):
|
||||||
|
|
||||||
user = g.db.query(User).filter_by(id=user_id).one_or_none()
|
user = g.db.query(User).filter_by(id=user_id).one_or_none()
|
||||||
|
|
||||||
if not user or not user.is_banned: abort(400)
|
if not user or not user.is_banned: abort(400)
|
||||||
|
@ -1089,7 +1083,6 @@ def unban_user(user_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def ban_post(post_id, v):
|
def ban_post(post_id, v):
|
||||||
|
|
||||||
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
||||||
|
|
||||||
if not post:
|
if not post:
|
||||||
|
@ -1127,7 +1120,6 @@ def ban_post(post_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def unban_post(post_id, v):
|
def unban_post(post_id, v):
|
||||||
|
|
||||||
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
||||||
|
|
||||||
if not post:
|
if not post:
|
||||||
|
@ -1161,7 +1153,6 @@ def unban_post(post_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(1)
|
@admin_level_required(1)
|
||||||
def api_distinguish_post(post_id, v):
|
def api_distinguish_post(post_id, v):
|
||||||
|
|
||||||
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
||||||
|
|
||||||
if not post: abort(404)
|
if not post: abort(404)
|
||||||
|
@ -1194,7 +1185,6 @@ def api_distinguish_post(post_id, v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def sticky_post(post_id, v):
|
def sticky_post(post_id, v):
|
||||||
|
|
||||||
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
post = g.db.query(Submission).filter_by(id=post_id).one_or_none()
|
||||||
if post and not post.stickied:
|
if post and not post.stickied:
|
||||||
pins = g.db.query(Submission.id).filter(Submission.stickied != None, Submission.is_banned == False).count()
|
pins = g.db.query(Submission.id).filter(Submission.stickied != None, Submission.is_banned == False).count()
|
||||||
|
@ -1397,7 +1387,6 @@ def admin_dump_cache(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(3)
|
@admin_level_required(3)
|
||||||
def admin_banned_domains(v):
|
def admin_banned_domains(v):
|
||||||
|
|
||||||
banned_domains = g.db.query(BannedDomain).all()
|
banned_domains = g.db.query(BannedDomain).all()
|
||||||
return render_template("admin/banned_domains.html", v=v, banned_domains=banned_domains)
|
return render_template("admin/banned_domains.html", v=v, banned_domains=banned_domains)
|
||||||
|
|
||||||
|
@ -1405,7 +1394,6 @@ def admin_banned_domains(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(3)
|
@admin_level_required(3)
|
||||||
def admin_toggle_ban_domain(v):
|
def admin_toggle_ban_domain(v):
|
||||||
|
|
||||||
domain=request.values.get("domain", "").strip()
|
domain=request.values.get("domain", "").strip()
|
||||||
if not domain: abort(400)
|
if not domain: abort(400)
|
||||||
|
|
||||||
|
@ -1440,7 +1428,6 @@ def admin_toggle_ban_domain(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_nuke_user(v):
|
def admin_nuke_user(v):
|
||||||
|
|
||||||
user=get_user(request.values.get("user"))
|
user=get_user(request.values.get("user"))
|
||||||
|
|
||||||
for post in g.db.query(Submission).filter_by(author_id=user.id).all():
|
for post in g.db.query(Submission).filter_by(author_id=user.id).all():
|
||||||
|
@ -1475,7 +1462,6 @@ def admin_nuke_user(v):
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_nunuke_user(v):
|
def admin_nunuke_user(v):
|
||||||
|
|
||||||
user=get_user(request.values.get("user"))
|
user=get_user(request.values.get("user"))
|
||||||
|
|
||||||
for post in g.db.query(Submission).filter_by(author_id=user.id).all():
|
for post in g.db.query(Submission).filter_by(author_id=user.id).all():
|
||||||
|
|
|
@ -103,7 +103,6 @@ def disconnect(v):
|
||||||
@socketio.on('typing')
|
@socketio.on('typing')
|
||||||
@auth_required
|
@auth_required
|
||||||
def typing_indicator(data, v):
|
def typing_indicator(data, v):
|
||||||
|
|
||||||
if data and v.username not in typing: typing.append(v.username)
|
if data and v.username not in typing: typing.append(v.username)
|
||||||
elif not data and v.username in typing: typing.remove(v.username)
|
elif not data and v.username in typing: typing.remove(v.username)
|
||||||
|
|
||||||
|
|
|
@ -404,7 +404,6 @@ def unpin_comment(cid, v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def save_comment(cid, v):
|
def save_comment(cid, v):
|
||||||
|
|
||||||
comment=get_comment(cid)
|
comment=get_comment(cid)
|
||||||
|
|
||||||
save=g.db.query(CommentSaveRelationship).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
|
save=g.db.query(CommentSaveRelationship).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
|
||||||
|
@ -421,7 +420,6 @@ def save_comment(cid, v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def unsave_comment(cid, v):
|
def unsave_comment(cid, v):
|
||||||
|
|
||||||
comment=get_comment(cid)
|
comment=get_comment(cid)
|
||||||
|
|
||||||
save=g.db.query(CommentSaveRelationship).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
|
save=g.db.query(CommentSaveRelationship).filter_by(user_id=v.id, comment_id=comment.id).one_or_none()
|
||||||
|
|
|
@ -167,7 +167,6 @@ def me(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def logout(v):
|
def logout(v):
|
||||||
|
|
||||||
session.pop("session_id", None)
|
session.pop("session_id", None)
|
||||||
session.pop("lo_user", None)
|
session.pop("lo_user", None)
|
||||||
|
|
||||||
|
@ -209,13 +208,14 @@ def sign_up_get(v):
|
||||||
|
|
||||||
error = request.values.get("error")
|
error = request.values.get("error")
|
||||||
|
|
||||||
return render_template("sign_up.html",
|
return render_template(
|
||||||
formkey=formkey,
|
"sign_up.html",
|
||||||
now=now,
|
formkey=formkey,
|
||||||
ref_user=ref_user,
|
now=now,
|
||||||
hcaptcha=HCAPTCHA_SITEKEY,
|
ref_user=ref_user,
|
||||||
error=error
|
hcaptcha=HCAPTCHA_SITEKEY,
|
||||||
)
|
error=error
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/signup")
|
@app.post("/signup")
|
||||||
|
@ -364,7 +364,6 @@ def get_forgot():
|
||||||
@app.post("/forgot")
|
@app.post("/forgot")
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
def post_forgot():
|
def post_forgot():
|
||||||
|
|
||||||
username = request.values.get("username")
|
username = request.values.get("username")
|
||||||
if not username: abort(400)
|
if not username: abort(400)
|
||||||
|
|
||||||
|
@ -397,7 +396,6 @@ def post_forgot():
|
||||||
|
|
||||||
@app.get("/reset")
|
@app.get("/reset")
|
||||||
def get_reset():
|
def get_reset():
|
||||||
|
|
||||||
user_id = request.values.get("id")
|
user_id = request.values.get("id")
|
||||||
|
|
||||||
timestamp = int(request.values.get("time",0))
|
timestamp = int(request.values.get("time",0))
|
||||||
|
@ -476,7 +474,6 @@ def post_reset(v):
|
||||||
@app.get("/lost_2fa")
|
@app.get("/lost_2fa")
|
||||||
@auth_desired
|
@auth_desired
|
||||||
def lost_2fa(v):
|
def lost_2fa(v):
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"lost_2fa.html",
|
"lost_2fa.html",
|
||||||
v=v
|
v=v
|
||||||
|
@ -485,7 +482,6 @@ def lost_2fa(v):
|
||||||
@app.post("/request_2fa_disable")
|
@app.post("/request_2fa_disable")
|
||||||
@limiter.limit("1/second;6/minute;200/hour;1000/day")
|
@limiter.limit("1/second;6/minute;200/hour;1000/day")
|
||||||
def request_2fa_disable():
|
def request_2fa_disable():
|
||||||
|
|
||||||
username=request.values.get("username")
|
username=request.values.get("username")
|
||||||
user=get_user(username, graceful=True)
|
user=get_user(username, graceful=True)
|
||||||
if not user or not user.email or not user.mfa_secret:
|
if not user or not user.email or not user.mfa_secret:
|
||||||
|
@ -523,7 +519,6 @@ def request_2fa_disable():
|
||||||
|
|
||||||
@app.get("/reset_2fa")
|
@app.get("/reset_2fa")
|
||||||
def reset_2fa():
|
def reset_2fa():
|
||||||
|
|
||||||
now=int(time.time())
|
now=int(time.time())
|
||||||
t = request.values.get("t")
|
t = request.values.get("t")
|
||||||
if not t: abort(400)
|
if not t: abort(400)
|
||||||
|
|
|
@ -22,7 +22,6 @@ def authorize_prompt(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def authorize(v):
|
def authorize(v):
|
||||||
|
|
||||||
client_id = request.values.get("client_id")
|
client_id = request.values.get("client_id")
|
||||||
application = g.db.query(OauthApp).filter_by(client_id=client_id).one_or_none()
|
application = g.db.query(OauthApp).filter_by(client_id=client_id).one_or_none()
|
||||||
if not application: return {"oauth_error": "Invalid `client_id`"}, 401
|
if not application: return {"oauth_error": "Invalid `client_id`"}, 401
|
||||||
|
@ -44,7 +43,6 @@ def authorize(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@is_not_permabanned
|
@is_not_permabanned
|
||||||
def request_api_keys(v):
|
def request_api_keys(v):
|
||||||
|
|
||||||
new_app = OauthApp(
|
new_app = OauthApp(
|
||||||
app_name=request.values.get('name').replace('<','').replace('>',''),
|
app_name=request.values.get('name').replace('<','').replace('>',''),
|
||||||
redirect_uri=request.values.get('redirect_uri'),
|
redirect_uri=request.values.get('redirect_uri'),
|
||||||
|
@ -85,7 +83,6 @@ def request_api_keys(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def delete_oauth_app(v, aid):
|
def delete_oauth_app(v, aid):
|
||||||
|
|
||||||
aid = int(aid)
|
aid = int(aid)
|
||||||
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
|
|
||||||
|
@ -105,7 +102,6 @@ def delete_oauth_app(v, aid):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@is_not_permabanned
|
@is_not_permabanned
|
||||||
def edit_oauth_app(v, aid):
|
def edit_oauth_app(v, aid):
|
||||||
|
|
||||||
aid = int(aid)
|
aid = int(aid)
|
||||||
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
|
|
||||||
|
@ -126,7 +122,6 @@ def edit_oauth_app(v, aid):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@admin_level_required(3)
|
@admin_level_required(3)
|
||||||
def admin_app_approve(v, aid):
|
def admin_app_approve(v, aid):
|
||||||
|
|
||||||
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
user = app.author
|
user = app.author
|
||||||
|
|
||||||
|
@ -160,7 +155,6 @@ def admin_app_approve(v, aid):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_app_revoke(v, aid):
|
def admin_app_revoke(v, aid):
|
||||||
|
|
||||||
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
if app:
|
if app:
|
||||||
for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id).all(): g.db.delete(auth)
|
for auth in g.db.query(ClientAuth).filter_by(oauth_client=app.id).all(): g.db.delete(auth)
|
||||||
|
@ -185,7 +179,6 @@ def admin_app_revoke(v, aid):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_app_reject(v, aid):
|
def admin_app_reject(v, aid):
|
||||||
|
|
||||||
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
app = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
|
|
||||||
if app:
|
if app:
|
||||||
|
@ -251,7 +244,6 @@ def admin_app_id_comments(v, aid):
|
||||||
@app.get("/admin/apps")
|
@app.get("/admin/apps")
|
||||||
@admin_level_required(2)
|
@admin_level_required(2)
|
||||||
def admin_apps_list(v):
|
def admin_apps_list(v):
|
||||||
|
|
||||||
apps = g.db.query(OauthApp).order_by(OauthApp.id.desc()).all()
|
apps = g.db.query(OauthApp).order_by(OauthApp.id.desc()).all()
|
||||||
|
|
||||||
return render_template("admin/apps.html", v=v, apps=apps)
|
return render_template("admin/apps.html", v=v, apps=apps)
|
||||||
|
@ -261,7 +253,6 @@ def admin_apps_list(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def reroll_oauth_tokens(aid, v):
|
def reroll_oauth_tokens(aid, v):
|
||||||
|
|
||||||
aid = aid
|
aid = aid
|
||||||
|
|
||||||
a = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
a = g.db.query(OauthApp).filter_by(id=aid).one_or_none()
|
||||||
|
|
|
@ -24,7 +24,6 @@ from files.helpers.strings import sql_ilike_clean
|
||||||
from files.helpers.wrappers import *
|
from files.helpers.wrappers import *
|
||||||
from files.routes.importstar import *
|
from files.routes.importstar import *
|
||||||
|
|
||||||
|
|
||||||
titleheaders = {
|
titleheaders = {
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36"
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36"
|
||||||
}
|
}
|
||||||
|
@ -36,7 +35,6 @@ MAX_URL_LENGTH = 2048
|
||||||
@app.post("/toggle_club/<pid>")
|
@app.post("/toggle_club/<pid>")
|
||||||
@auth_required
|
@auth_required
|
||||||
def toggle_club(pid, v):
|
def toggle_club(pid, v):
|
||||||
|
|
||||||
post = get_post(pid)
|
post = get_post(pid)
|
||||||
if post.author_id != v.id and v.admin_level < 2: abort(403)
|
if post.author_id != v.id and v.admin_level < 2: abort(403)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ from files.helpers.wrappers import *
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def api_flag_post(pid, v):
|
def api_flag_post(pid, v):
|
||||||
|
|
||||||
post = get_post(pid)
|
post = get_post(pid)
|
||||||
reason = request.values.get("reason", "").strip()[:100]
|
reason = request.values.get("reason", "").strip()[:100]
|
||||||
reason = filter_emojis_only(reason)
|
reason = filter_emojis_only(reason)
|
||||||
|
@ -41,7 +40,6 @@ def api_flag_post(pid, v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def api_flag_comment(cid, v):
|
def api_flag_comment(cid, v):
|
||||||
|
|
||||||
comment = get_comment(cid)
|
comment = get_comment(cid)
|
||||||
reason = request.values.get("reason", "").strip()[:100]
|
reason = request.values.get("reason", "").strip()[:100]
|
||||||
reason = filter_emojis_only(reason)
|
reason = filter_emojis_only(reason)
|
||||||
|
|
|
@ -403,7 +403,6 @@ def settings_security_post(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def settings_log_out_others(v):
|
def settings_log_out_others(v):
|
||||||
|
|
||||||
submitted_password = request.values.get("password", "").strip()
|
submitted_password = request.values.get("password", "").strip()
|
||||||
|
|
||||||
if not v.verifyPass(submitted_password):
|
if not v.verifyPass(submitted_password):
|
||||||
|
@ -575,7 +574,6 @@ def settings_content_get(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@is_not_permabanned
|
@is_not_permabanned
|
||||||
def settings_name_change(v):
|
def settings_name_change(v):
|
||||||
|
|
||||||
new_name=request.values.get("name").strip()
|
new_name=request.values.get("name").strip()
|
||||||
|
|
||||||
if new_name==v.username:
|
if new_name==v.username:
|
||||||
|
@ -613,7 +611,6 @@ def settings_name_change(v):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def settings_title_change(v):
|
def settings_title_change(v):
|
||||||
|
|
||||||
if v.flairchanged: abort(403)
|
if v.flairchanged: abort(403)
|
||||||
|
|
||||||
new_name=request.values.get("title").strip()[:100].replace("𒐪","")
|
new_name=request.values.get("title").strip()[:100].replace("𒐪","")
|
||||||
|
|
|
@ -52,8 +52,6 @@ def support(v):
|
||||||
@auth_desired
|
@auth_desired
|
||||||
@cache.memoize(timeout=86400, make_name=make_name)
|
@cache.memoize(timeout=86400, make_name=make_name)
|
||||||
def participation_stats(v):
|
def participation_stats(v):
|
||||||
|
|
||||||
|
|
||||||
day = int(time.time()) - 86400
|
day = int(time.time()) - 86400
|
||||||
|
|
||||||
week = int(time.time()) - 604800
|
week = int(time.time()) - 604800
|
||||||
|
@ -64,38 +62,40 @@ def participation_stats(v):
|
||||||
|
|
||||||
active_users = set(posters) | set(commenters) | set(voters) | set(commentvoters)
|
active_users = set(posters) | set(commenters) | set(voters) | set(commentvoters)
|
||||||
|
|
||||||
stats = {"marseys": g.db.query(Marsey.name).count(),
|
users: Query = g.db.query(User.id)
|
||||||
"users": g.db.query(User.id).count(),
|
submissions: Query = g.db.query(Submission.id)
|
||||||
"private users": g.db.query(User.id).filter_by(is_private=True).count(),
|
comments: Query = g.db.query(Comment.id)
|
||||||
"banned users": g.db.query(User.id).filter(User.is_banned > 0).count(),
|
|
||||||
"verified email users": g.db.query(User.id).filter_by(is_activated=True).count(),
|
|
||||||
"coins in circulation": g.db.query(func.sum(User.coins)).scalar(),
|
|
||||||
"total shop sales": g.db.query(func.sum(User.coins_spent)).scalar(),
|
|
||||||
"signups last 24h": g.db.query(User.id).filter(User.created_utc > day).count(),
|
|
||||||
"total posts": g.db.query(Submission.id).count(),
|
|
||||||
"posting users": g.db.query(Submission.author_id).distinct().count(),
|
|
||||||
"listed posts": g.db.query(Submission.id).filter_by(is_banned=False).filter(Submission.deleted_utc == 0).count(),
|
|
||||||
"removed posts (by admins)": g.db.query(Submission.id).filter_by(is_banned=True).count(),
|
|
||||||
"deleted posts (by author)": g.db.query(Submission.id).filter(Submission.deleted_utc > 0).count(),
|
|
||||||
"posts last 24h": g.db.query(Submission.id).filter(Submission.created_utc > day).count(),
|
|
||||||
"total comments": g.db.query(Comment.id).filter(Comment.author_id.notin_((AUTOJANNY_ID,NOTIFICATIONS_ID))).count(),
|
|
||||||
"commenting users": g.db.query(Comment.author_id).distinct().count(),
|
|
||||||
"removed comments (by admins)": g.db.query(Comment.id).filter_by(is_banned=True).count(),
|
|
||||||
"deleted comments (by author)": g.db.query(Comment.id).filter(Comment.deleted_utc > 0).count(),
|
|
||||||
"comments last_24h": g.db.query(Comment.id).filter(Comment.created_utc > day, Comment.author_id.notin_((AUTOJANNY_ID,NOTIFICATIONS_ID))).count(),
|
|
||||||
"post votes": g.db.query(Vote.submission_id).count(),
|
|
||||||
"post voting users": g.db.query(Vote.user_id).distinct().count(),
|
|
||||||
"comment votes": g.db.query(CommentVote.comment_id).count(),
|
|
||||||
"comment voting users": g.db.query(CommentVote.user_id).distinct().count(),
|
|
||||||
"total upvotes": g.db.query(Vote.submission_id).filter_by(vote_type=1).count() + g.db.query(CommentVote.comment_id).filter_by(vote_type=1).count(),
|
|
||||||
"total downvotes": g.db.query(Vote.submission_id).filter_by(vote_type=-1).count() + g.db.query(CommentVote.comment_id).filter_by(vote_type=-1).count(),
|
|
||||||
"total awards": g.db.query(AwardRelationship.id).count(),
|
|
||||||
"awards given": g.db.query(AwardRelationship.id).filter(or_(AwardRelationship.submission_id != None, AwardRelationship.comment_id != None)).count(),
|
|
||||||
"users who posted, commented, or voted in the past 7 days": len(active_users),
|
|
||||||
}
|
|
||||||
|
|
||||||
g.db.commit()
|
|
||||||
|
|
||||||
|
stats = {
|
||||||
|
"marseys": g.db.query(Marsey.name).count(),
|
||||||
|
"users": users.count(),
|
||||||
|
"private users": users.filter_by(is_private=True).count(),
|
||||||
|
"banned users": users.filter(User.is_banned > 0).count(),
|
||||||
|
"verified email users": users.filter_by(is_activated=True).count(),
|
||||||
|
"coins in circulation": g.db.query(func.sum(User.coins)).scalar(),
|
||||||
|
"total shop sales": g.db.query(func.sum(User.coins_spent)).scalar(),
|
||||||
|
"signups last 24h": users.filter(User.created_utc > day).count(),
|
||||||
|
"total posts": submissions.count(),
|
||||||
|
"posting users": g.db.query(Submission.author_id).distinct().count(),
|
||||||
|
"listed posts": submissions.filter_by(is_banned=False).filter(Submission.deleted_utc == 0).count(),
|
||||||
|
"removed posts (by admins)": submissions.filter_by(is_banned=True).count(),
|
||||||
|
"deleted posts (by author)": submissions.filter(Submission.deleted_utc > 0).count(),
|
||||||
|
"posts last 24h": submissions.filter(Submission.created_utc > day).count(),
|
||||||
|
"total comments": comments.filter(Comment.author_id.notin_((AUTOJANNY_ID,NOTIFICATIONS_ID))).count(),
|
||||||
|
"commenting users": g.db.query(Comment.author_id).distinct().count(),
|
||||||
|
"removed comments (by admins)": comments.filter_by(is_banned=True).count(),
|
||||||
|
"deleted comments (by author)": comments.filter(Comment.deleted_utc > 0).count(),
|
||||||
|
"comments last_24h": comments.filter(Comment.created_utc > day, Comment.author_id.notin_((AUTOJANNY_ID,NOTIFICATIONS_ID))).count(),
|
||||||
|
"post votes": g.db.query(Vote.submission_id).count(),
|
||||||
|
"post voting users": g.db.query(Vote.user_id).distinct().count(),
|
||||||
|
"comment votes": g.db.query(CommentVote.comment_id).count(),
|
||||||
|
"comment voting users": g.db.query(CommentVote.user_id).distinct().count(),
|
||||||
|
"total upvotes": g.db.query(Vote.submission_id).filter_by(vote_type=1).count() + g.db.query(CommentVote.comment_id).filter_by(vote_type=1).count(),
|
||||||
|
"total downvotes": g.db.query(Vote.submission_id).filter_by(vote_type=-1).count() + g.db.query(CommentVote.comment_id).filter_by(vote_type=-1).count(),
|
||||||
|
"total awards": g.db.query(AwardRelationship.id).count(),
|
||||||
|
"awards given": g.db.query(AwardRelationship.id).filter(or_(AwardRelationship.submission_id != None, AwardRelationship.comment_id != None)).count(),
|
||||||
|
"users who posted, commented, or voted in the past 7 days": len(active_users),
|
||||||
|
}
|
||||||
return render_template("admin/content_stats.html", v=v, title="Content Statistics", data=stats)
|
return render_template("admin/content_stats.html", v=v, title="Content Statistics", data=stats)
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,6 +110,7 @@ def weekly_chart():
|
||||||
f = send_file(file)
|
f = send_file(file)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
||||||
@app.get("/daily_chart")
|
@app.get("/daily_chart")
|
||||||
def daily_chart():
|
def daily_chart():
|
||||||
file = cached_chart(kind="daily", site=SITE)
|
file = cached_chart(kind="daily", site=SITE)
|
||||||
|
@ -151,7 +152,7 @@ def cached_chart(kind, site):
|
||||||
posts_chart = plt.subplot2grid((30, 20), (10, 0), rowspan=6, colspan=30)
|
posts_chart = plt.subplot2grid((30, 20), (10, 0), rowspan=6, colspan=30)
|
||||||
comments_chart = plt.subplot2grid((30, 20), (20, 0), rowspan=6, colspan=30)
|
comments_chart = plt.subplot2grid((30, 20), (20, 0), rowspan=6, colspan=30)
|
||||||
|
|
||||||
signup_chart.grid(), posts_chart.grid(), comments_chart.grid()
|
_ = signup_chart.grid(), posts_chart.grid(), comments_chart.grid()
|
||||||
|
|
||||||
signup_chart.plot(
|
signup_chart.plot(
|
||||||
daily_times,
|
daily_times,
|
||||||
|
@ -207,7 +208,6 @@ def admins(v):
|
||||||
@app.get("/modlog")
|
@app.get("/modlog")
|
||||||
@auth_desired
|
@auth_desired
|
||||||
def log(v):
|
def log(v):
|
||||||
|
|
||||||
try: page = max(int(request.values.get("page", 1)), 1)
|
try: page = max(int(request.values.get("page", 1)), 1)
|
||||||
except: page = 1
|
except: page = 1
|
||||||
|
|
||||||
|
@ -249,7 +249,6 @@ def log(v):
|
||||||
@app.get("/log/<id>")
|
@app.get("/log/<id>")
|
||||||
@auth_desired
|
@auth_desired
|
||||||
def log_item(v, id):
|
def log_item(v, id):
|
||||||
|
|
||||||
try: id = int(id)
|
try: id = int(id)
|
||||||
except: abort(404)
|
except: abort(404)
|
||||||
|
|
||||||
|
@ -288,7 +287,7 @@ def submit_contact(v: Optional[User]):
|
||||||
email = request.values.get("email")
|
email = request.values.get("email")
|
||||||
if not body: abort(400)
|
if not body: abort(400)
|
||||||
|
|
||||||
header = "This message has been sent automatically to all admins via [/contact](/contact)\n"
|
header = "This message has been sent automatically to all admins via [/contact](/contact)\n"
|
||||||
if not email:
|
if not email:
|
||||||
email = ""
|
email = ""
|
||||||
else:
|
else:
|
||||||
|
@ -305,12 +304,13 @@ def submit_contact(v: Optional[User]):
|
||||||
html += f'<img data-bs-target="#expandImageModal" data-bs-toggle="modal" onclick="expandDesktopImage(this.src)" class="img" src="{url}" loading="lazy">'
|
html += f'<img data-bs-target="#expandImageModal" data-bs-toggle="modal" onclick="expandDesktopImage(this.src)" class="img" src="{url}" loading="lazy">'
|
||||||
else: abort(400, "Image files only")
|
else: abort(400, "Image files only")
|
||||||
|
|
||||||
new_comment = Comment(author_id=v.id if v else NOTIFICATIONS_ID,
|
new_comment = Comment(
|
||||||
parent_submission=None,
|
author_id=v.id if v else NOTIFICATIONS_ID,
|
||||||
level=1,
|
parent_submission=None,
|
||||||
body_html=html,
|
level=1,
|
||||||
sentto=MODMAIL_ID,
|
body_html=html,
|
||||||
)
|
sentto=MODMAIL_ID,
|
||||||
|
)
|
||||||
g.db.add(new_comment)
|
g.db.add(new_comment)
|
||||||
g.db.flush()
|
g.db.flush()
|
||||||
new_comment.top_comment_id = new_comment.id
|
new_comment.top_comment_id = new_comment.id
|
||||||
|
@ -400,14 +400,12 @@ def blocks(v):
|
||||||
@app.get("/banned")
|
@app.get("/banned")
|
||||||
@auth_desired
|
@auth_desired
|
||||||
def banned(v):
|
def banned(v):
|
||||||
|
|
||||||
users = [x for x in g.db.query(User).filter(User.is_banned > 0, User.unban_utc == 0).all()]
|
users = [x for x in g.db.query(User).filter(User.is_banned > 0, User.unban_utc == 0).all()]
|
||||||
return render_template("banned.html", v=v, users=users)
|
return render_template("banned.html", v=v, users=users)
|
||||||
|
|
||||||
@app.get("/formatting")
|
@app.get("/formatting")
|
||||||
@auth_desired
|
@auth_desired
|
||||||
def formatting(v):
|
def formatting(v):
|
||||||
|
|
||||||
return render_template("formatting.html", v=v)
|
return render_template("formatting.html", v=v)
|
||||||
|
|
||||||
@app.get("/service-worker.js")
|
@app.get("/service-worker.js")
|
||||||
|
@ -417,7 +415,6 @@ def serviceworker():
|
||||||
@app.get("/settings/security")
|
@app.get("/settings/security")
|
||||||
@auth_required
|
@auth_required
|
||||||
def settings_security(v):
|
def settings_security(v):
|
||||||
|
|
||||||
return render_template("settings_security.html",
|
return render_template("settings_security.html",
|
||||||
v=v,
|
v=v,
|
||||||
mfa_secret=pyotp.random_base32() if not v.mfa_secret else None
|
mfa_secret=pyotp.random_base32() if not v.mfa_secret else None
|
||||||
|
|
|
@ -482,7 +482,6 @@ def message2(v, username):
|
||||||
@limiter.limit("1/second;6/minute;50/hour;200/day")
|
@limiter.limit("1/second;6/minute;50/hour;200/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def messagereply(v):
|
def messagereply(v):
|
||||||
|
|
||||||
message = request.values.get("body", "").strip()[:MESSAGE_BODY_LENGTH_MAXIMUM].strip()
|
message = request.values.get("body", "").strip()[:MESSAGE_BODY_LENGTH_MAXIMUM].strip()
|
||||||
|
|
||||||
if not message and not request.files.get("file"): abort(400, "Message is empty!")
|
if not message and not request.files.get("file"): abort(400, "Message is empty!")
|
||||||
|
@ -594,7 +593,6 @@ def mfa_qr(secret, v):
|
||||||
|
|
||||||
@app.get("/is_available/<name>")
|
@app.get("/is_available/<name>")
|
||||||
def api_is_available(name):
|
def api_is_available(name):
|
||||||
|
|
||||||
name=name.strip()
|
name=name.strip()
|
||||||
|
|
||||||
if len(name)<3 or len(name)>25:
|
if len(name)<3 or len(name)>25:
|
||||||
|
@ -807,7 +805,6 @@ def u_user_id_info(id, v=None):
|
||||||
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
@limiter.limit("1/second;30/minute;200/hour;1000/day")
|
||||||
@auth_required
|
@auth_required
|
||||||
def follow_user(username, v):
|
def follow_user(username, v):
|
||||||
|
|
||||||
target = get_user(username)
|
target = get_user(username)
|
||||||
|
|
||||||
if target.id==v.id: abort(400, "You can't follow yourself!")
|
if target.id==v.id: abort(400, "You can't follow yourself!")
|
||||||
|
@ -900,7 +897,6 @@ def user_profile_uid(id:int):
|
||||||
@app.get("/@<username>/pic")
|
@app.get("/@<username>/pic")
|
||||||
@limiter.exempt
|
@limiter.exempt
|
||||||
def user_profile_name(username:str):
|
def user_profile_name(username:str):
|
||||||
|
|
||||||
name = f"/@{username}/pic"
|
name = f"/@{username}/pic"
|
||||||
path = cache.get(name)
|
path = cache.get(name)
|
||||||
tout = 5 * 60 # 5 min
|
tout = 5 * 60 # 5 min
|
||||||
|
@ -926,7 +922,6 @@ def user_profile_name(username:str):
|
||||||
@app.get("/@<username>/saved/posts")
|
@app.get("/@<username>/saved/posts")
|
||||||
@auth_required
|
@auth_required
|
||||||
def saved_posts(v, username):
|
def saved_posts(v, username):
|
||||||
|
|
||||||
page=int(request.values.get("page",1))
|
page=int(request.values.get("page",1))
|
||||||
|
|
||||||
ids=v.saved_idlist(page=page)
|
ids=v.saved_idlist(page=page)
|
||||||
|
@ -950,7 +945,6 @@ def saved_posts(v, username):
|
||||||
@app.get("/@<username>/saved/comments")
|
@app.get("/@<username>/saved/comments")
|
||||||
@auth_required
|
@auth_required
|
||||||
def saved_comments(v, username):
|
def saved_comments(v, username):
|
||||||
|
|
||||||
page=int(request.values.get("page",1))
|
page=int(request.values.get("page",1))
|
||||||
|
|
||||||
ids=v.saved_comment_idlist(page=page)
|
ids=v.saved_comment_idlist(page=page)
|
||||||
|
|
|
@ -56,7 +56,6 @@ def admin_vote_info_get(v):
|
||||||
@limiter.limit("5/second;60/minute;600/hour;1000/day")
|
@limiter.limit("5/second;60/minute;600/hour;1000/day")
|
||||||
@is_not_permabanned
|
@is_not_permabanned
|
||||||
def api_vote_post(post_id, new, v):
|
def api_vote_post(post_id, new, v):
|
||||||
|
|
||||||
# make sure this account is not a bot
|
# make sure this account is not a bot
|
||||||
if request.headers.get("Authorization"): abort(403)
|
if request.headers.get("Authorization"): abort(403)
|
||||||
|
|
||||||
|
@ -124,7 +123,6 @@ def api_vote_post(post_id, new, v):
|
||||||
@limiter.limit("5/second;60/minute;600/hour;1000/day")
|
@limiter.limit("5/second;60/minute;600/hour;1000/day")
|
||||||
@is_not_permabanned
|
@is_not_permabanned
|
||||||
def api_vote_comment(comment_id, new, v):
|
def api_vote_comment(comment_id, new, v):
|
||||||
|
|
||||||
# make sure this account is not a bot
|
# make sure this account is not a bot
|
||||||
if request.headers.get("Authorization"): abort(403)
|
if request.headers.get("Authorization"): abort(403)
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,6 @@ class SessionProfiler:
|
||||||
reporter = StreamReporter()
|
reporter = StreamReporter()
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
|
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
if path_callback is not None:
|
if path_callback is not None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue