Allow moderators to ban and unban users
This commit is contained in:
42
main.py
42
main.py
@@ -166,13 +166,15 @@ def user_edit_password():
|
||||
|
||||
@app.route('/user/<int:user_id>/')
|
||||
def user_info(user_id):
|
||||
name, about = db.get_user_public_info(user_id)
|
||||
name, about, banned_until = db.get_user_public_info(user_id)
|
||||
return render_template(
|
||||
'user_info.html',
|
||||
title = 'Profile',
|
||||
config = config,
|
||||
user = get_user(),
|
||||
name = name,
|
||||
id = user_id,
|
||||
banned_until = banned_until,
|
||||
about = about
|
||||
)
|
||||
|
||||
@@ -480,9 +482,8 @@ def admin_new_secrets():
|
||||
flash(str(e), 'error')
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/admin/user/<int:user_id>/ban/', methods = ['POST'])
|
||||
def admin_ban_user(user_id):
|
||||
chk, user = _admin_check()
|
||||
def ban_user(user_id):
|
||||
chk, user = _moderator_check()
|
||||
if not chk:
|
||||
return user
|
||||
|
||||
@@ -490,7 +491,7 @@ def admin_ban_user(user_id):
|
||||
d = 0 if d == '' else int(d)
|
||||
h, m = (0, 0) if t == '' else map(int, t.split(':'))
|
||||
until = time.time_ns() + (d * 24 * 60 + h * 60 + m) * (60 * 10**9)
|
||||
until = min(until, 0xffff_ffff_ffff_ffff)
|
||||
until = min(until, 0x7fff_ffff_ffff_ffff)
|
||||
|
||||
try:
|
||||
if db.set_user_ban(user_id, until):
|
||||
@@ -499,11 +500,17 @@ def admin_ban_user(user_id):
|
||||
flash('Failed to ban user', 'error')
|
||||
except Exception as e:
|
||||
flash(str(e), 'error')
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/admin/user/<int:user_id>/unban/', methods = ['POST'])
|
||||
def admin_unban_user(user_id):
|
||||
chk, user = _admin_check()
|
||||
@app.route('/user/<int:user_id>/ban/', methods = ['POST'])
|
||||
def moderator_ban_user(user_id):
|
||||
return ban_user(user_id) or redirect(url_for('user_info', user_id = user_id))
|
||||
|
||||
@app.route('/admin/user/<int:user_id>/ban/', methods = ['POST'])
|
||||
def admin_ban_user(user_id):
|
||||
return ban_user(user_id) or redirect(url_for('admin'))
|
||||
|
||||
def unban_user(user_id):
|
||||
chk, user = _moderator_check()
|
||||
if not chk:
|
||||
return user
|
||||
|
||||
@@ -514,7 +521,14 @@ def admin_unban_user(user_id):
|
||||
flash('Failed to unban user', 'error')
|
||||
except Exception as e:
|
||||
flash(str(e), 'error')
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/user/<int:user_id>/unban/', methods = ['POST'])
|
||||
def moderator_unban_user(user_id):
|
||||
return unban_user(user_id) or redirect(url_for('user_info', user_id = user_id))
|
||||
|
||||
@app.route('/admin/user/<int:user_id>/unban/', methods = ['POST'])
|
||||
def admin_unban_user(user_id):
|
||||
return unban_user(user_id) or redirect(url_for('admin'))
|
||||
|
||||
@app.route('/admin/user/new/', methods = ['POST'])
|
||||
def admin_new_user():
|
||||
@@ -561,6 +575,14 @@ def help():
|
||||
user = get_user(),
|
||||
)
|
||||
|
||||
def _moderator_check():
|
||||
user = get_user()
|
||||
if user is None:
|
||||
return False, redirect(url_for('login'))
|
||||
if not user.is_moderator():
|
||||
return False, ('<h1>Forbidden</h1>', 403)
|
||||
return True, user
|
||||
|
||||
def _admin_check():
|
||||
user = get_user()
|
||||
if user is None:
|
||||
|
||||
Reference in New Issue
Block a user