50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package ua
|
|
|
|
import "strings"
|
|
|
|
// ============================== User-Agent 解析 ==============================
|
|
|
|
// ParseOS 从 User-Agent 解析操作系统
|
|
//
|
|
// 供操作日志与登录日志记录使用,无法识别时返回 Unknown
|
|
func ParseOS(userAgent string) string {
|
|
ua := strings.ToLower(userAgent)
|
|
switch {
|
|
case strings.Contains(ua, "windows nt 10"):
|
|
return "Windows 10/11"
|
|
case strings.Contains(ua, "windows nt"):
|
|
return "Windows"
|
|
case strings.Contains(ua, "iphone"), strings.Contains(ua, "ipad"):
|
|
return "iOS"
|
|
case strings.Contains(ua, "android"):
|
|
return "Android"
|
|
case strings.Contains(ua, "mac os x"), strings.Contains(ua, "macintosh"):
|
|
return "macOS"
|
|
case strings.Contains(ua, "linux"):
|
|
return "Linux"
|
|
}
|
|
return "Unknown"
|
|
}
|
|
|
|
// ParseBrowser 从 User-Agent 解析浏览器
|
|
//
|
|
// 供操作日志与登录日志记录使用,无法识别时返回 Unknown
|
|
func ParseBrowser(userAgent string) string {
|
|
ua := userAgent
|
|
switch {
|
|
case strings.Contains(ua, "Edg/"), strings.Contains(ua, "Edge/"):
|
|
return "Edge"
|
|
case strings.Contains(ua, "OPR/"), strings.Contains(ua, "Opera"):
|
|
return "Opera"
|
|
case strings.Contains(ua, "Firefox/"):
|
|
return "Firefox"
|
|
case strings.Contains(ua, "Chrome/"), strings.Contains(ua, "CriOS"):
|
|
return "Chrome"
|
|
case strings.Contains(ua, "Safari/"):
|
|
return "Safari"
|
|
case strings.Contains(ua, "curl/"):
|
|
return "curl"
|
|
}
|
|
return "Unknown"
|
|
}
|