Build lightweight AI agent admin
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user