Старт

This commit is contained in:
2026-03-13 14:39:43 +08:00
commit a2cc480644
88 changed files with 18526 additions and 0 deletions

104
backend/app/routes/admin.py Normal file
View File

@@ -0,0 +1,104 @@
from fastapi import APIRouter, Body, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import Dict
from .. import crud, schemas
from ..database import get_db
from ..models import User
import os
router = APIRouter(prefix="/admin", tags=["admin"])
# Проверка админ-секрета через переменную окружения
def verify_admin_secret(admin_secret: str) -> bool:
"""
Проверка admin-секрета
Разрешенные источники:
1. DEVELOPER_SECRET из переменной окружения
2. Можно добавить дополнительные проверки (IP, токен и т.д.)
"""
valid_secret = os.getenv("DEVELOPER_SECRET")
if not valid_secret:
raise HTTPException(status_code=500, detail="DEVELOPER_SECRET not configured")
return admin_secret == valid_secret
@router.post("/users/{user_id}/make-developer")
def make_user_developer(
user_id: int,
admin_secret: str = Body(..., embed=True),
db: Session = Depends(get_db)
):
"""
Назначить статус разработчика для пользователя
Требует admin_secret в запросе
"""
if not verify_admin_secret(admin_secret):
raise HTTPException(status_code=403, detail="Invalid admin secret")
user = db.query(User).filter(User.id == user_id).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
user.is_developer = True
db.commit()
db.refresh(user)
return {
"message": f"Developer status enabled for user {user.email}",
"user_id": user.id,
"email": user.email,
"is_developer": True
}
@router.post("/users/{user_id}/remove-developer")
def remove_user_developer(
user_id: int,
admin_secret: str = Body(..., embed=True),
db: Session = Depends(get_db)
):
"""
Убрать статус разработчика у пользователя
Требует admin_secret в запросе
"""
if not verify_admin_secret(admin_secret):
raise HTTPException(status_code=403, detail="Invalid admin secret")
user = db.query(User).filter(User.id == user_id).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
user.is_developer = False
db.commit()
db.refresh(user)
return {
"message": f"Developer status removed for user {user.email}",
"user_id": user.id,
"email": user.email,
"is_developer": False
}
@router.get("/users")
def list_users(
admin_secret: str,
db: Session = Depends(get_db)
):
if not verify_admin_secret(admin_secret):
raise HTTPException(status_code=403, detail="Invalid admin secret")
users = db.query(User).all()
return {
"users": [
{
"id": user.id,
"email": user.email,
"is_developer": user.is_developer,
"is_active": user.is_active,
"created_at": user.created_at.isoformat() if user.created_at else None
}
for user in users
]
}