ScopeSentry/api/configuration.py

121 lines
4.1 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding:utf-8 -*-  
# @name: configuration
# @auth: rainy-autumn@outlook.com
# @version:
from bson import ObjectId
from fastapi import APIRouter, Depends
from api.users import verify_token
from core.db import get_mongo_db
from core.redis_handler import refresh_config
from core.config import set_timezone
from loguru import logger
router = APIRouter()
@router.get("/subfinder/data")
async def get_subfinder_data(db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
# Find document with name equal to "DomainDic"
result = await db.config.find_one({"name": "SubfinderApiConfig"})
return {
"code": 200,
"data": {
"content": result.get("value", '')
}
}
except Exception as e:
logger.error(str(e))
# Handle exceptions as needed
return {"message": "error","code":500}
@router.post("/subfinder/save")
async def save_subfinder_data(data: dict, db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
# Update the document with name equal to "DomainDic"
result = await db.config.update_one({"name": "SubfinderApiConfig"}, {"$set": {"value": data.get('content','')}}, upsert=True)
if result:
await refresh_config('all', 'subfinder')
return {"code": 200, "message": "Successfully updated SubfinderApiConfig value"}
else:
return {"code": 404, "message": "SubfinderApiConfig not found"}
except Exception as e:
logger.error(str(e))
# Handle exceptions as needed
return {"message": "error", "code": 500}
@router.get("/rad/data")
async def get_rad_data(db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
# Find document with name equal to "DomainDic"
result = await db.config.find_one({"name": "RadConfig"})
return {
"code": 200,
"data": {
"content": result.get("value", '')
}
}
except Exception as e:
logger.error(str(e))
# Handle exceptions as needed
return {"message": "error","code":500}
@router.post("/rad/save")
async def save_rad_data(data: dict, db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
# Update the document with name equal to "DomainDic"
result = await db.config.update_one({"name": "RadConfig"}, {"$set": {"value": data.get('content','')}}, upsert=True)
if result:
await refresh_config('all', 'rad')
return {"code": 200, "message": "Successfully updated RadConfig value"}
else:
return {"code": 404, "message": "SubfinderApiConfig not found"}
except Exception as e:
logger.error(str(e))
# Handle exceptions as needed
return {"message": "error", "code": 500}
@router.get("/system/data")
async def get_system_data(db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
# 查询所有 type 为 "system" 的文档
cursor = db.config.find({"type": "system"})
system_data = {}
async for document in cursor:
# 提取 name 和 value 字段,并添加到 system_data 中
system_data[document["name"]] = document["value"]
return {
"code": 200,
"data": system_data
}
except Exception as e:
logger.error(str(e))
# 根据需要处理异常
return {"message": "error", "code": 500}
@router.post("/system/save")
async def save_system_data(data: dict, db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
try:
for key, value in data.items():
if key == 'timezone':
set_timezone(value)
# 使用键来查找并更新相应的文档
await db.config.update_one(
{"type": "system", "name": key},
{"$set": {"value": value}},
upsert=True
)
await refresh_config('all', 'system')
return {"message": "Data saved successfully", "code": 200}
except Exception as e:
return {"message": "error", "code": 500}