From 39189c8a20b1412c0f198753f1b00b55d95390bc Mon Sep 17 00:00:00 2001 From: Rachel Tan Date: Mon, 22 Nov 2021 11:12:02 +0800 Subject: [PATCH 1/2] test --- ua.go | 1 + 1 file changed, 1 insertion(+) diff --git a/ua.go b/ua.go index f1bc591..a87465c 100644 --- a/ua.go +++ b/ua.go @@ -432,6 +432,7 @@ func (p properties) findBestMatch(withVerOnly bool) string { var rxMacOSVer = regexp.MustCompile("[_\\d\\.]+") func findVersion(s string) string { + if ver := rxMacOSVer.FindString(s); ver != "" { return strings.Replace(ver, "_", ".", -1) } From 14151df0b7aa6715dc27eabc91a613ef55d81e59 Mon Sep 17 00:00:00 2001 From: Rachel Tan Date: Mon, 22 Nov 2021 11:14:30 +0800 Subject: [PATCH 2/2] add chromeOS --- ua.go | 12 ++++++++++-- ua_test.go | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ua.go b/ua.go index a87465c..be6f00f 100644 --- a/ua.go +++ b/ua.go @@ -37,6 +37,7 @@ const ( MacOS = "macOS" IOS = "iOS" Linux = "Linux" + ChromeOS = "CrOS" Opera = "Opera" OperaMini = "Opera Mini" @@ -115,6 +116,11 @@ func Parse(userAgent string) UserAgent { ua.OSVersion = tokens[Linux] ua.Desktop = true + case tokens.exists("CrOS"): + ua.OS = ChromeOS + ua.OSVersion = tokens[ChromeOS] + ua.Desktop = true + } // for s, val := range sys { @@ -359,6 +365,9 @@ func checkVer(s string) (name, v string) { switch s[:i] { case "Linux", "Windows NT", "Windows Phone OS", "MSIE", "Android": return s[:i], s[i+1:] + case "CrOS x86_64", "CrOS aarch64" : + j := strings.LastIndex(s[:i]," ") + return s[:j],s[j+1:i] default: return s, "" } @@ -414,7 +423,7 @@ func (p properties) findBestMatch(withVerOnly bool) string { for i := 0; i < n; i++ { for k, v := range p { switch k { - case Chrome, Firefox, Safari, "Version", "Mobile", "Mobile Safari", "Mozilla", "AppleWebKit", "Windows NT", "Windows Phone OS", Android, "Macintosh", Linux, "GSA": + case Chrome, Firefox, Safari, "Version", "Mobile", "Mobile Safari", "Mozilla", "AppleWebKit", "Windows NT", "Windows Phone OS", Android, "Macintosh", Linux, "GSA", ChromeOS: default: if i == 0 { if v != "" { // in first check, only return keys with value @@ -432,7 +441,6 @@ func (p properties) findBestMatch(withVerOnly bool) string { var rxMacOSVer = regexp.MustCompile("[_\\d\\.]+") func findVersion(s string) string { - if ver := rxMacOSVer.FindString(s); ver != "" { return strings.Replace(ver, "_", ".", -1) } diff --git a/ua_test.go b/ua_test.go index eee9510..b3552ae 100644 --- a/ua_test.go +++ b/ua_test.go @@ -75,6 +75,7 @@ func TestParse(t *testing.T) { {"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36", ua.Chrome, "87.0.4280.141", "desktop", ua.MacOS}, // other + {"Mozilla/5.0 (X11; CrOS x86_64 14150.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.114 Safari/537.36",ua.Chrome, "94.0.4606.114", "desktop", ua.ChromeOS}, {"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Google (+https://developers.google.com/+/web/snippet/)", ua.Chrome, "56.0.2924.87", "bot", ua.Linux}, // Google+ fetch // tools