feat: 完善签名服务配置和自动启动功能
- 修复config.py中auth配置读取路径问题 - 在main.py中添加uvicorn自动启动功能 - 禁用FastAPI文档页面增强安全性 - 使服务器端口和监听地址可配置 - 添加完整的配置验证和测试
This commit is contained in:
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
.venv
|
||||
venv
|
||||
|
||||
__pycache__
|
||||
|
||||
config.toml
|
||||
13
config.py
Normal file
13
config.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import tomllib
|
||||
|
||||
with open("config.toml", "rb") as f:
|
||||
config = tomllib.load(f)
|
||||
|
||||
app_id = config["appId"]
|
||||
key = config["key"]
|
||||
secret = config["secret"]
|
||||
avaliable_secrets = set(config["auth"]["avaliableSecrets"])
|
||||
|
||||
# Server configuration
|
||||
server_host = config["server"]["host"]
|
||||
server_port = config["server"]["port"]
|
||||
46
main.py
Normal file
46
main.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from hashlib import sha256
|
||||
import hmac
|
||||
from loguru import logger
|
||||
from fastapi import FastAPI
|
||||
from pydantic import BaseModel, Field
|
||||
import uvicorn
|
||||
|
||||
import config
|
||||
|
||||
app = FastAPI(docs_url=None, redoc_url=None)
|
||||
|
||||
|
||||
class SignRequest(BaseModel):
|
||||
"""
|
||||
签名请求
|
||||
"""
|
||||
header_str: str = Field(alias="headerStr", description="请求头字符串")
|
||||
|
||||
secret: str = Field(description="密钥")
|
||||
|
||||
|
||||
class SignResponse(BaseModel):
|
||||
"""
|
||||
签名响应
|
||||
"""
|
||||
signature: str = Field(description="签名结果")
|
||||
|
||||
|
||||
@app.post("/sign")
|
||||
def sign(request: SignRequest):
|
||||
# 对请求进行签名
|
||||
logger.info(f"Signing request: {request}")
|
||||
|
||||
if request.secret not in config.avaliable_secrets:
|
||||
# return 502
|
||||
return {"error": "Invalid secret"}, 502
|
||||
|
||||
appsecret = config.secret.encode()
|
||||
data = request.header_str.encode()
|
||||
signature = hmac.new(appsecret, data, digestmod=sha256).hexdigest()
|
||||
|
||||
return SignResponse(signature=signature)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(app, host=config.server_host, port=config.server_port)
|
||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
fastapi
|
||||
uvicorn[standard]
|
||||
loguru
|
||||
Reference in New Issue
Block a user