2025-02-15 02:01:54 +08:00
|
|
|
import logging
|
2025-02-15 12:30:20 +08:00
|
|
|
import os
|
2025-02-15 02:01:54 +08:00
|
|
|
from aiohttp import web
|
2025-02-15 12:30:20 +08:00
|
|
|
from core.utils.util import get_local_ip, get_project_dir
|
|
|
|
|
from manager.api.prompt import PromptHandler
|
2025-02-15 02:01:54 +08:00
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
2025-02-15 12:30:20 +08:00
|
|
|
|
|
|
|
|
async def handle_options(request):
|
|
|
|
|
headers = {
|
|
|
|
|
'Access-Control-Allow-Origin': '*',
|
|
|
|
|
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
|
|
|
'Access-Control-Allow-Headers': 'Content-Type, Authorization'
|
|
|
|
|
}
|
|
|
|
|
return web.Response(headers=headers)
|
|
|
|
|
|
|
|
|
|
|
2025-02-15 02:01:54 +08:00
|
|
|
class ConfigServer:
|
|
|
|
|
def __init__(self, config: dict):
|
|
|
|
|
self.config = config
|
|
|
|
|
self.app = web.Application()
|
2025-02-15 12:30:20 +08:00
|
|
|
|
|
|
|
|
# 初始化接口处理器
|
|
|
|
|
self.prompt_handler = PromptHandler(config)
|
2025-02-15 02:01:54 +08:00
|
|
|
self.setup_routes()
|
|
|
|
|
|
|
|
|
|
def setup_routes(self):
|
2025-02-15 12:30:20 +08:00
|
|
|
# 注册prompt接口
|
|
|
|
|
self.app.router.add_get('/api/prompt', self.prompt_handler.get_prompt)
|
|
|
|
|
self.app.router.add_post('/api/prompt', self.prompt_handler.update_prompt)
|
|
|
|
|
self.app.router.add_options('/api/prompt', handle_options)
|
2025-02-15 02:01:54 +08:00
|
|
|
|
2025-02-15 12:30:20 +08:00
|
|
|
# 注册静态文件路由
|
|
|
|
|
static_dir = os.path.join(get_project_dir(), 'manager/static') # 获取static目录绝对路径
|
|
|
|
|
self.app.router.add_static(
|
|
|
|
|
prefix='/manager/', # 匹配前缀
|
|
|
|
|
path=static_dir, # 静态文件目录
|
|
|
|
|
name='static'
|
|
|
|
|
)
|
|
|
|
|
self.app.router.add_get('/manager', self.redirect_to_index)
|
2025-02-15 02:09:09 +08:00
|
|
|
|
2025-02-15 12:30:20 +08:00
|
|
|
async def redirect_to_index(self, _):
|
|
|
|
|
raise web.HTTPFound('/manager/')
|
2025-02-15 02:01:54 +08:00
|
|
|
|
|
|
|
|
async def start(self):
|
|
|
|
|
try:
|
2025-02-15 12:30:20 +08:00
|
|
|
http_config = self.config['manager']
|
2025-02-15 02:01:54 +08:00
|
|
|
if not http_config.get('enabled', False):
|
|
|
|
|
logger.info("HTTP server is disabled")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
runner = web.AppRunner(self.app)
|
|
|
|
|
await runner.setup()
|
|
|
|
|
site = web.TCPSite(runner, http_config['ip'], http_config['port'])
|
|
|
|
|
await site.start()
|
2025-02-15 12:30:20 +08:00
|
|
|
logger.info(
|
|
|
|
|
f"Config HTTP server is running at http://{get_local_ip()}:{http_config['port']}/manager/index.html")
|
2025-02-15 02:01:54 +08:00
|
|
|
return runner # 返回runner以便后续清理
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f"Failed to start HTTP server: {e}")
|
|
|
|
|
raise
|