2.0.0-rc2: Achievements Refactored & Admin improved.

This commit is contained in:
2026-08-09 01:34:20 +08:00
parent 3874bf57a9
commit 63a0751aba
29 changed files with 2143 additions and 355 deletions
+33 -1
View File
@@ -1,5 +1,8 @@
from functools import wraps
from flask import session, redirect, url_for, flash
import hmac
import secrets
from flask import abort, flash, request, session, redirect, url_for
def admin_required(f):
@wraps(f)
@@ -9,3 +12,32 @@ def admin_required(f):
flash('Admin access required', 'warning')
return redirect(url_for('admin.login'))
return decorated_function
def get_csrf_token():
token = session.get('_csrf_token')
if not token:
token = secrets.token_urlsafe(32)
session['_csrf_token'] = token
return token
def validate_csrf():
expected = session.get('_csrf_token')
received = (
request.headers.get('X-CSRF-Token')
or request.form.get('_csrf_token')
)
if not expected or not received or not hmac.compare_digest(
str(expected),
str(received),
):
abort(400, description='Invalid CSRF token')
def csrf_protected(f):
@wraps(f)
def decorated_function(*args, **kwargs):
validate_csrf()
return f(*args, **kwargs)
return decorated_function