package web import ( "strings" "unicode/utf8" ) var deviceBrowsers = []struct{ token, name string }{ {"Edg/", "Edge"}, {"OPR/", "Opera"}, {"SamsungBrowser/", "Samsung Internet"}, {"Firefox/", "Firefox"}, {"FxiOS/", "Firefox"}, {"CriOS/", "Chrome"}, {"Chrome/", "Chrome"}, {"Version/", "Safari"}, } var deviceSystems = []struct{ token, name string }{ {"Windows", "Windows"}, {"iPhone", "iOS"}, {"iPad", "iOS"}, {"Android", "Android"}, {"CrOS", "ChromeOS"}, {"Mac OS X", "macOS"}, {"Linux", "Linux"}, } func deviceLabel(ua string) string { browser := firstToken(ua, deviceBrowsers) system := firstToken(ua, deviceSystems) if browser == "" || system == "" { return "" } return browser + ", " + system } func firstToken(ua string, table []struct{ token, name string }) string { for _, e := range table { if strings.Contains(ua, e.token) { return e.name } } return "" } var accountAgentShown = 80 func clipAgent(ua string) string { if len(ua) <= accountAgentShown { return ua } cut := accountAgentShown for cut > 0 && !utf8.RuneStart(ua[cut]) { cut-- } return ua[:cut] + "…" }