Add source
This commit is contained in:
253
web/admin/user_manager_web.py
Normal file
253
web/admin/user_manager_web.py
Normal file
@@ -0,0 +1,253 @@
|
||||
"""
|
||||
Wrappers for user management in web interface
|
||||
"""
|
||||
from datetime import datetime
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from shared.database.models import User
|
||||
from shared.config import settings
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def add_user_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Add user (for web interface)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
# Check existence
|
||||
existing_user = await db.get(User, user_id)
|
||||
if existing_user:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Пользователь {user_id} уже существует"
|
||||
}
|
||||
|
||||
# Create new user
|
||||
user = User(
|
||||
user_id=user_id,
|
||||
is_admin=False,
|
||||
is_blocked=False
|
||||
)
|
||||
db.add(user)
|
||||
await db.commit()
|
||||
logger.info(f"User {user_id} added via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Пользователь {user_id} успешно добавлен"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error adding user: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при добавлении пользователя: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def remove_user_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Remove user (for web interface)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
user = await db.get(User, user_id)
|
||||
if not user:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Пользователь {user_id} не найден"
|
||||
}
|
||||
|
||||
# Cannot delete Owner
|
||||
if user_id == settings.OWNER_ID:
|
||||
return {
|
||||
"success": False,
|
||||
"message": "Нельзя удалить Owner"
|
||||
}
|
||||
|
||||
await db.delete(user)
|
||||
await db.commit()
|
||||
logger.info(f"User {user_id} removed via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Пользователь {user_id} успешно удален"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error removing user: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при удалении пользователя: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def block_user_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Block user (for web interface)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
user = await db.get(User, user_id)
|
||||
if not user:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Пользователь {user_id} не найден"
|
||||
}
|
||||
|
||||
# Cannot block Owner
|
||||
if user_id == settings.OWNER_ID:
|
||||
return {
|
||||
"success": False,
|
||||
"message": "Нельзя заблокировать Owner"
|
||||
}
|
||||
|
||||
user.is_blocked = True
|
||||
user.updated_at = datetime.utcnow()
|
||||
await db.commit()
|
||||
logger.info(f"User {user_id} blocked via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Пользователь {user_id} успешно заблокирован"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error blocking user: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при блокировке пользователя: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def unblock_user_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Unblock user (for web interface)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
user = await db.get(User, user_id)
|
||||
if not user:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Пользователь {user_id} не найден"
|
||||
}
|
||||
|
||||
user.is_blocked = False
|
||||
user.updated_at = datetime.utcnow()
|
||||
await db.commit()
|
||||
logger.info(f"User {user_id} unblocked via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Пользователь {user_id} успешно разблокирован"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error unblocking user: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при разблокировке пользователя: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def add_admin_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Add administrator (for web interface, Owner only)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
user = await db.get(User, user_id)
|
||||
if not user:
|
||||
# Create user if doesn't exist
|
||||
user = User(user_id=user_id, is_admin=True, is_blocked=False)
|
||||
db.add(user)
|
||||
else:
|
||||
user.is_admin = True
|
||||
user.updated_at = datetime.utcnow()
|
||||
|
||||
await db.commit()
|
||||
logger.info(f"User {user_id} assigned as administrator via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Пользователь {user_id} успешно назначен администратором"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error assigning administrator: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при назначении администратора: {str(e)}"
|
||||
}
|
||||
|
||||
|
||||
async def remove_admin_web(user_id: int, db: AsyncSession) -> dict:
|
||||
"""
|
||||
Remove administrator (for web interface, Owner only)
|
||||
|
||||
Args:
|
||||
user_id: User ID
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with operation result
|
||||
"""
|
||||
try:
|
||||
# Cannot remove privileges from Owner
|
||||
if user_id == settings.OWNER_ID:
|
||||
return {
|
||||
"success": False,
|
||||
"message": "Нельзя снять права администратора у Owner"
|
||||
}
|
||||
|
||||
user = await db.get(User, user_id)
|
||||
if not user or not user.is_admin:
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Пользователь {user_id} не является администратором"
|
||||
}
|
||||
|
||||
user.is_admin = False
|
||||
user.updated_at = datetime.utcnow()
|
||||
await db.commit()
|
||||
logger.info(f"Administrator privileges removed from user {user_id} via web interface")
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Права администратора успешно сняты у пользователя {user_id}"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Error removing administrator privileges: {e}")
|
||||
await db.rollback()
|
||||
return {
|
||||
"success": False,
|
||||
"message": f"Ошибка при снятии прав администратора: {str(e)}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user