steam-server/linxyun/core.py
2024-12-16 14:31:28 +08:00

67 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
from fastapi import FastAPI
from linxyun.utils.result import Result, SysCodes
from linxyun.utils.logger import get_logger
from linxyun.config import Config
from linxyun.sso.middleware.security import SecurityMiddleware
from expiringdict import ExpiringDict
import json
logger = get_logger(__name__)
class Linxyun:
def __init__(self, config: Config):
logger.info(f"Linxyun init{config}")
self.user_auth_dict = ExpiringDict(max_len=10000, max_age_seconds=60*60*24) # 24小时
self.config = config
def add_security_middleware(self, app: FastAPI):
app.add_middleware(SecurityMiddleware, linxyun=self)
def get_api_url(self, path: str) -> str:
# 基础 URL 和项目名称
base_url = f"{self.config.url}/{self.config.project}"
# 如果 path 为空,返回 base_url
if not path:
return base_url
# 如果 path 不以 / 开头,添加 /
if not path.startswith("/"):
path = "/" + path
# 如果 path 不以 .action 结尾,添加 .action
if not path.endswith(".action"):
path += ".action"
# 返回完整的 URL
return base_url + path
def user_login_auth(self, token: str) -> Result:
if not token:
return Result.error(SysCodes.USER_NOT_LOGIN)
url = self.get_api_url("userLoginAuth")
resp = requests.post(url, json={"LoginID": token})
if resp.status_code != 200:
return Result.error(SysCodes.REQUEST_FAILED)
json_resp = resp.json()
if json_resp.get("success") is False:
return Result.error(SysCodes.LOGIN_FAIL)
data = json_resp.get("data")
if not data:
return Result.error(SysCodes.USER_NOT_LOGIN)
data = json.loads(data)
logger.info(f"登录成功:{data}")
self.user_auth_dict[token] = data
return Result.ok(data)
def get_user_auth(self, token: str) -> Result:
if token in self.user_auth_dict:
return Result.ok(self.user_auth_dict[token])
return self.user_login_auth(token)