Build lightweight AI agent admin

This commit is contained in:
Codex
2026-06-08 18:14:59 +08:00
commit e164840f43
2530 changed files with 435693 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
客户端信息提取工具
从HTTP请求中提取客户端IP、浏览器、操作系统等信息
"""
import hashlib
from fastapi import Request
def get_client_info(request: Request) -> dict:
"""
从请求中提取客户端信息
Args:
request: FastAPI Request对象
Returns:
dict: 包含以下字段:
- login_ip: 客户端IP地址
- user_agent: 完整的User-Agent字符串
- browser_type: 浏览器类型
- os_type: 操作系统类型
- device_type: 设备类型 (desktop/mobile/tablet)
"""
# 获取IP地址
login_ip = request.headers.get("X-Forwarded-For", "")
if login_ip:
login_ip = login_ip.split(",")[0].strip()
else:
login_ip = request.client.host if request.client else "0.0.0.0"
# 获取User-Agent
user_agent = request.headers.get("User-Agent", "")
# 解析浏览器和操作系统
browser_type = None
os_type = None
device_type = "desktop"
ua_lower = user_agent.lower()
# 浏览器检测
if "chrome" in ua_lower and "edg" not in ua_lower:
browser_type = "Chrome"
elif "firefox" in ua_lower:
browser_type = "Firefox"
elif "safari" in ua_lower and "chrome" not in ua_lower:
browser_type = "Safari"
elif "edg" in ua_lower:
browser_type = "Edge"
elif "msie" in ua_lower or "trident" in ua_lower:
browser_type = "IE"
# 操作系统检测
if "windows" in ua_lower:
os_type = "Windows"
elif "mac os" in ua_lower or "macos" in ua_lower:
os_type = "macOS"
elif "linux" in ua_lower:
os_type = "Linux"
elif "android" in ua_lower:
os_type = "Android"
device_type = "mobile"
elif "iphone" in ua_lower or "ipad" in ua_lower:
os_type = "iOS"
device_type = "mobile" if "iphone" in ua_lower else "tablet"
return {
"login_ip": login_ip,
"user_agent": user_agent,
"browser_type": browser_type,
"os_type": os_type,
"device_type": device_type,
}
def get_client_ip(request: Request) -> str:
"""
仅获取客户端IP地址
Args:
request: FastAPI Request对象
Returns:
str: 客户端IP地址
"""
login_ip = request.headers.get("X-Forwarded-For", "")
if login_ip:
return login_ip.split(",")[0].strip()
return request.client.host if request.client else "0.0.0.0"
def get_device_id(request: Request) -> str:
"""
生成设备唯一标识
基于 User-Agent 和 IP 地址生成设备ID,用于多设备登录场景
Args:
request: FastAPI Request对象
Returns:
str: 设备唯一标识(MD5哈希值)
"""
user_agent = request.headers.get("User-Agent", "")
client_ip = get_client_ip(request)
# 使用 User-Agent + IP 生成设备标识
device_string = f"{user_agent}:{client_ip}"
device_id = hashlib.md5(device_string.encode()).hexdigest()
return device_id