From da1d8437ab322045b82f46e78fe9316c1caa27db Mon Sep 17 00:00:00 2001 From: Antoine Goutagny Date: Fri, 17 Feb 2023 14:56:06 +0100 Subject: [PATCH] Add support for brackets in parser + identifies facebook app user agent --- ua.go | 15 ++++++++++++++- ua_test.go | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ua.go b/ua.go index d0fcf3d..28b92a5 100644 --- a/ua.go +++ b/ua.go @@ -56,6 +56,8 @@ const ( FacebookExternalHit = "facebookexternalhit" Applebot = "Applebot" Bingbot = "Bingbot" + + FacebookApp = "Facebook App" ) // Parse user agent string returning UserAgent struct @@ -246,6 +248,9 @@ func Parse(userAgent string) UserAgent { ua.Mobile = true } + case tokens.exists("FBAN"): + ua.Name = FacebookApp + case tokens.get("HuaweiBrowser") != "": ua.Name = "Huawei Browser" ua.Version = tokens.get("HuaweiBrowser") @@ -349,6 +354,7 @@ func parse(userAgent string) properties { } parOpen := false + braOpen := false bua := []byte(userAgent) for i, c := range bua { @@ -359,13 +365,20 @@ func parse(userAgent string) properties { addToken() parOpen = false - case parOpen && c == 59: // ; + case (parOpen || braOpen) && c == 59: // ; addToken() case c == 40: // ( addToken() parOpen = true + case c == 91: // [ + addToken() + braOpen = true + case c == 93: // ] + addToken() + braOpen = false + case slash && c == 32: addToken() diff --git a/ua_test.go b/ua_test.go index 5ba39c8..6b991e3 100644 --- a/ua_test.go +++ b/ua_test.go @@ -91,6 +91,9 @@ var testTable = [][]string{ // HeadlessChrome {"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/98.0.4758.0 Safari/537.36", ua.HeadlessChrome, "98.0.4758.0", "desktop", ua.Linux}, + //FB App + {"Mozilla/5.0 (iPhone; CPU iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/19E258 [FBAN/FBIOS;FBDV/iPhone8,2;FBMD/iPhone;FBSN/iOS;FBSV/15.4.1;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5]", ua.FacebookApp, "FBIOS", "mobile", ua.IOS}, + // 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 @@ -108,6 +111,7 @@ var testTable = [][]string{ //GooglePlus "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/)" //Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1; +http://www.apple.com/go/applebot) //Mozilla/5.0 (Macintosh; Intel Mac OS Xt 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.6.0 Chrome/45.0.2454.101 Safari/537.36 + } func TestParse(t *testing.T) {