MCPcopy Index your code
hub / github.com/PatchMon/PatchMon / parseUserAgent

Function parseUserAgent

server-source-code/internal/handler/auth.go:1139–1173  ·  view source on GitHub ↗

parseUserAgent extracts browser, OS, and device from user agent string.

(ua string)

Source from the content-addressed store, hash-verified

1137
1138// parseUserAgent extracts browser, OS, and device from user agent string.
1139func parseUserAgent(ua string) map[string]string {
1140 out := map[string]string{"browser": "Unknown", "os": "Unknown", "device": "Desktop"}
1141 if ua == "" {
1142 return out
1143 }
1144 lower := strings.ToLower(ua)
1145 if strings.Contains(lower, "chrome") && !strings.Contains(lower, "edg") {
1146 out["browser"] = "Chrome"
1147 } else if strings.Contains(lower, "firefox") {
1148 out["browser"] = "Firefox"
1149 } else if strings.Contains(lower, "safari") && !strings.Contains(lower, "chrome") {
1150 out["browser"] = "Safari"
1151 } else if strings.Contains(lower, "edg") {
1152 out["browser"] = "Edge"
1153 } else if strings.Contains(lower, "opera") {
1154 out["browser"] = "Opera"
1155 }
1156 if strings.Contains(lower, "windows") {
1157 out["os"] = "Windows"
1158 } else if strings.Contains(lower, "macintosh") || strings.Contains(lower, "mac os") {
1159 out["os"] = "macOS"
1160 } else if strings.Contains(lower, "linux") {
1161 out["os"] = "Linux"
1162 } else if strings.Contains(lower, "android") {
1163 out["os"] = "Android"
1164 } else if strings.Contains(lower, "iphone") || strings.Contains(lower, "ipad") {
1165 out["os"] = "iOS"
1166 }
1167 if strings.Contains(lower, "mobile") {
1168 out["device"] = "Mobile"
1169 } else if strings.Contains(lower, "tablet") || strings.Contains(lower, "ipad") {
1170 out["device"] = "Tablet"
1171 }
1172 return out
1173}
1174
1175// getLocationFromIP returns basic location info (simplified; for local/private IPs returns "Local").
1176func getLocationFromIP(ip string) map[string]string {

Callers 2

buildDeviceLabelFunction · 0.85
GetSessionsMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected