优化白名单函数实现机制
This commit is contained in:
parent
eed34b73e4
commit
fa42e6bb00
@ -63,51 +63,48 @@ async def handle_request(request: Request, module_path: str):
|
|||||||
处理白名单路由请求
|
处理白名单路由请求
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 首先检查是否是白名单函数
|
# 解析模块路径并先导入模块,确保装饰器执行
|
||||||
|
module_info = parse_module_path(module_path)
|
||||||
|
module = import_module(module_info['module_path'])
|
||||||
|
|
||||||
|
# 模块导入后再检查是否是白名单函数
|
||||||
if is_whitelisted(module_path):
|
if is_whitelisted(module_path):
|
||||||
whitelist_info = get_whitelisted_function(module_path)
|
whitelist_info = get_whitelisted_function(module_path)
|
||||||
func = whitelist_info['function']
|
func = whitelist_info['function']
|
||||||
|
|
||||||
# 检查HTTP方法
|
# 检查HTTP方法
|
||||||
if request.method not in whitelist_info['methods']:
|
if request.method not in whitelist_info['methods']:
|
||||||
raise HTTPException(status_code=405, detail=f"Method {request.method} not allowed for this endpoint")
|
raise HTTPException(status_code=405, detail=f"Method {request.method} not allowed for this endpoint")
|
||||||
|
|
||||||
# 检查权限(如果需要)
|
# 检查权限(如果需要)
|
||||||
if not whitelist_info['allow_guest']:
|
if not whitelist_info['allow_guest']:
|
||||||
if not await authenticate_request(request, whitelist_info['allow_guest']):
|
if not await authenticate_request(request, whitelist_info['allow_guest']):
|
||||||
raise HTTPException(status_code=401, detail="Authentication required")
|
raise HTTPException(status_code=401, detail="Authentication required")
|
||||||
|
|
||||||
# 获取请求数据
|
# 获取请求数据
|
||||||
request_data = await request.json()
|
request_data = await request.json()
|
||||||
|
|
||||||
# 调用函数
|
# 调用函数
|
||||||
result = func(**request_data)
|
result = func(**request_data)
|
||||||
|
|
||||||
return JSONResponse(content={
|
return JSONResponse(content={
|
||||||
"success": True,
|
"success": True,
|
||||||
"data": result
|
"data": result
|
||||||
})
|
})
|
||||||
|
|
||||||
# 如果不是白名单函数,使用原有的动态导入方式
|
# 非白名单:按原逻辑调用模块函数
|
||||||
# 解析模块路径
|
|
||||||
module_info = parse_module_path(module_path)
|
|
||||||
|
|
||||||
# 动态导入模块
|
|
||||||
module = import_module(module_info['module_path'])
|
|
||||||
|
|
||||||
# 获取函数
|
|
||||||
function_name = module_info['function_name']
|
function_name = module_info['function_name']
|
||||||
if not hasattr(module, function_name):
|
if not hasattr(module, function_name):
|
||||||
raise HTTPException(status_code=404, detail=f"Function {function_name} not found in module {module_info['module_path']}")
|
raise HTTPException(status_code=404, detail=f"Function {function_name} not found in module {module_info['module_path']}")
|
||||||
|
|
||||||
func = getattr(module, function_name)
|
func = getattr(module, function_name)
|
||||||
|
|
||||||
# 获取请求数据
|
# 获取请求数据
|
||||||
request_data = await request.json()
|
request_data = await request.json()
|
||||||
|
|
||||||
# 调用函数
|
# 调用函数
|
||||||
result = func(**request_data)
|
result = func(**request_data)
|
||||||
|
|
||||||
return JSONResponse(content={
|
return JSONResponse(content={
|
||||||
"success": True,
|
"success": True,
|
||||||
"data": result
|
"data": result
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user