70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
|
# -------------------------------------
|
||
|
# @file : SubdoaminTaker.py
|
||
|
# @author : Autumn
|
||
|
# @contact : rainy-autumn@outlook.com
|
||
|
# @time : 2024/4/27 15:41
|
||
|
# -------------------------------------------
|
||
|
from fastapi import APIRouter, Depends
|
||
|
from motor.motor_asyncio import AsyncIOMotorCursor
|
||
|
from pymongo import DESCENDING
|
||
|
from api.users import verify_token
|
||
|
from core.config import POC_LIST
|
||
|
from core.db import get_mongo_db
|
||
|
from core.util import search_to_mongodb
|
||
|
from loguru import logger
|
||
|
router = APIRouter()
|
||
|
|
||
|
@router.post("/subdomaintaker/data")
|
||
|
async def get_subdomaintaker_data(request_data: dict, db=Depends(get_mongo_db), _: dict = Depends(verify_token)):
|
||
|
try:
|
||
|
search_query = request_data.get("search", "")
|
||
|
page_index = request_data.get("pageIndex", 1)
|
||
|
page_size = request_data.get("pageSize", 10)
|
||
|
# MongoDB collection for SensitiveRule
|
||
|
# Fuzzy search based on the name field
|
||
|
keyword = {
|
||
|
'domain': 'input',
|
||
|
'value': 'value',
|
||
|
'type': 'cname',
|
||
|
'response': 'response',
|
||
|
'project': 'project',
|
||
|
}
|
||
|
query = await search_to_mongodb(search_query, keyword)
|
||
|
if query == "" or query is None:
|
||
|
return {"message": "Search condition parsing error", "code": 500}
|
||
|
query = query[0]
|
||
|
# Get the total count of documents matching the search criteria
|
||
|
total_count = await db.SubdoaminTakerResult.count_documents(query)
|
||
|
if total_count == 0:
|
||
|
return {
|
||
|
"code": 200,
|
||
|
"data": {
|
||
|
'list': [],
|
||
|
'total': 0
|
||
|
}
|
||
|
}
|
||
|
# Perform pagination query
|
||
|
cursor: AsyncIOMotorCursor = db.SubdoaminTakerResult.find(query).skip((page_index - 1) * page_size).limit(page_size)
|
||
|
result = await cursor.to_list(length=None)
|
||
|
# Process the result as needed
|
||
|
response_data = []
|
||
|
for doc in result:
|
||
|
data = {
|
||
|
"host": doc["input"],
|
||
|
"value": doc["value"],
|
||
|
"type": doc["cname"],
|
||
|
"response": doc["response"],
|
||
|
}
|
||
|
response_data.append(data)
|
||
|
return {
|
||
|
"code": 200,
|
||
|
"data": {
|
||
|
'list': response_data,
|
||
|
'total': total_count
|
||
|
}
|
||
|
}
|
||
|
|
||
|
except Exception as e:
|
||
|
logger.error(str(e))
|
||
|
# Handle exceptions as needed
|
||
|
return {"message": "error","code":500}
|