Add support for brackets in parser
+ identifies facebook app user agent
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user