Add support for brackets in parser
+ identifies facebook app user agent
This commit is contained in:
@@ -56,6 +56,8 @@ const (
|
|||||||
FacebookExternalHit = "facebookexternalhit"
|
FacebookExternalHit = "facebookexternalhit"
|
||||||
Applebot = "Applebot"
|
Applebot = "Applebot"
|
||||||
Bingbot = "Bingbot"
|
Bingbot = "Bingbot"
|
||||||
|
|
||||||
|
FacebookApp = "Facebook App"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Parse user agent string returning UserAgent struct
|
// Parse user agent string returning UserAgent struct
|
||||||
@@ -246,6 +248,9 @@ func Parse(userAgent string) UserAgent {
|
|||||||
ua.Mobile = true
|
ua.Mobile = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case tokens.exists("FBAN"):
|
||||||
|
ua.Name = FacebookApp
|
||||||
|
|
||||||
case tokens.get("HuaweiBrowser") != "":
|
case tokens.get("HuaweiBrowser") != "":
|
||||||
ua.Name = "Huawei Browser"
|
ua.Name = "Huawei Browser"
|
||||||
ua.Version = tokens.get("HuaweiBrowser")
|
ua.Version = tokens.get("HuaweiBrowser")
|
||||||
@@ -349,6 +354,7 @@ func parse(userAgent string) properties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
parOpen := false
|
parOpen := false
|
||||||
|
braOpen := false
|
||||||
|
|
||||||
bua := []byte(userAgent)
|
bua := []byte(userAgent)
|
||||||
for i, c := range bua {
|
for i, c := range bua {
|
||||||
@@ -359,13 +365,20 @@ func parse(userAgent string) properties {
|
|||||||
addToken()
|
addToken()
|
||||||
parOpen = false
|
parOpen = false
|
||||||
|
|
||||||
case parOpen && c == 59: // ;
|
case (parOpen || braOpen) && c == 59: // ;
|
||||||
addToken()
|
addToken()
|
||||||
|
|
||||||
case c == 40: // (
|
case c == 40: // (
|
||||||
addToken()
|
addToken()
|
||||||
parOpen = true
|
parOpen = true
|
||||||
|
|
||||||
|
case c == 91: // [
|
||||||
|
addToken()
|
||||||
|
braOpen = true
|
||||||
|
case c == 93: // ]
|
||||||
|
addToken()
|
||||||
|
braOpen = false
|
||||||
|
|
||||||
case slash && c == 32:
|
case slash && c == 32:
|
||||||
addToken()
|
addToken()
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ var testTable = [][]string{
|
|||||||
// HeadlessChrome
|
// 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},
|
{"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
|
// 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; 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
|
{"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/)"
|
//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 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
|
//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) {
|
func TestParse(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user