2024-04-18 13:37:17 +00:00
|
|
|
from flask_login import current_user
|
|
|
|
from flask_socketio import disconnect, Namespace
|
|
|
|
from app import db, hashids
|
2024-05-04 12:55:05 +00:00
|
|
|
from app.decorators import socketio_admin_required
|
2024-04-18 13:37:17 +00:00
|
|
|
from app.models import User
|
|
|
|
|
|
|
|
|
|
|
|
class AdminNamespace(Namespace):
|
|
|
|
def on_connect(self):
|
|
|
|
# Check if the user is authenticated and is an administrator
|
|
|
|
if not (current_user.is_authenticated and current_user.is_administrator):
|
|
|
|
disconnect()
|
|
|
|
|
|
|
|
|
2024-05-04 12:55:05 +00:00
|
|
|
@socketio_admin_required
|
2024-04-18 13:37:17 +00:00
|
|
|
def on_set_user_confirmed(self, user_hashid: str, confirmed_value: bool):
|
|
|
|
# Decode the user hashid
|
|
|
|
user_id = hashids.decode(user_hashid)
|
|
|
|
|
|
|
|
# Validate user_id
|
|
|
|
if not isinstance(user_id, int):
|
|
|
|
return {
|
|
|
|
'code': 400,
|
|
|
|
'body': 'user_id is invalid'
|
|
|
|
}
|
|
|
|
|
|
|
|
# Validate confirmed_value
|
|
|
|
if not isinstance(confirmed_value, bool):
|
|
|
|
return {
|
|
|
|
'code': 400,
|
|
|
|
'body': 'confirmed_value is invalid'
|
|
|
|
}
|
|
|
|
|
|
|
|
# Load user from database
|
|
|
|
user = User.query.get(user_id)
|
|
|
|
if user is None:
|
|
|
|
return {
|
|
|
|
'code': 404,
|
|
|
|
'body': 'User not found'
|
|
|
|
}
|
|
|
|
|
|
|
|
# Update user confirmed status
|
|
|
|
user.confirmed = confirmed_value
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
return {
|
|
|
|
'code': 200,
|
|
|
|
'body': f'User "{user.username}" is now {"confirmed" if confirmed_value else "unconfirmed"}'
|
|
|
|
}
|