diff --git a/db/sqlite.py b/db/sqlite.py index 527b95e..0d72f44 100644 --- a/db/sqlite.py +++ b/db/sqlite.py @@ -158,7 +158,7 @@ class DB: def get_user_public_info(self, user_id): return self._db().execute(''' - select name, about + select name, about, banned_until from users where user_id = ? ''', diff --git a/main.py b/main.py index 20af56a..848180a 100644 --- a/main.py +++ b/main.py @@ -166,13 +166,15 @@ def user_edit_password(): @app.route('/user//') 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//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//unban/', methods = ['POST']) -def admin_unban_user(user_id): - chk, user = _admin_check() +@app.route('/user//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//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//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//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, ('

Forbidden

', 403) + return True, user + def _admin_check(): user = get_user() if user is None: diff --git a/templates/admin/index.html b/templates/admin/index.html index 90a0447..ba8f779 100644 --- a/templates/admin/index.html +++ b/templates/admin/index.html @@ -100,12 +100,12 @@ {%- if banned_until > 0 -%} -
+ {{- format_time(banned_until) }}
{%- endif -%} -
+ diff --git a/templates/user_info.html b/templates/user_info.html index b5c70bc..c4b91ca 100644 --- a/templates/user_info.html +++ b/templates/user_info.html @@ -1,6 +1,21 @@ {% extends 'base.html' %} -{% block content %} +{%- block content %} +{%- if user is not none and user.is_moderator -%} +

+ + + + +

+{%- if banned_until > 0 -%} +
+{{- format_time(banned_until) -}} + +
+{%- endif -%} +

+{%- endif -%}

{{ name }}

{{ minimd(about) | safe }}

-{% endblock %} +{%- endblock %}