from flask import ( Blueprint, render_template, request, redirect, url_for ) from .users import get_active_user, is_logged_in from ..models import Users, PasswordResetLinks from ..db import db import secrets import time bp = Blueprint("mod", __name__, url_prefix = "/mod/") @bp.before_request def _before_request(): if not is_logged_in(): return redirect(url_for("users.log_in")) if not get_active_user().is_mod(): return redirect(url_for("topics.all_topics")) @bp.get("/sort-topics") def sort_topics(): topics = db.query("SELECT * FROM topics ORDER BY sort_order ASC") return render_template("mod/sort-topics.html", topics = topics) @bp.post("/sort-topics") def sort_topics_post(): with db.transaction(): for topic_id, new_order in request.form.items(): db.execute("UPDATE topics SET sort_order = ? WHERE id = ?", new_order, topic_id) return redirect(url_for(".sort_topics")) @bp.get("/user-list") def user_list(): users = Users.select() return render_template("mod/user-list.html", users = users) @bp.post("/reset-pass/") def create_reset_pass(user_id): now = int(time.time()) key = secrets.token_urlsafe(20) reset_link = PasswordResetLinks.create({ 'user_id': int(user_id), 'expires_at': now + 24 * 60 * 60, 'key': key, }) return redirect(url_for('users.reset_link_login', key=key)) @bp.get('/panel') def panel(): return render_template('mod/panel.html')