From 70b57c175784d900e3744a5904bfb1a536c53126 Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Wed, 15 Apr 2015 11:00:33 -0700 Subject: [PATCH 001/253] SVG Build Status badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff6e0f14..f6e3801d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -uap-core [![Build Status](https://secure.travis-ci.org/ua-parser/uap-core.png?branch=master)](https://travis-ci.org/ua-parser/uap-core) +uap-core [![Build Status](https://secure.travis-ci.org/ua-parser/uap-core.svg?branch=master)](https://travis-ci.org/ua-parser/uap-core) ======== This repository contains the core of [BrowserScope][2]'s original [user agent string parser][3]: data collected over the years by [Steve Souders][4] and numerous other contributors, extracted into a separate [YAML file][5] so as to be reusable _as is_ by implementations in any programming language. From b059eff2d9e2e007c79b43a1b2bb8ff2befd30ee Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 13 Sep 2015 19:05:06 +0200 Subject: [PATCH 002/253] use node version 4 and latest --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6486e92b..66d69d37 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,8 @@ sudo: false language: node_js node_js: - 0.12 - - 4.0 + - 4 + - node script: - "npm test" From 751c4340f0601ea4a0610a81589738488782ed7b Mon Sep 17 00:00:00 2001 From: Jason Stangroome Date: Mon, 31 Aug 2015 11:50:08 +1000 Subject: [PATCH 003/253] Add Site Confidence bot detection --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index ccd01420..e0b8c43c 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -30,7 +30,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' From 5e46e140d6818dab4140bf2237eb9aa617ffc107 Mon Sep 17 00:00:00 2001 From: Jason Stangroome Date: Tue, 1 Sep 2015 20:56:14 +1000 Subject: [PATCH 004/253] Add test for SiteCon user agent --- tests/test_ua.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 5172ba70..be3af76c 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6111,3 +6111,9 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (Linux; U; en-gb) AppleWebKit/418.9.1 (KHTML, like Gecko) SiteCon/8.10.9' + family: 'SiteCon' + major: '8' + minor: '10' + patch: '9' + From bd55b82f4bbd6ca349ec1634013e266bd492248a Mon Sep 17 00:00:00 2001 From: Giorgos Logiotatidis Date: Fri, 11 Sep 2015 16:52:48 +0300 Subject: [PATCH 005/253] Add Firefox for iOS. --- regexes.yaml | 2 ++ tests/test_ua.yaml | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ccd01420..73cd76a5 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -73,6 +73,8 @@ user_agent_parsers: - regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)' family_replacement: 'MicroB' - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?' + - regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+))?(\.(\d+))?' + family_replacement: 'Firefox iOS' # e.g.: Flock/2.0b2 - regex: '(Flock)/(\d+)\.(\d+)(b\d+?)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 5172ba70..8d2988ca 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6111,3 +6111,14 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4' + family: 'Firefox iOS' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4' + family: 'Firefox iOS' + major: '1' + minor: '0' + patch: From 3591f8c105165db37856aaae8f52476b53a7ba71 Mon Sep 17 00:00:00 2001 From: Giorgos Logiotatidis Date: Fri, 11 Sep 2015 14:40:58 +0300 Subject: [PATCH 006/253] Add Firefox OS version numbers. Reference https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference Add Firefox OS generic. --- regexes.yaml | 38 ++++++++++++++++++++++++++++++++ tests/test_os.yaml | 54 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 73cd76a5..f88982a5 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -875,9 +875,47 @@ os_parsers: ########## # Firefox OS ########## + - regex: '\((?:Mobile|Tablet);.+Gecko/18.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '1' + os_v2_replacement: '0' + os_v3_replacement: '1' + + - regex: '\((?:Mobile|Tablet);.+Gecko/18.1 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '1' + os_v2_replacement: '1' + + - regex: '\((?:Mobile|Tablet);.+Gecko/26.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '1' + os_v2_replacement: '2' + + - regex: '\((?:Mobile|Tablet);.+Gecko/28.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '1' + os_v2_replacement: '3' + + - regex: '\((?:Mobile|Tablet);.+Gecko/30.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '1' + os_v2_replacement: '4' + + - regex: '\((?:Mobile|Tablet);.+Gecko/32.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '2' + os_v2_replacement: '0' + + - regex: '\((?:Mobile|Tablet);.+Gecko/34.0 Firefox/\d+\.\d+' + os_replacement: 'Firefox OS' + os_v1_replacement: '2' + os_v2_replacement: '1' + + # Firefox OS Generic - regex: '\((?:Mobile|Tablet);.+Firefox/\d+\.\d+' os_replacement: 'Firefox OS' + ########## # BREW # yes, Brew is lower-cased for Brew MP diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 61f53541..04157b18 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2117,8 +2117,58 @@ test_cases: patch: '2' patch_minor: - - user_agent_string: 'Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0' - family: 'Mac OS X' + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/18.0 Firefox/26.0' + family: 'Firefox OS' + major: '1' + minor: '0' + patch: '1' + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/18.1 Firefox/26.0' + family: 'Firefox OS' + major: '1' + minor: '1' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0' + family: 'Firefox OS' + major: '1' + minor: '2' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/28.0 Firefox/26.0' + family: 'Firefox OS' + major: '1' + minor: '3' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/30.0 Firefox/26.0' + family: 'Firefox OS' + major: '1' + minor: '4' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/32.0 Firefox/26.0' + family: 'Firefox OS' + major: '2' + minor: '0' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/34.0 Firefox/26.0' + family: 'Firefox OS' + major: '2' + minor: '1' + patch: + patch_minor: + + # Test generic Firefox OS matching + - user_agent_string: 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/11.0 Firefox/26.0' + family: 'Firefox OS' major: minor: patch: From 09b6d1e92436ed4916df72b0304ad244caff403d Mon Sep 17 00:00:00 2001 From: Russell Whitaker Date: Thu, 17 Sep 2015 13:17:04 -0700 Subject: [PATCH 007/253] Fixed HTC regexes with non-existent capture groups in replacements --- regexes.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ccd01420..6e499bbb 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2002,9 +2002,9 @@ device_parsers: ######### - regex: '; *HTC[ _]([^;]+); Windows Phone' - device_replacement: 'HTC $1 $2' + device_replacement: 'HTC $1' brand_replacement: 'HTC' - model_replacement: '$1 $2' + model_replacement: '$1' # Android HTC with Version Number matcher # ; HTC_0P3Z11/1.12.161.3 Build @@ -2036,9 +2036,9 @@ device_parsers: brand_replacement: 'HTC' model_replacement: '$1 $2' - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+))?)?(?: *Build|[;\)]| - )' - device_replacement: 'HTC $1 $2 $3 $4' + device_replacement: 'HTC $1 $2 $3' brand_replacement: 'HTC' - model_replacement: '$1 $2 $3 $4' + model_replacement: '$1 $2 $3' - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+))?)?)?(?: *Build|[;\)]| - )' device_replacement: 'HTC $1 $2 $3 $4' brand_replacement: 'HTC' @@ -2063,9 +2063,9 @@ device_parsers: model_replacement: '$1' - regex: '; *(ADR6200|ADR6400L|ADR6425LVW|Amaze|DesireS?|EndeavorU|Eris|EVO|Evo\d[A-Z]+|HD2|IncredibleS?|Inspire[A-Z0-9]*|Inspire[A-Z0-9]*|Sensation[A-Z0-9]*|Wildfire)[ _-](.+?)(?:[/;\)]|Build|MIUI|1\.0)' regex_flag: 'i' - device_replacement: 'HTC $1 $2 $3 $4' + device_replacement: 'HTC $1 $2' brand_replacement: 'HTC' - model_replacement: '$1 $2 $3 $4' + model_replacement: '$1 $2' ######### # Hyundai From 032d74112b083dc280b3fdae95a3202b0d556e6c Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 19 Sep 2015 22:56:14 +0200 Subject: [PATCH 008/253] Spotify --- regexes.yaml | 2 +- tests/test_ua.yaml | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index e543618c..81764c17 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -257,7 +257,7 @@ user_agent_parsers: #### MAIN CASES - this catches > 50% of all browsers #### # Browser/major_version.minor_version.beta_version - - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' + - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'MSOffice 12' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 25a74a20..d67954c2 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6128,3 +6128,34 @@ test_cases: major: '1' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.9.133 Safari/537.36' + family: 'Spotify' + major: '1' + minor: '0' + patch: '9' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.9.133 Safari/537.36' + family: 'Spotify' + major: '1' + minor: '0' + patch: '9' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.4.90 Safari/537.36' + family: 'Spotify' + major: '1' + minor: '0' + patch: '4' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.3.101 Safari/537.36' + family: 'Spotify' + major: '1' + minor: '0' + patch: '3' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.8.59 Safari/537.36' + family: 'Spotify' + major: '1' + minor: '0' + patch: '8' + From f74e025565e358514639156696f4d3ec995e0e2a Mon Sep 17 00:00:00 2001 From: commenthol Date: Mon, 21 Sep 2015 21:01:10 +0200 Subject: [PATCH 009/253] ios 9 apps --- regexes.yaml | 7 +++++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 81764c17..38ed50e9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -789,6 +789,9 @@ os_parsers: os_replacement: 'Mac OS X' os_v1_replacement: '10' os_v2_replacement: '10' + - regex: '(CF)(Network)/758\.(\d)' + os_replacement: 'iOS' + os_v1_replacement: '9' ########## # CFNetwork iOS Apps @@ -813,6 +816,10 @@ os_parsers: os_replacement: 'iOS' os_v1_replacement: '8' os_v2_replacement: '0' + - regex: 'CFNetwork/7.* Darwin/(15)\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '9' + os_v2_replacement: '0' # iOS Apps - regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 9994a42f..d3f03c3f 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2180,3 +2180,10 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'TestApp/1.0 CFNetwork/758.0.2 Darwin/15.0.0' + family: 'iOS' + major: '9' + minor: '0' + patch: + patch_minor: From a98d9192edd9da5ae09d29f33fe753c8ee6b24eb Mon Sep 17 00:00:00 2001 From: Grigory Kalabin Date: Tue, 29 Sep 2015 17:11:18 +0300 Subject: [PATCH 010/253] Fix broken indentation --- tests/test_ua.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index d67954c2..85064ef4 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6147,13 +6147,13 @@ test_cases: minor: '0' patch: '4' - - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.3.101 Safari/537.36' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.3.101 Safari/537.36' family: 'Spotify' major: '1' minor: '0' patch: '3' - - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.8.59 Safari/537.36' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Spotify/1.0.8.59 Safari/537.36' family: 'Spotify' major: '1' minor: '0' From 98d29ff4dbab665e380ef0c7eaeeecb6afce425c Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 19 Sep 2015 22:46:56 +0200 Subject: [PATCH 011/253] fix Firefox on Android Tablet --- regexes.yaml | 2 +- tests/test_ua.yaml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 38ed50e9..0dad31b7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -56,7 +56,7 @@ user_agent_parsers: family_replacement: 'Firefox Mobile' - regex: '(Fennec)/(\d+)\.(\d+)' family_replacement: 'Firefox Mobile' - - regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)' + - regex: '(?:Mobile|Tablet);.*(Firefox)/(\d+)\.(\d+)' family_replacement: 'Firefox Mobile' - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)' family_replacement: 'Firefox ($1)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 85064ef4..a1d7ba55 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6159,3 +6159,8 @@ test_cases: minor: '0' patch: '8' + - user_agent_string: 'Mozilla/5.0 (Android 5.0; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0' + family: 'Firefox Mobile' + major: '41' + minor: '0' + patch: From c5c34e80570c599d1f7e81a27b3954a4389e2152 Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 2 Oct 2015 08:57:04 +0200 Subject: [PATCH 012/253] adding facebook app --- regexes.yaml | 5 +++ tests/test_ua.yaml | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 0dad31b7..05656b6d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -47,6 +47,11 @@ user_agent_parsers: # must go before Firefox to catch Chimera/SeaMonkey/Camino - regex: '(Chimera|SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' + # Social Networks + # Facebook + - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' + family_replacement: 'Facebook' + # Firefox - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?' family_replacement: 'Pale Moon (Firefox Variant)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a1d7ba55..0d27877e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6164,3 +6164,100 @@ test_cases: major: '41' minor: '0' patch: + + - user_agent_string: '[FBAN/FB4A;FBAV/3.4;FBBV/258875;FBDM/{density=0.75,width=240,height=320};FBLC/tr_TR;FBCR/o2 - de;FBPN/com.facebook.katana;FBDV/LG-E400;FBSV/2.3.6;]' + family: 'Facebook' + major: '3' + minor: '4' + patch: + + - user_agent_string: '[FBAN/FB4A;FBAV/2.3;FBBV/149649;FBDM/{density=1.5,width=480,height=800};FBLC/es_ES;FBCR/;FBPN/com.facebook.katana;FBDV/LG-P920;FBSV/2.2.2;]' + family: 'Facebook' + major: '2' + minor: '3' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; SCH-R720 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 [FBAN/FB4A;FBAV/1.8.1;FBPN/com.facebook.katana;FBDV/SCH-R720;FBSV/2.3.4;FBDM/{density=1.0,width=320,height=' + family: 'Facebook' + major: '1' + minor: '8' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; 706_v92_jbla_fhd Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' + family: 'Facebook' + major: '24' + minor: '0' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 [FBAN/FBIOS;FBAV/6.5.1;FBBV/377040;FBDV/iPhone4,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/6.1.3;FBSS/2; FBCR/Telekom.de;FBID/phone;FBLC/de_DE;' + family: 'Facebook' + major: '6' + minor: '5' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 [FBAN/FBIOS;FBAV/6.2;FBBV/228172;FBDV/iPhone5,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/6.1.3;FBSS/2; FBCR/o2-de;FBID/phone;FBLC/pt_BR;FBOP/1]' + family: 'Facebook' + major: '6' + minor: '2' + patch: + + - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A334 [FBAN/FBIOS;FBAV/6.5.1;FBBV/377040;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.0;FBSS/1; FBCR/;FBID/tablet;FBLC/de_DE;FBOP/1]' + family: 'Facebook' + major: '6' + minor: '5' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU iPhone OS 4_3_2 like Mac OS X; de_DE) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.2;FBBV/4020.0;FBDV/iPad1,1;FBMD/iPad;FBSN/iPhone OS;FBSV/4.3.2;FBSS/1; FBCR/;FBID/tablet;FBLC/de_DE;FBSF/1.0]' + family: 'Facebook' + major: '4' + minor: '0' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU iPhone OS 4_3_5 like Mac OS X; de_DE) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.3;FBBV/4030.0;FBDV/iPad2,2;FBMD/iPad;FBSN/iPhone OS;FBSV/4.3.5;FBSS/1; FBCR/Telekom.de;FBID/tablet;FBLC/de_DE;FBS' + family: 'Facebook' + major: '4' + minor: '0' + patch: '3' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/6.1;FBBV/201075;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/Vodafone.de;FBID/phone;FBLC/en_US;FBOP/1]' + family: 'Facebook' + major: '6' + minor: '1' + patch: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 [FBAN/GroupsForiOS;FBAV/9.0;FBBV/7752968;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/8.2;FBSS/2; FBCR/Telekom.de;FBID/phone;FBLC/de_' + family: 'Facebook' + major: '9' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; fr_FR) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0;FBBV/4000.0;FBDV/iPhone1,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/4.1;FBSS/1; FBCR/Carrier;FBID/phone;FBLC/fr_FR;FBSF/1.' + family: 'Facebook' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Dalvik/1.2.0 (Linux; U; Android 2.2.2; HTC Desire Build/FRG83G) [FBAN/Orca-Android;FBAV/2.6.1-release;FBLC/de_DE;FBBV/288543;FBCR/o2 - de;FBMF/HTC;FBBD/htc_wwe;FBDV/HTC Desire;FBSV/2.2.2]' + family: 'Facebook' + major: '2' + minor: '6' + patch: '1' + + - user_agent_string: '[FBAN/FB4A;FBAV/3.6;FBBV/330148;FBDM/{density=0.75,width=240,height=320};FBLC/de_DE;FBCR/o2 - de;FBPN/com.facebook.katana;FBDV/GT-S5570;FBSV/2.2.1;FBCA/armeabi:unknown;]' + family: 'Facebook' + major: '3' + minor: '6' + patch: + + - user_agent_string: '[FBAN/PAAA;FBAV/1.7;FBDM/{density=2.0,width=720,height=1280};FBLC/es_ES;FB_FW/2;FBSN/Android;FBCR/FONIC;FBDV/GT-I9300;FBSV/4.1.2;]' + family: 'Facebook' + major: '1' + minor: '7' + patch: + + - user_agent_string: '[FBAN/PAAA;FBAV/1.9;FBDM/{density=2.0,width=720,height=1280};FBLC/de_DE;FB_FW/2;FBSN/Android;FBCR/o2 - de;FBDV/GT-I9300;FBSV/4.3;]' + family: 'Facebook' + major: '1' + minor: '9' + patch: + From f2b07187cfcd090d7b6c62b8974cf0ea98053449 Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 2 Oct 2015 08:59:30 +0200 Subject: [PATCH 013/253] adding pinterest --- regexes.yaml | 3 ++ tests/test_ua.yaml | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 05656b6d..22547598 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -51,6 +51,9 @@ user_agent_parsers: # Facebook - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' family_replacement: 'Facebook' + # Pinterest + - regex: '\[(Pinterest)/[^\]]+\]' + - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' # Firefox - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 0d27877e..c7576c67 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6261,3 +6261,81 @@ test_cases: minor: '9' patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B350 [Pinterest/iOS]' + family: 'Pinterest' + major: + minor: + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.2; A3-A11 Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36 [Pinterest/Android]' + family: 'Pinterest' + major: + minor: + patch: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A525 [Pinterest/iOS]' + family: 'Pinterest' + major: + minor: + patch: + + - user_agent_string: 'Pinterest for Android Tablet/1.8.4 (SGP321; 4.3)' + family: 'Pinterest' + major: '1' + minor: '8' + patch: '4' + + - user_agent_string: 'Pinterest for Android Tablet/4.3.1 (A7600-H; 4.4.2)' + family: 'Pinterest' + major: '4' + minor: '3' + patch: '1' + + - user_agent_string: 'Pinterest for Android/1.1.1 (endeavoru; 4.1.1)' + family: 'Pinterest' + major: '1' + minor: '1' + patch: '1' + + - user_agent_string: 'Pinterest for Android/3.6.2 (klte; 4.4.2)' + family: 'Pinterest' + major: '3' + minor: '6' + patch: '2' + + - user_agent_string: 'Pinterest/0.1' + family: 'Pinterest' + major: '0' + minor: '1' + patch: + + - user_agent_string: 'Pinterest/0.2 (+http://www.pinterest.com/)' + family: 'Pinterest' + major: '0' + minor: '2' + patch: + + - user_agent_string: 'Pinterest/3.2 CFNetwork/672.0.8 Darwin/14.0.0' + family: 'CFNetwork' + major: '672' + minor: '0' + patch: '8' + + - user_agent_string: 'Pinterest/3.3.3 CFNetwork/609.1.4 Darwin/13.0.0' + family: 'CFNetwork' + major: '609' + minor: '1' + patch: '4' + + - user_agent_string: 'Pinterest/3356 CFNetwork/711.0.6 Darwin/14.0.0' + family: 'CFNetwork' + major: '711' + minor: '0' + patch: '6' + + - user_agent_string: 'Pinterest/4.1.3 CFNetwork/672.1.14 Darwin/14.0.0' + family: 'CFNetwork' + major: '672' + minor: '1' + patch: '14' + From 3df3f5630024906e0cfbfa5494cd7c00cf6d5207 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 11 Oct 2015 14:39:43 +0200 Subject: [PATCH 014/253] Fix doubled entries for Riddler and Gentoo --- regexes.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 22547598..7063fd42 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -30,7 +30,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' @@ -971,7 +971,7 @@ os_parsers: # just os - regex: '(Windows|Android|WeTab|Maemo)' - - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Gentoo|Mageia|(?:Free|Open|Net|\b)BSD)' + - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)' # Linux + Kernel Version - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?' - regex: 'SunOS' From 9ad2534d9b78ffbf641ae02284c0c714c7fb0de1 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 11 Oct 2015 18:20:20 +0200 Subject: [PATCH 015/253] Adding support for qutebrowser --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 7063fd42..068d37b9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -303,7 +303,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser)/(\d+)\.(\d+)\.?(\d+)?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c7576c67..b2402c25 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6339,3 +6339,9 @@ test_cases: minor: '1' patch: '14' + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) qutebrowser/0.2.1 Safari/538.1' + family: 'qutebrowser' + major: '0' + minor: '2' + patch: '1' + From 8caf305629de1ac57bfeb5ddea8f961cef5fcdc8 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 11 Oct 2015 20:25:34 +0200 Subject: [PATCH 016/253] Adding support for Mobile Safari UIWebView --- regexes.yaml | 18 +++++++----------- test_resources/pgts_browser_list.yaml | 2 +- tests/test_ua.yaml | 14 +++++++++++++- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 068d37b9..76aa4300 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -381,22 +381,18 @@ user_agent_parsers: family_replacement: 'Bon Echo' # @note: iOS / OSX Applications - - regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)' + - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.* Safari' family_replacement: 'Mobile Safari' - - regex: '(iPod).*Version/(\d+)\.(\d+)' - family_replacement: 'Mobile Safari' - - regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'Mobile Safari' - - regex: '(iPhone).*Version/(\d+)\.(\d+)' - family_replacement: 'Mobile Safari' - - regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'Mobile Safari' - - regex: '(iPad).*Version/(\d+)\.(\d+)' + - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Mobile Safari UIWebView' + - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile.* Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile' + family_replacement: 'Mobile Safari UIWebView' + - regex: '(iPod|iPhone|iPad).* Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad)' - family_replacement: 'Mobile Safari' + family_replacement: 'Mobile Safari UIWebView' - regex: '(AvantGo) (\d+).(\d+)' diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index 2aacd017..0af7cc95 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -55,7 +55,7 @@ test_cases: patch: - user_agent_string: 'Alizee iPod 2005 (Beta; Mac OS X)' - family: 'Mobile Safari' + family: 'Mobile Safari UIWebView' major: minor: patch: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b2402c25..cd98c829 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -463,7 +463,7 @@ test_cases: patch: '2' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257' - family: 'Mobile Safari' + family: 'Mobile Safari UIWebView' major: '7' minor: '1' patch: '2' @@ -6345,3 +6345,15 @@ test_cases: minor: '2' patch: '1' + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile' + family: 'Mobile Safari UIWebView' + major: '4' + minor: '3' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari' + family: 'Mobile Safari' + major: '5' + minor: '0' + patch: '2' + From dcaea9b2fff00a0eb9e6814c65a1aa4e8b711341 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 14 Oct 2015 08:48:47 +0200 Subject: [PATCH 017/253] Adding Version to BB10 Browsers --- regexes.yaml | 4 +--- tests/test_ua.yaml | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 068d37b9..dde59b25 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -437,11 +437,9 @@ user_agent_parsers: - regex: '(Nokia)[EN]?(\d+)' # BlackBerry devices - - regex: '(BB10);' - family_replacement: 'BlackBerry WebKit' - regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)' family_replacement: 'BlackBerry WebKit' - - regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)' + - regex: '(Black[bB]erry|BB10).+Version/(\d+)\.(\d+)\.(\d+)' family_replacement: 'BlackBerry WebKit' - regex: '(Black[bB]erry)\s?(\d+)' family_replacement: 'BlackBerry' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b2402c25..018bb827 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -146,9 +146,9 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.3+ (KHTML, like Gecko) Version/10.0.9.388 Mobile Safari/537.3+' family: 'BlackBerry WebKit' - major: - minor: - patch: + major: '10' + minor: '0' + patch: '9' - user_agent_string: 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+' family: 'BlackBerry WebKit' From 790f0bec071006067344f16e183f489c57777276 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 14 Oct 2015 08:56:48 +0200 Subject: [PATCH 018/253] Adding support for Otter, QupZilla Browser --- regexes.yaml | 2 +- tests/test_ua.yaml | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 84e49751..8867a341 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -303,7 +303,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla)/(\d+)\.(\d+)\.?(\d+)?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 0e508700..28bf995e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6357,3 +6357,62 @@ test_cases: minor: '0' patch: '2' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.6.3 Safari/538.1' + family: 'QupZilla' + major: '1' + minor: '6' + patch: '3' + + - user_agent_string: 'Mozilla/5.0 (OS/2 Warp 4.5) AppleWebKit/537.21 (KHTML, like Gecko) QupZilla/1.6.4 Safari/537.21' + family: 'QupZilla' + major: '1' + minor: '6' + patch: '4' + + - user_agent_string: 'Mozilla/5.0 (Unknown; UNIX BSD/SYSV system) AppleWebKit/534.34 (KHTML, like Gecko) QupZilla/1.7.0 Safari/534.34' + family: 'QupZilla' + major: '1' + minor: '7' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) QupZilla/1.6.1 Safari/537.21' + family: 'QupZilla' + major: '1' + minor: '6' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.9.03 beta 3 Safari/538.1' + family: 'Otter' + major: '0' + minor: '9' + patch: '03' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.9.04' + family: 'Otter' + major: '0' + minor: '9' + patch: '04' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Otter/0.9.04-dev' + family: 'Otter' + major: '0' + minor: '9' + patch: '04' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.3.01-dev Safari/538.1' + family: 'Otter' + major: '0' + minor: '3' + patch: '01' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.9.03 beta 3 Safari/538.1' + family: 'Otter' + major: '0' + minor: '9' + patch: '03' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.9.05' + family: 'Otter' + major: '0' + minor: '9' + patch: '05' From 4cdcd32ba0fc8a49da995fdc8e0aa6eb5aaa7366 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 14 Oct 2015 09:05:04 +0200 Subject: [PATCH 019/253] Adding support for Edge Mobile --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 8867a341..855af18e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -201,6 +201,10 @@ user_agent_parsers: # @ref: http://www.puffinbrowser.com - regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?' + # Edge Mobile + - regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)' + family_replacement: 'Edge Mobile' + # Chrome Mobile - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 28bf995e..ce0fcce2 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6416,3 +6416,9 @@ test_cases: major: '0' minor: '9' patch: '05' + + - user_agent_string: 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; NOKIA; Lumia 930) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0' + family: 'Edge Mobile' + major: '12' + minor: '0' + patch: From cea76a36d60011022fedcc456b6777b86bca1cc3 Mon Sep 17 00:00:00 2001 From: Gang Bai Date: Sat, 17 Oct 2015 15:56:27 +0800 Subject: [PATCH 020/253] Added more families into XiaoMi devices. Including 'HM', 'HM NOTE', 'MI NOTE' and 'Redmi'. --- regexes.yaml | 2 +- tests/test_device.yaml | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 8867a341..7dc201c8 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3831,7 +3831,7 @@ device_parsers: # XiaoMi # @ref: http://www.xiaomi.com/event/buyphone ######### - - regex: '; *(MI \d[^;/]*|MI-ONE Plus) Build/' + - regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) Build/' device_replacement: 'XiaoMi $1' brand_replacement: 'XiaoMi' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 87d5abbe..5bb6c798 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -77360,6 +77360,26 @@ test_cases: brand: 'XiaoMi' model: 'MI-ONE Plus' + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; HM 2A Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.0.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.1.1' + family: 'XiaoMi HM 2A' + brand: 'XiaoMi' + model: 'HM 2A' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; HM NOTE 1LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.1.1' + family: 'XiaoMi HM NOTE 1LTE' + brand: 'XiaoMi' + model: 'HM NOTE 1LTE' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; MI NOTE Pro Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/42.0.0.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.1.1' + family: 'XiaoMi MI NOTE Pro' + brand: 'XiaoMi' + model: 'MI NOTE Pro' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.2; Redmi Note 2 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 ssy={Android;ECalendar;V6.1.8;xiaomi;101181501;WIFI}' + family: 'XiaoMi Redmi Note 2' + brand: 'XiaoMi' + model: 'Redmi Note 2' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.1; XOLO A1000 Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Xolo A1000' brand: 'Xolo' From 4bb0acf00b76f938d1e0f99c1c287d4922167607 Mon Sep 17 00:00:00 2001 From: Sourabh Bajaj Date: Mon, 19 Oct 2015 11:02:10 -0700 Subject: [PATCH 021/253] Add tvOS ua parser --- regexes.yaml | 6 ++++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index f9ff7215..21a0fd70 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -830,6 +830,12 @@ os_parsers: - regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' + ########## + # Apple TV + ########## + - regex: '(tvOS)/(\d+).(\d+)' + os_replacement: 'tvOS' + ########## # Chrome OS # if version 0.0.0, probably this stuff: diff --git a/tests/test_os.yaml b/tests/test_os.yaml index d3f03c3f..8f10cf8b 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2187,3 +2187,10 @@ test_cases: minor: '0' patch: patch_minor: + + - user_agent_string: 'TestApp-tvOS/1.0-1' + family: 'tvOS' + major: '1' + minor: '0' + patch: + patch_minor: From ed083d80e1da1cb769716384c13a2648f8afaf43 Mon Sep 17 00:00:00 2001 From: Grigory Kalabin Date: Fri, 20 Nov 2015 13:00:13 +0300 Subject: [PATCH 022/253] Move opera mini regex upper, so it won't be detected as opera mobile Also added capturing of opera mini patch version. Both patch and minor version made optional. --- regexes.yaml | 2 +- tests/test_ua.yaml | 30 +++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 21a0fd70..edaa0839 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -106,6 +106,7 @@ user_agent_parsers: # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Opera Mini)(?:/att)?/(\d+)(?:\.(\d+))?(?:\.(\d+))?' - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)' family_replacement: 'Opera Mobile' - regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi' @@ -114,7 +115,6 @@ user_agent_parsers: family_replacement: 'Opera Mobile' - regex: 'Opera Mobi' family_replacement: 'Opera Mobile' - - regex: '(Opera Mini)(?:/att)?/(\d+)\.(\d+)' - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?' # Opera 14 for Android uses a WebKit render engine. diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index ce0fcce2..95c3040f 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -634,7 +634,7 @@ test_cases: family: 'Opera Mini' major: '5' minor: '1' - patch: + patch: '191' - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.24455/25.677; U; fr) Presto/2.5.25 Version/10.54' family: 'Opera Mini' @@ -646,8 +646,32 @@ test_cases: family: 'Opera Mini' major: '7' minor: '0' + patch: '31437' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.348; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (J2ME/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' patch: + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9 (Compatible; MSIE:9.0; iPhone; BlackBerry9700; AppleWebKit/24.746; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: + patch: + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/7.6.35766/35.5706; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '6' + patch: '35766' + - user_agent_string: 'Opera/9.80 (S60; SymbOS; Opera Mobi/275; U; es-ES) Presto/2.4.13 Version/10.00' family: 'Opera Mobile' major: '10' @@ -1142,14 +1166,14 @@ test_cases: family: 'Opera Mini' major: '4' minor: '2' - patch: + patch: '14812' patch_minor: - user_agent_string: 'SAMSUNG-SGH-A897/A897UCJC1; Mozilla/5.0 (Profile/MIDP-2.0 Configuration/CLDC-1.1; Opera Mini/att/4.2.15304; U; fr-US) Opera 9.50' family: 'Opera Mini' major: '4' minor: '2' - patch: + patch: '15304' patch_minor: - user_agent_string: 'MQQBrowser/39 Mozilla/5.0 (iPhone 4S; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A523 Safari/7534.48.3' From 853569d569f95e9ae6b8190af3df0b061e85b4f2 Mon Sep 17 00:00:00 2001 From: Grigory Kalabin Date: Fri, 20 Nov 2015 16:09:10 +0300 Subject: [PATCH 023/253] Make major version of opera mini optional Add tests from useragentstring.com --- regexes.yaml | 2 +- .../opera_mini_user_agent_strings.yaml | 1211 +++++++++++++++++ tests/test.js | 3 +- 3 files changed, 1214 insertions(+), 2 deletions(-) create mode 100644 test_resources/opera_mini_user_agent_strings.yaml diff --git a/regexes.yaml b/regexes.yaml index edaa0839..6ef74a0d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -106,7 +106,7 @@ user_agent_parsers: # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' - - regex: '(Opera Mini)(?:/att)?/(\d+)(?:\.(\d+))?(?:\.(\d+))?' + - regex: '(Opera Mini)(?:/att)?/(\d+)?(?:\.(\d+))?(?:\.(\d+))?' - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)' family_replacement: 'Opera Mobile' - regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi' diff --git a/test_resources/opera_mini_user_agent_strings.yaml b/test_resources/opera_mini_user_agent_strings.yaml new file mode 100644 index 00000000..a8e9b04d --- /dev/null +++ b/test_resources/opera_mini_user_agent_strings.yaml @@ -0,0 +1,1211 @@ +# Additional tests for opera mini detection. +# List of user agent strings and corresponding versions is taken from http://www.useragentstring.com/pages/Opera%20Mini/ + +test_cases: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.348; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.334; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (J2ME/23.377; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (J2ME/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: '80' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/9 (Compatible; MSIE:9.0; iPhone; BlackBerry9700; AppleWebKit/24.746; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '9' + minor: + patch: + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/7.6.35766/35.5706; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '6' + patch: '35766' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/7.5.33361/31.1350; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '5' + patch: '33361' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/7.29530/27.1407; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '29530' + patch: + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/7.1.32694/27.1407; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '1' + patch: '32694' + + - user_agent_string: 'Opera/9.80 (iPad; Opera Mini/7.1.32694/27.1407; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '1' + patch: '32694' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/7.1.32444/35.5706; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '1' + patch: '32444' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/7.1.32444/35.2883; U; ru) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '1' + patch: '32444' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/7.1.32052/35.5706; U; id) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '1' + patch: '32052' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/7.0.4/28.2555; U; fr) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '0' + patch: '4' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/7.0.29952/28.2075; U; es) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '7' + minor: '0' + patch: '29952' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.5.29702/28.2647; U; es) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '6' + minor: '5' + patch: '29702' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/6.5.26955/27.1407; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '6' + minor: '5' + patch: '26955' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/6.24288/25.729; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '24288' + patch: + + - user_agent_string: 'Opera/9.80 (BlackBerry; Opera Mini/6.24209/27.1366; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '6' + minor: '24209' + patch: + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.24096/25.657; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '24096' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/6.24093/26.1305; U; en) Presto/2.8.119 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '24093' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/6.24093/25.657; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '24093' + patch: + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.1.25759/25.872; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '1' + patch: '25759' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/6.1.25378/25.677; U; th) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '1' + patch: '25378' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/6.1.25375/25.657; U; es) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '1' + patch: '25375' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.0.24455/28.2766; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '6' + minor: '0' + patch: '24455' + + - user_agent_string: 'Opera/9.80 (Android;Opera Mini/6.0.24212/24.746 U;en) Presto/2.5.25 Version/10.5454' + family: 'Opera Mini' + major: '6' + minor: '0' + patch: '24212' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.0.24095/24.760; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '0' + patch: '24095' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/6.0.24095/24.741; U; zh) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '6' + minor: '0' + patch: '24095' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22784/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22784' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22784/22.394; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22784' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22784/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22784' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22783/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22783' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22783/22.478; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22783' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22783/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22783' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/5.1.22460/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22460' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/5.1.22460/22.478; U; fr) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22460' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/5.1.22460/22.414; U; de) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22460' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/5.1.22396/22.478; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22396' + + - user_agent_string: 'Opera/9.80 (BlackBerry; Opera Mini/5.1.22303/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22303' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.22296; BlackBerry9800; U; AppleWebKit/23.370; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22296' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.22296/22.87; U; fr) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22296' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.22296/22.87; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22296' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.22296/22.478; U; fr) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22296' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.22296/22.387; U; fr) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '22296' + + - user_agent_string: 'Opera/9.50 (J2ME/MIDP; Opera Mini/5.1.21965/20.2513; U; en)' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21965' + + - user_agent_string: 'Opera/9.80 (Windows Mobile; Opera Mini/5.1.21595/25.657; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21595' + + - user_agent_string: 'Opera/9.80 (Windows Mobile; Opera Mini/5.1.21594/22.387; U; ru) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21594' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21415/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21415' + + - user_agent_string: 'Opera/10.61 (J2ME/MIDP; Opera Mini/5.1.21219/19.999; en-US; rv:1.9.3a5) WebKit/534.5 Presto/2.6.30' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21219' + + - user_agent_string: 'Opera/9.80(J2ME/MIDP; Opera Mini/5.1.21214/22.414; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21214' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21214/22.414; U; ro) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21214' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21214/22.387; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21214' + + - user_agent_string: 'Opera/9.80 (Android; Opera Mini/5.1.21126/19.892; U; de) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21126' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21051/27.1573; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21051' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21051/23.377; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21051' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21051/20.2477; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '1' + patch: '21051' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.3521/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '3521' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.3521/22.414; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '3521' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.3521/18.684; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '3521' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.22349/37.6584; U; en) Presto/2.12.423 Version/12.16' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '22349' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.20873/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '20873' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.19693Mod.by.Handler/23.390; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '19693' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.19693Mod.by.Handler/18.794; U; id) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '19693' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.19693/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '19693' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.19683/1278; U; ko) Presto/2.2.0' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '19683' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741Mod.by.Handler/22.414; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741/886; U; id) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741/870; U; fr) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18741/18.794; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18741' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18635Mod.by.Handler/23.377; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18635' + + - user_agent_string: 'Opera/9.80 (Windows NT 5.1; U; Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18635/1030; U; en) Presto/2.4.15; ru) Presto/2.8.99 Version/11.10' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18635' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.18635/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '18635' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.17443/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '17443' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.17443/20.2477; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '17443' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.17381/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '17381' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823Mod.by.Handler/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '16823' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '16823' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.15650/20.2479; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '15650' + + - user_agent_string: 'Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja)Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja)Presto/ 2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/5.0.019802/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/5.0.019802/22.414; U; de) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/5.0.019802/18.738; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '019802' + + - user_agent_string: 'Opera/9.80 (iPhone; Opera Mini/5.0.0176/764; U; en) Presto/2.4.154.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '0176' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.0.862 Profile/24.743; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '0' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.0.423 Profile/18.684; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '0' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.0.351 Profile/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: '0' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0(Windows; U; Windows NT 5.1; en-US)/23.390; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/24.838; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/23.377; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows NT 6.1; WOW64) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (SymbianOS/24.838; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/24.838; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/24.741; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (iPhone; U; xxxx like Mac OS X; en) AppleWebKit/24.838; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (iPhone; U; fr; CPU iPhone OS 4_2_1 like Mac OS X; fr) AppleWebKit/23.405; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/23.377; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (BlackBerry; U; BlackBerry9800; en-GB) AppleWebKit/24.783; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (BlackBerry; U; BlackBerry 9800) AppleWebKit/24.783; U; es) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.5.33867/35.2883; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '5' + patch: '33867' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.4.Vista/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '4' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.4.29476/27.1573; U; id) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '4' + patch: '29476' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.4.26736/28.2647; U; it) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '4' + patch: '26736' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.4.0.60 (Windows XP)/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '4' + patch: '0' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.3.24214; iPhone; CPU iPhone OS 4_2_1 like Mac OS X; AppleWebKit/24.783; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '3' + patch: '24214' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.3.24214/27.1407; U; id) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '3' + patch: '24214' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.3.24214 (Windows; U; Windows NT 6.1) AppleWebKit/24.838; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '3' + patch: '24214' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.3.13337/25.657; U; ro) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '3' + patch: '13337' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.24721/30.3316; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '24721' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.23453/28.2647; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '23453' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.21465/22.478; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '21465' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.21465/22.387; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '21465' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.19634/23.333; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '19634' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.18887/22.478; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '18887' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.16320/29.3594; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '16320' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.16007Mod.by.Handler/23.390; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '16007' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410QUAIN/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/23.333; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/22.401; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/20.2485; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/18.678; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.60 (J2ME/MIDP;Opera Mini/4.2.15410Mod.by.Handler/503; U; en)Presto/2.2.0' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.50 (J2ME/MIDP; Opera Mini/4.2.15410Mod.by.Handler/20.2590; U; en)' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410/24.899; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15410/22.394; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15410' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.15066/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '15066' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912mod.By.onome/22.401; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912Mod.by.Handler/24.783; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912Mod.by.Handler/23.377; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912Mod.By.www.9jamusic.cz.cc/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/870; U; id) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/35.5706; U; id) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/24.746; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/23.333; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14912/22.394; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14912' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14885/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14885' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14881Mod.by.Handler/24.743; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14881' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14881Mod.by.Handler/23.317; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14881' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14753/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14753' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14409/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14409' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14320/886; U; id) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14320' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14320/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14320' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.14320/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '14320' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13943/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13943' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13918/22.414; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13918' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13400/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13400' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13337.Mod.by.Handler/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13337' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13337/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13337' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13337/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13337' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13337/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13337' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13265/870; U; ro) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13265' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13221/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13221' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13221/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13221' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2.13057/870; U; ja) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: '13057' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.2 19.42.55/19.892; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '2' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.18061/27.1407; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '4' + minor: '18061' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.15082/870; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '15082' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.15082/25.677; U; vi) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '15082' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.15082/20.2489; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '15082' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.14287/22.387; U; id) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '14287' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.13907/21.529; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '13907' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.13573/20.2485; U; zh) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '13573' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.12965/19.892; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '12965' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.1.11321/24.871; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '1' + patch: '11321' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.8462/22.414; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: '8462' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.8462/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: '8462' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.10247/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: '10247' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.10031/22.453; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: '10031' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0/870; U; id) Presto/2.4.15' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0/22.453; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0/22.401; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0/22.394; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.11) Gecko/23.390; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0 (Linux; U;' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0 (compatible; MSIE 5.0; UNIX) Opera 6.12 [en]/24.838; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/4.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/24.705; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.60 (J2ME/MIDP; Opera Mini/4.0/490; U; en) Presto/2.2.0' + family: 'Opera Mini' + major: '4' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/3.1.10423/22.387; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '3' + minor: '1' + patch: '10423' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/1.6.0_13/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: '1' + minor: '6' + patch: '0' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/1.6.0_13/19.916; U; en) Presto/2.5.25' + family: 'Opera Mini' + major: '1' + minor: '6' + patch: '0' + + - user_agent_string: 'Opera/9.80 (Series 60; Opera Mini/1.0.30710/29.3594; U; en) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: '1' + minor: '0' + patch: '30710' + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/1.0/886; U; en) Presto/2.4.15' + family: 'Opera Mini' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/SymbianOS/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: + minor: + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/Nokia2730c-1/22.478; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: + minor: + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/Mozilla/23.334; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: + minor: + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini/(Windows; U; Windows NT 5.1; en-US) AppleWebKit/23.411; U; en) Presto/2.5.25 Version/10.54' + family: 'Opera Mini' + major: + minor: + patch: + diff --git a/tests/test.js b/tests/test.js index c4a8ee7a..aca88eb2 100644 --- a/tests/test.js +++ b/tests/test.js @@ -14,7 +14,8 @@ function msg(name, actual, expected) { return "Expected " + name + " to be " + JSON.stringify(expected) + " got " + JSON.stringify(actual) + " instead."; } -['../test_resources/firefox_user_agent_strings.yaml', '../tests/test_ua.yaml', '../test_resources/pgts_browser_list.yaml'].forEach(function(fileName) { +['../test_resources/firefox_user_agent_strings.yaml', '../tests/test_ua.yaml', '../test_resources/pgts_browser_list.yaml', + '../test_resources/opera_mini_user_agent_strings.yaml'].forEach(function(fileName) { var fixtures = readYAML(fileName).test_cases; suite(fileName, function() { fixtures.forEach(function(f) { From 1c981fa810e277b63b470317525633edccc2ea8e Mon Sep 17 00:00:00 2001 From: Grigory Kalabin Date: Thu, 3 Dec 2015 13:35:25 +0300 Subject: [PATCH 024/253] Don't require slash after "Opera Mini" for opera mini browsers --- regexes.yaml | 2 +- test_resources/opera_mini_user_agent_strings.yaml | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 6ef74a0d..479e5cbc 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -106,7 +106,7 @@ user_agent_parsers: # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' - - regex: '(Opera Mini)(?:/att)?/(\d+)?(?:\.(\d+))?(?:\.(\d+))?' + - regex: '(Opera Mini)(?:/att)?/?(\d+)?(?:\.(\d+))?(?:\.(\d+))?' - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)' family_replacement: 'Opera Mobile' - regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi' diff --git a/test_resources/opera_mini_user_agent_strings.yaml b/test_resources/opera_mini_user_agent_strings.yaml index a8e9b04d..adfc3163 100644 --- a/test_resources/opera_mini_user_agent_strings.yaml +++ b/test_resources/opera_mini_user_agent_strings.yaml @@ -1,5 +1,6 @@ # Additional tests for opera mini detection. # List of user agent strings and corresponding versions is taken from http://www.useragentstring.com/pages/Opera%20Mini/ +# Some user agent string are from http://www.webapps-online.com/online-tools/user-agent-strings/dv/plugin55599/opera-mini test_cases: @@ -1209,3 +1210,15 @@ test_cases: minor: patch: + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini; U; zh) Presto/2.8.119 Version/11.10' + family: 'Opera Mini' + major: + minor: + patch: + + - user_agent_string: 'Opera/9.80 (J2ME/MIDP; Opera Mini; U; en) Presto/2.8.119 Version/11.1019 Version/11.10.10' + family: 'Opera Mini' + major: + minor: + patch: + From 1d0a6b1f10a7482fe0bbda06328bf28fa14fb1e7 Mon Sep 17 00:00:00 2001 From: Mihkel Sokk Date: Wed, 23 Dec 2015 13:18:04 +0200 Subject: [PATCH 025/253] Add Samsung Internet --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 6ef74a0d..78d0aaba 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -205,6 +205,10 @@ user_agent_parsers: - regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)' family_replacement: 'Edge Mobile' + # Samsung Internet (based on Chrome, but lacking some features) + - regex: '(SamsungBrowser)/(\d+)\.(\d+)' + family_replacement: 'Samsung Internet' + # Chrome Mobile - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 95c3040f..eabf2369 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -3735,6 +3735,30 @@ test_cases: minor: '7' patch: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.1; SAMSUNG GT-I9506-ORANGE Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36' + family: 'Samsung Internet' + major: '2' + minor: '1' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T800 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/38.0.2125.102 Safari/537.36' + family: 'Samsung Internet' + major: '3' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.1.1; SAMSUNG SM-G920F Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2 Chrome/38.0.2125.102 Mobile Safari/537.36' + family: 'Samsung Internet' + major: '3' + minor: '2' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T710 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.5 Chrome/38.0.2125.102 Safari/537.36' + family: 'Samsung Internet' + major: '3' + minor: '5' + patch: + - user_agent_string: 'ScSpider/0.2' family: 'ScSpider' major: '0' From 2627123d6e76dae1ce74c154ba735e603959282b Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 3 Feb 2016 20:53:54 +0100 Subject: [PATCH 026/253] Adding support for Brave Browser --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 6ef74a0d..309a824b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -299,6 +299,10 @@ user_agent_parsers: # Edge/major_version.minor_version - regex: '(Edge)/(\d+)\.(\d+)' + # Brave Browser https://brave.com/ + - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' + family_replacement: 'Brave' + # Chrome/Chromium/major_version.minor_version.beta_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 95c3040f..5f2d29fd 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6446,3 +6446,22 @@ test_cases: major: '12' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.11 Chrome/47.0.2526.110 Brave/0.36.5 Safari/537.36' + family: 'Brave' + major: '0' + minor: '7' + patch: '11' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.12 Chrome/47.0.2526.110 Brave/0.36.7 Safari/537.36 ' + family: 'Brave' + major: '0' + minor: '7' + patch: '12' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) brave/0.7.10 Chrome/47.0.2526.110 Brave/0.36.5 Safari/537.36' + family: 'Brave' + major: '0' + minor: '7' + patch: '10' + From ead8657faf1df7b5c9492c34f802c83a52672aa7 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 20 Feb 2016 17:04:08 +0100 Subject: [PATCH 027/253] Adding Support for Roku DVPs --- regexes.yaml | 10 ++++++++++ tests/test_device.yaml | 16 ++++++++++++++++ tests/test_os.yaml | 22 ++++++++++++++++++++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 4 files changed, 66 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index e64026d0..a28694dc 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -518,6 +518,9 @@ user_agent_parsers: - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' + # Roku Digital-Video-Players https://www.roku.com/ + - regex: '^(Roku)/DVP-(\d+)\.(\d+)' + os_parsers: ########## # HbbTV vendors @@ -985,6 +988,9 @@ os_parsers: - regex: 'SunOS' os_replacement: 'Solaris' + # Roku Digital-Video-Players https://www.roku.com/ + - regex: '^(Roku)/DVP-(\d+)\.(\d+)' + device_parsers: ######### @@ -4704,6 +4710,10 @@ device_parsers: - regex: '(WebTV)/\d+.\d+' brand_replacement: 'Generic_Inettv' model_replacement: '$1' + # Roku Digital-Video-Players https://www.roku.com/ + - regex: '^(Roku)/DVP-\d+\.\d+' + brand_replacement: 'Generic_Inettv' + model_replacement: '$1' ########## # Generic Tablet diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 5bb6c798..691c5ec4 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79764,3 +79764,19 @@ test_cases: family: 'Generic Smartphone' brand: 'Generic' model: 'Smartphone' + + - user_agent_string: 'Roku/DVP-6.2 (096.02E06005A)' + family: 'Roku' + brand: 'Generic_Inettv' + model: 'Roku' + + - user_agent_string: 'Roku/DVP-5.0 (025.00E08043A)' + family: 'Roku' + brand: 'Generic_Inettv' + model: 'Roku' + + - user_agent_string: 'Roku/DVP-5.1 (025.01E01195A)' + family: 'Roku' + brand: 'Generic_Inettv' + model: 'Roku' + diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 8f10cf8b..0b31e0ac 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2194,3 +2194,25 @@ test_cases: minor: '0' patch: patch_minor: + + - user_agent_string: 'Roku/DVP-6.2 (096.02E06005A)' + family: 'Roku' + major: '6' + minor: '2' + patch: + patch_minor: + + - user_agent_string: 'Roku/DVP-5.0 (025.00E08043A)' + family: 'Roku' + major: '5' + minor: '0' + patch: + patch_minor: + + - user_agent_string: 'Roku/DVP-5.1 (025.01E01195A)' + family: 'Roku' + major: '5' + minor: '1' + patch: + patch_minor: + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 5f2d29fd..380605c3 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6465,3 +6465,21 @@ test_cases: minor: '7' patch: '10' + - user_agent_string: 'Roku/DVP-6.2 (096.02E06005A)' + family: 'Roku' + major: '6' + minor: '2' + patch: + + - user_agent_string: 'Roku/DVP-5.0 (025.00E08043A)' + family: 'Roku' + major: '5' + minor: '0' + patch: + + - user_agent_string: 'Roku/DVP-5.1 (025.01E01195A)' + family: 'Roku' + major: '5' + minor: '1' + patch: + From 3a5711441858a9f27ddc44c9ddda41bf3587bfd5 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 20 Feb 2016 20:01:50 +0100 Subject: [PATCH 028/253] Adding Support for Outlook 2016; Improving detection for Outlook 2007, 2010 --- regexes.yaml | 9 +++++++-- tests/test_ua.yaml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e20013d2..c220d6a1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -276,12 +276,12 @@ user_agent_parsers: - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - - regex: 'MSOffice 12' + - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' family_replacement: 'Outlook' v1_replacement: '2007' # Outlook 2010 - - regex: 'MSOffice 14' + - regex: 'Microsoft Outlook 14\.\d+\.\d+|MSOffice 14' family_replacement: 'Outlook' v1_replacement: '2010' @@ -290,6 +290,11 @@ user_agent_parsers: family_replacement: 'Outlook' v1_replacement: '2013' + # Outlook 2016 + - regex: 'Microsoft Outlook (?:Mail )?16\.\d+\.\d+' + family_replacement: 'Outlook' + v1_replacement: '2016' + # Apple Air Mail - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 6baba726..769946de 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6507,3 +6507,33 @@ test_cases: minor: '1' patch: + - user_agent_string: 'Microsoft Office/12.0 (Windows NT 6.1; Microsoft Office Outlook 12.0.6739; Pro)' + family: 'Outlook' + major: '2007' + minor: + patch: + + - user_agent_string: 'Microsoft Office/14.0 (Windows NT 6.1; Microsoft Outlook 14.0.5128; Pro)' + family: 'Outlook' + major: '2010' + minor: + patch: + + - user_agent_string: 'Microsoft Office/16.0 (Microsoft Outlook Mail 16.0.6525; Pro)' + family: 'Outlook' + major: '2016' + minor: + patch: + + - user_agent_string: 'Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.6326; Pro)' + family: 'Outlook' + major: '2016' + minor: + patch: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Microsoft Outlook 16.0.6366; ms-office; MSOffice 16)' + family: 'Outlook' + major: '2016' + minor: + patch: + From fee501143406b180a309cb55b082af5b2aa9f1de Mon Sep 17 00:00:00 2001 From: Shaun Williams Date: Tue, 12 Apr 2016 21:56:12 -0500 Subject: [PATCH 029/253] rename UIWebView -> UI/WKWebView --- regexes.yaml | 6 +++--- test_resources/pgts_browser_list.yaml | 2 +- tests/test_ua.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e20013d2..f47b2ca3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -396,15 +396,15 @@ user_agent_parsers: - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.* Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' - family_replacement: 'Mobile Safari UIWebView' + family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile.* Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile' - family_replacement: 'Mobile Safari UIWebView' + family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad).* Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad)' - family_replacement: 'Mobile Safari UIWebView' + family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(AvantGo) (\d+).(\d+)' diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index 0af7cc95..d8094a62 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -55,7 +55,7 @@ test_cases: patch: - user_agent_string: 'Alizee iPod 2005 (Beta; Mac OS X)' - family: 'Mobile Safari UIWebView' + family: 'Mobile Safari UI/WKWebView' major: minor: patch: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 6baba726..dd3b29bd 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -463,7 +463,7 @@ test_cases: patch: '2' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257' - family: 'Mobile Safari UIWebView' + family: 'Mobile Safari UI/WKWebView' major: '7' minor: '1' patch: '2' @@ -6394,7 +6394,7 @@ test_cases: patch: '1' - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile' - family: 'Mobile Safari UIWebView' + family: 'Mobile Safari UI/WKWebView' major: '4' minor: '3' patch: '2' From 3fa86f9a5d2009b0b071e53fafbaec8beb89b121 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 20 Apr 2016 14:39:33 +0200 Subject: [PATCH 030/253] AppleMail -> Apple Mail --- regexes.yaml | 2 +- test_resources/pgts_browser_list.yaml | 4 ++-- tests/test_ua.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e20013d2..a9c4c95d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -506,7 +506,7 @@ user_agent_parsers: # apple mail - not directly detectable, have it after Safari stuff - regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'AppleMail' + family_replacement: 'Apple Mail' # AFTER THE EDGE CASES ABOVE! # AFTER IE11 diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index 0af7cc95..01b17ff1 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -74989,13 +74989,13 @@ test_cases: patch: - user_agent_string: 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412.6.2 (KHTML, like Gecko)' - family: 'AppleMail' + family: 'Apple Mail' major: '412' minor: '6' patch: '2' - user_agent_string: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; es-es) AppleWebKit/531.22.7 (KHTML, like Gecko)' - family: 'AppleMail' + family: 'Apple Mail' major: '531' minor: '22' patch: '7' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 6baba726..7b03b3c8 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -877,7 +877,7 @@ test_cases: patch: - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko)' - family: 'AppleMail' + family: 'Apple Mail' major: '536' minor: '26' patch: '14' From b33a725e2ff7433dfb13414b8dc4df40166a2ed7 Mon Sep 17 00:00:00 2001 From: Bradley Portnoy Date: Fri, 22 Apr 2016 22:10:34 -0700 Subject: [PATCH 031/253] Add Twitterbot to regexes.yaml & relevant test --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 3316b2e2..f37c5bec 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -17,6 +17,10 @@ user_agent_parsers: - regex: 'Google.*/\+/web/snippet' family_replacement: 'GooglePlusBot' + # Twitter + - regex: '(Twitterbot)/(\d+)\.(\d+)' + family_replacement: 'TwitterBot' + # Bots Pattern '/name-0.0' - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Bots Pattern 'name/0.0' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c32436fb..cbfb069d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -264,6 +264,12 @@ test_cases: minor: patch: + - user_agent_string: 'Twitterbot/1.0' + family: 'TwitterBot' + major: '1' + minor: '0' + patch: + - user_agent_string: 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1pre) Gecko/20090717 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1pre' family: 'Firefox (Shiretoko)' major: '3' From 56534c957a1150909659b0fcdc285292fe83a797 Mon Sep 17 00:00:00 2001 From: Johannes Koch Date: Mon, 2 May 2016 15:35:24 +0200 Subject: [PATCH 032/253] see issue #142 added Nexus 5X to LG section and Nexus 6P to Huawei section; tests --- regexes.yaml | 4 ++-- tests/test_device.yaml | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index f37c5bec..a76a1f63 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2072,7 +2072,7 @@ device_parsers: device_replacement: 'Huawei Ideos$1' brand_replacement: 'Huawei' model_replacement: 'Ideos$1' - - regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660) Build' + - regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P) Build' device_replacement: 'Huawei $1' brand_replacement: 'Huawei' model_replacement: '$1' @@ -2594,7 +2594,7 @@ device_parsers: # LG # @ref: http://www.lg.com/uk/mobile ######### - - regex: '; *(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]+|Nexus [45]|GT540f?|Optimus (?:2X|G|4X HD)|OptimusX4HD) *(?:Build|;)' + - regex: '; *(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]+|Nexus 4|Nexus 5X?|GT540f?|Optimus (?:2X|G|4X HD)|OptimusX4HD) *(?:Build|;)' device_replacement: '$1' brand_replacement: 'LG' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 691c5ec4..212b0028 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -200,6 +200,11 @@ test_cases: brand: 'LG' model: 'Nexus 5' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36' + family: 'Nexus 5X' + brand: 'LG' + model: 'Nexus 5X' + - user_agent_string: 'Bunjalloo/0.7.6(Nintendo DS;U;en)' family: 'Nintendo DS' brand: 'Nintendo' @@ -22715,6 +22720,11 @@ test_cases: brand: 'Huawei' model: 'P6' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MHC19Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36' + family: 'Huawei Nexus 6P' + brand: 'Huawei' + model: 'Nexus 6P' + - user_agent_string: 'Huaweisymantecspider (compatible; MSIE 8.0; DSE-support@huaweisymantec.com)' family: 'Huawei symantecspider' brand: 'Huawei' From 87626a83f971bd79a3f51f311c6f5ce2da4e09bc Mon Sep 17 00:00:00 2001 From: Minfei Jin Date: Fri, 13 May 2016 13:41:16 +0800 Subject: [PATCH 033/253] update XiaoMi regex --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index f37c5bec..32c38a29 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3864,7 +3864,7 @@ device_parsers: # XiaoMi # @ref: http://www.xiaomi.com/event/buyphone ######### - - regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) Build/' + - regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/' device_replacement: 'XiaoMi $1' brand_replacement: 'XiaoMi' model_replacement: '$1' From 5d023ad849ff2d79126696aca3def76a5c5a386a Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 20 Feb 2016 23:23:06 +0100 Subject: [PATCH 034/253] Adding Support for Windows Live Mail --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 81cea25d..2f6dab53 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -299,6 +299,10 @@ user_agent_parsers: family_replacement: 'Outlook' v1_replacement: '2016' + # Windows Live Mail + - regex: 'Outlook-Express\/7\.0.*' + family_replacement: 'Windows Live Mail' + # Apple Air Mail - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cd5ddaf0..8ec4ef06 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6543,3 +6543,45 @@ test_cases: minor: patch: + - user_agent_string: 'Outlook-Express/7.0 (MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 7.0; Windows NT 5.1; Trident/4.0; AskTB5.6; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; InfoPath.3; FDM; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 6.0; Windows NT 5.1; SV1; GTB6.3; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 8; Windows NT 5.1; Trident/4.0; GTB7.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + + - user_agent_string: 'Outlook-Express/7.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; BRI/2; AskTbLOL/5.12.5.17640; TmstmpExt)' + family: 'Windows Live Mail' + major: + minor: + patch: + From 0a53ae8291f85e1c0c022bc9588c99aa6ddee2e5 Mon Sep 17 00:00:00 2001 From: Minfei Jin Date: Mon, 16 May 2016 10:00:18 +0800 Subject: [PATCH 035/253] add test cases --- tests/test_device.yaml | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 691c5ec4..c1d1851d 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79780,3 +79780,63 @@ test_cases: brand: 'Generic_Inettv' model: 'Roku' + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; MI PAD MIUI/KXFCNBF2.0)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; MI PAD MIUI/KXFCNBF3.0)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; MI PAD MIUI/KXFCNBF5.0)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/4.11.28)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/4.12.19)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/4.8.22)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.1.16)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.1.23)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.1.9)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.10.22)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.10.8)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + + - user_agent_string: 'Dalvik/1.6.0 (Linux; U; Android 4.4.4; MI PAD MIUI/5.11.1)' + family: 'XiaoMi MI PAD' + brand: 'XiaoMi' + model: 'MI PAD' + From 23e64e60910029fc9553fb21db4f90cc1b3ec109 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 22 May 2016 08:29:24 +0200 Subject: [PATCH 036/253] chrome mobile based user agents --- regexes.yaml | 6 ++++-- tests/test_ua.yaml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 874ee1db..b7645cd4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -218,7 +218,9 @@ user_agent_parsers: family_replacement: 'Chrome Mobile' - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile iOS' - - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile' + - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)' + family_replacement: 'Chrome Mobile' + - regex: ' Mobile .*(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' # Chrome Frame must come before MSIE. @@ -277,7 +279,7 @@ user_agent_parsers: #### MAIN CASES - this catches > 50% of all browsers #### # Browser/major_version.minor_version.beta_version - - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 8ec4ef06..97629371 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6585,3 +6585,39 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.1; GT-I9505 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 YaBrowser/16.2.1.1239.00 Mobile Safari/537.36' + family: 'Yandex Browser' + major: '16' + minor: '2' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.2; SM-G800F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 MobileIron/1.6.0 Mobile Safari/537.36' + family: 'MobileIron' + major: '1' + minor: '6' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.4; GT-I9195I Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Crosswalk/14.43.343.17 Mobile Safari/537.36' + family: 'Crosswalk' + major: '14' + minor: '43' + patch: '343' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.2; GT-S7710 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile' + family: 'Chrome Mobile' + major: '18' + minor: '0' + patch: '1025' + + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) Chrome/19.0.1084.60 Mobile/9B206 Safari/7534.48.3' + family: 'Chrome Mobile' + major: '19' + minor: '0' + patch: '1084' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.4.4; de-de; SM-G850F Build/KTU84P) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16 Chrome/33.0.0.0' + family: 'Chrome Mobile' + major: '33' + minor: '0' + patch: '0' + From ef87edb8b683d6d36aacf6967084923c221db94a Mon Sep 17 00:00:00 2001 From: Alexander Flatter Date: Tue, 5 Jul 2016 09:08:36 +0200 Subject: [PATCH 037/253] Parse iPod touch user agent correctly --- regexes.yaml | 4 ++-- tests/test_device.yaml | 6 +++++- tests/test_os.yaml | 8 +++++++- tests/test_ua.yaml | 7 ++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 874ee1db..dfcc08e7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -410,9 +410,9 @@ user_agent_parsers: family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'Mobile Safari UI/WKWebView' - - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile.* Safari' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile.* Safari' family_replacement: 'Mobile Safari' - - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile' family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad).* Safari' family_replacement: 'Mobile Safari' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 07cacac1..edc022b2 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -100,6 +100,11 @@ test_cases: brand: 'Apple' model: 'iPod' + - user_agent_string: 'Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69' + family: 'iPod' + brand: 'Apple' + model: 'iPod' + - user_agent_string: 'Mozilla/4.0 (compatible; Linux 2.6.10) NetFront/3.3 Kindle/1.0 (screen 600x800)' family: 'Kindle' brand: 'Amazon' @@ -79849,4 +79854,3 @@ test_cases: family: 'XiaoMi MI PAD' brand: 'XiaoMi' model: 'MI PAD' - diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 0b31e0ac..d06c742a 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -245,6 +245,13 @@ test_cases: patch: '2' patch_minor: + - user_agent_string: 'Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69' + family: 'iOS' + major: '9' + minor: '3' + patch: '2' + patch_minor: + - user_agent_string: 'MQQBrowser/371 Mozilla/5.0 (iPhone 4S; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A523 Safari/7534.48.3' family: 'iOS' major: '6' @@ -2215,4 +2222,3 @@ test_cases: minor: '1' patch: patch_minor: - diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 8ec4ef06..237450cb 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -468,6 +468,12 @@ test_cases: minor: '0' patch: '2' + - user_agent_string: 'Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69' + family: 'Mobile Safari UI/WKWebView' + major: '9' + minor: '3' + patch: '2' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D257' family: 'Mobile Safari UI/WKWebView' major: '7' @@ -6584,4 +6590,3 @@ test_cases: major: minor: patch: - From cd8ae196d3e266e432d80548893ac82ca9baa05c Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 30 Jul 2016 08:51:57 +0200 Subject: [PATCH 038/253] Adding support for LG Web0S SmartTV --- regexes.yaml | 6 +++++- tests/test_device.yaml | 5 +++++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index b7645cd4..c212dca7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1000,7 +1000,7 @@ os_parsers: - regex: '\((Bada);' # just os - - regex: '(Windows|Android|WeTab|Maemo)' + - regex: '(Windows|Android|WeTab|Maemo|Web0S)' - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)' # Linux + Kernel Version - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?' @@ -2620,6 +2620,10 @@ device_parsers: device_replacement: '$1 $2' brand_replacement: 'LG' model_replacement: '$2' + - regex: '(Web0S); Linux/(SmartTV)' + device_replacement: 'LG $1 $2' + brand_replacement: 'LG' + model_replacement: '$1 $2' ######### # Malata diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 07cacac1..2fe45741 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79850,3 +79850,8 @@ test_cases: brand: 'XiaoMi' model: 'MI PAD' + - user_agent_string: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41' + family: 'LG Web0S SmartTV' + brand: 'LG' + model: 'Web0S SmartTV' + diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 0b31e0ac..936bd2ab 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2216,3 +2216,10 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41' + family: 'Web0S' + major: + minor: + patch: + patch_minor: + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 97629371..0b177330 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6621,3 +6621,9 @@ test_cases: minor: '0' patch: '0' + - user_agent_string: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41' + family: 'Safari' + major: + minor: + patch: + From 0a218a9f62a4fee9a9c55c7c89e12072e8794780 Mon Sep 17 00:00:00 2001 From: karol508 Date: Sat, 30 Jul 2016 23:47:04 +0200 Subject: [PATCH 039/253] Fix Thunderbird detection --- regexes.yaml | 2 +- tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index b7645cd4..d03278aa 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -309,7 +309,7 @@ user_agent_parsers: - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?' # Thunderbird - - regex: '(Thunderbird)/(\d+)\.(\d+)\.(\d+(?:pre)?)' + - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?' family_replacement: 'Thunderbird' # Vivaldi uses "Vivaldi" diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 0b31e0ac..cf3a4515 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -784,6 +784,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Thunderbird/45.0' + family: 'Windows 7' + major: + minor: + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1) Gecko/20100208 MozillaDeveloperPreview/3.7a1 (.NET CLR 3.5.30729)' family: 'Windows 7' major: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 97629371..dbeba2d4 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -864,6 +864,12 @@ test_cases: minor: '2' patch: '0' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Thunderbird/45.0' + family: 'Thunderbird' + major: '45' + minor: '0' + patch: + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MSOffice 12)' family: 'Outlook' major: '2007' From 299d7a4805d74e91eaf2a914b6f734a4dce1598e Mon Sep 17 00:00:00 2001 From: Arsen Abdusalamov Date: Wed, 17 Aug 2016 20:42:04 +0300 Subject: [PATCH 040/253] Prevent detection UC Browser as Opera Mini --- regexes.yaml | 12 +++++------- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index b7645cd4..cfb8bc99 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -107,6 +107,11 @@ user_agent_parsers: - regex: '(MyIBrow)/(\d+)\.(\d+)' family_replacement: 'My Internet Browser' + # UC Browser + # we need check it before opera. In other case case UC Browser detected look like Opera Mini + - regex: '(UC ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)' + family_replacement: 'UC Browser' + # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' @@ -227,13 +232,6 @@ user_agent_parsers: - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Frame' - # UC Browser - - regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)' - family_replacement: 'UC Browser' - - regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)' - - regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)' - family_replacement: 'UC Browser' - # Tizen Browser (second case included in browser/major.minor regex) - regex: '(SLP Browser)/(\d+)\.(\d+)' family_replacement: 'Tizen Browser' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 97629371..672be404 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -912,6 +912,18 @@ test_cases: minor: '4' patch: '0' + - user_agent_string: 'UCWEB/3.0 (iPhone; CPU OS_6; en-US)AppleWebKit/534.1 U3/3.0.0 Mobile' + family: 'UC Browser' + major: '3' + minor: '0' + patch: '0' + + - user_agent_string: 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.2697; en-US; GT-S5302) U2/1.0.0 UCBrowser/9.3.0.440 Mobile' + family: 'UC Browser' + major: '9' + minor: '3' + patch: '0' + - user_agent_string: 'IUC(U;iOS 5.1.1;Zh-cn;320*480;)/UCWEB7.9.0.94/41/997' family: 'UC Browser' major: '7' From 33b09143b2b7ef8fad332513e5e5305c0e01217f Mon Sep 17 00:00:00 2001 From: karol508 Date: Sun, 31 Jul 2016 02:40:45 +0200 Subject: [PATCH 041/253] Detect popular mail clients --- regexes.yaml | 12 ++++++-- test_resources/pgts_browser_list.yaml | 12 ++++---- tests/test_ua.yaml | 42 +++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 13980a32..14610347 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -310,6 +310,14 @@ user_agent_parsers: - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?' family_replacement: 'Thunderbird' + # Barca + - regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Barca' + + # Lotus Notes + - regex: '(Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Lotus Notes' + # Vivaldi uses "Vivaldi" - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)' @@ -328,7 +336,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail)/(\d+)\.(\d+)\.?(\d+)?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' @@ -348,7 +356,7 @@ user_agent_parsers: # Browser major_version.minor_version.beta_version (space instead of slash) - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' # Browser major_version.minor_version (space instead of slash) - - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?' + - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|The Bat!) (\d+)\.(\d+)\.?(\d+)?' # Kindle WebKit - regex: '(Kindle)/(\d+)\.(\d+)' diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index 8a153d3a..8dbf8e80 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -4711,15 +4711,15 @@ test_cases: patch: - user_agent_string: 'Mozilla/4.0 (compatible; Lotus-Notes/5.0; Windows-NT)' - family: 'Other' - major: - minor: + family: 'Lotus Notes' + major: '5' + minor: '0' patch: - user_agent_string: 'Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)' - family: 'Other' - major: - minor: + family: 'Lotus Notes' + major: '6' + minor: '0' patch: - user_agent_string: 'LTH/3.02a (http://www.learntohack.nil)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index db506f86..94591531 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -876,6 +876,48 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)' + family: 'Lotus Notes' + major: '6' + minor: '0' + patch: + + - user_agent_string: 'YahooMobileMail/1.0 (Android Mail; 1.3.10) (supersonic;HTC;PC36100;2.3.5/GRJ90)' + family: 'YahooMobileMail' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Barca/2.8.2' + family: 'Barca' + major: '2' + minor: '8' + patch: '2' + + - user_agent_string: 'BarcaPro/1.4.12' + family: 'Barca' + major: '1' + minor: '4' + patch: '12' + + - user_agent_string: 'The Bat! 4.0.0.22' + family: 'The Bat!' + major: '4' + minor: '0' + patch: '0' + + - user_agent_string: 'MailBar/1.3.2 (Mac OS X Version 10.11.1 (Build 15B42))' + family: 'MailBar' + major: '1' + minor: '3' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) kmail2/4.14.2 Safari/534.34' + family: 'kmail2' + major: '4' + minor: '14' + patch: '2' + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; MSOffice 12)' family: 'Outlook' major: '2007' From 0dabb6fc05883b931cc838cfe8849fd30f99fa1c Mon Sep 17 00:00:00 2001 From: Crys Date: Thu, 15 Sep 2016 15:04:28 +0200 Subject: [PATCH 042/253] Added support for iOS 10 applications. --- regexes.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 14610347..b992b6a3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -858,6 +858,10 @@ os_parsers: os_replacement: 'iOS' os_v1_replacement: '9' os_v2_replacement: '0' + - regex: 'CFNetwork/8.* Darwin/(16)\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '10' + os_v2_replacement: '0' # iOS Apps - regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' From eae87baa9dc9c6a96d0d83ac5b8d822e94759aff Mon Sep 17 00:00:00 2001 From: Yuri Gorokhov Date: Thu, 15 Sep 2016 14:51:35 -0700 Subject: [PATCH 043/253] Adding NL-Crawler to the list of Spiders --- regexes.yaml | 2 +- tests/test_device.yaml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 14610347..1ed9cc22 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4769,7 +4769,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 37298c62..69447b6a 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -630,6 +630,11 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'NL-Crawler' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I717 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' family: 'Samsung SGH-I717' brand: 'Samsung' From 824a6becbbb11acccfd333323854571429ec7373 Mon Sep 17 00:00:00 2001 From: Yuri Gorokhov Date: Thu, 15 Sep 2016 14:54:33 -0700 Subject: [PATCH 044/253] mend --- tests/test_ua.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 94591531..87dd4fc9 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -5841,6 +5841,12 @@ test_cases: minor: patch: + - user_agent_string: 'NL-Crawler' + family: 'NL-Crawler' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (compatible; YoudaoBot-rts/1.0; http://www.youdao.com/help/webmaster/spider/; )' family: 'YoudaoBot' major: From 301dcf1749961c777ec871c3a3fe80115decbba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20Bach?= Date: Mon, 26 Sep 2016 00:29:14 +0200 Subject: [PATCH 045/253] Added test for iOS 10 applications. --- tests/test_os.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_os.yaml b/tests/test_os.yaml index b9b1b6f4..4395b63e 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2202,6 +2202,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'TestApp/1.0 CFNetwork/808.0.2 Darwin/16.0.0' + family: 'iOS' + major: '10' + minor: '0' + patch: + patch_minor: + - user_agent_string: 'TestApp-tvOS/1.0-1' family: 'tvOS' major: '1' From 9a83db4ce3e66ee53847070652ecfcb1e0eb0bba Mon Sep 17 00:00:00 2001 From: tpetry Date: Thu, 6 Oct 2016 18:09:45 +0200 Subject: [PATCH 046/253] postbox email user agent --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index af886337..5dc5a162 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -310,6 +310,10 @@ user_agent_parsers: - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?' family_replacement: 'Thunderbird' + # Postbox + - regex: '(Postbox)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Postbox' + # Barca - regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'Barca' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 87dd4fc9..86fd4239 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -876,6 +876,12 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:7.0.1) Gecko/20151105 Postbox/4.0.8' + family: 'Postbox' + major: '4' + minor: '0' + patch: '8' + - user_agent_string: 'Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)' family: 'Lotus Notes' major: '6' From d416117d4664242a565b06de3546009b424669bb Mon Sep 17 00:00:00 2001 From: tpetry Date: Tue, 11 Oct 2016 12:50:34 +0200 Subject: [PATCH 047/253] Gmail User Agent In contrast to any other webmail application the client browser does not load any picture within an email directly from the destination server. Since 2013 the client browsers requests the image from the "Gmail Image Proxy" hich loads the image and therefore protects the user's privacy by hiding it's ip address. --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index af886337..7e00ad98 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -17,6 +17,10 @@ user_agent_parsers: - regex: 'Google.*/\+/web/snippet' family_replacement: 'GooglePlusBot' + # Gmail + - regex: 'via ggpht.com GoogleImageProxy' + family_replacement: 'GmailImageProxy' + # Twitter - regex: '(Twitterbot)/(\d+)\.(\d+)' family_replacement: 'TwitterBot' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 87dd4fc9..e1e3d280 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -264,6 +264,12 @@ test_cases: minor: patch: + - user_agent_string: 'Firefox/11.0 (via ggpht.com GoogleImageProxy)' + family: 'GmailImageProxy' + major: + minor: + patch: + - user_agent_string: 'Twitterbot/1.0' family: 'TwitterBot' major: '1' From 8af8faa05987321a13842720f86c7ba538e8f2bd Mon Sep 17 00:00:00 2001 From: Joshua Woolf Date: Fri, 28 Oct 2016 13:31:13 +0200 Subject: [PATCH 048/253] Fixing UC Browser detection on Windows. See the following issue: https://github.com/ua-parser/uap-core/issues/163 --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 2b400ced..1cdf3fd2 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -113,7 +113,7 @@ user_agent_parsers: # UC Browser # we need check it before opera. In other case case UC Browser detected look like Opera Mini - - regex: '(UC ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)' + - regex: '(UC? ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)' family_replacement: 'UC Browser' # Opera will stop at 9.80 and hide the real version in the Version string. diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4dc5da43..9fa19bef 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1013,6 +1013,12 @@ test_cases: major: '8' minor: '7' patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.14488.1025 Safari/537.36' + family: 'UC Browser' + major: '5' + minor: '7' + patch: '14488' - user_agent_string: 'Alcatel-OH5/1.0 UP.Browser/6.1.0.7.7 (GUI) MMP/1.0' family: 'UP.Browser' From 9784b4a88e7507d57d7af8f5b6e279837389290e Mon Sep 17 00:00:00 2001 From: Fabian Zeindler Date: Mon, 31 Oct 2016 13:48:30 +0100 Subject: [PATCH 049/253] User Agent detection for Slack and Office365/Outlook services --- regexes.yaml | 10 +++++++--- tests/test_ua.yaml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 2b400ced..56ddc08a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -281,7 +281,7 @@ user_agent_parsers: #### MAIN CASES - this catches > 50% of all browsers #### # Browser/major_version.minor_version.beta_version - - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' @@ -344,7 +344,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)\.?(\d+)?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' @@ -364,7 +364,7 @@ user_agent_parsers: # Browser major_version.minor_version.beta_version (space instead of slash) - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' # Browser major_version.minor_version (space instead of slash) - - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|The Bat!) (\d+)\.(\d+)\.?(\d+)?' + - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)\.?(\d+)?' # Kindle WebKit - regex: '(Kindle)/(\d+)\.(\d+)' @@ -394,6 +394,10 @@ user_agent_parsers: - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7' family_replacement: 'IE Large Screen' + # Slack desktop client (needs to be before Apple Mail as it gets wrongly detected on Mac OS otherwise) + - regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Slack Desktop Client' + #### END MAIN CASES #### #### SPECIAL CASES #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4dc5da43..7fbde07b 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6710,3 +6710,39 @@ test_cases: major: minor: patch: + + - user_agent_string: 'MacOutlook/15.27.0.161010 (Intelx64 Mac OS X Version 10.11.6 (Build 15G1108))' + family: 'MacOutlook' + major: '15' + minor: '27' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Slack_SSB/2.0.3' + family: 'Slack Desktop Client' + major: '2' + minor: '0' + patch: '3' + + - user_agent_string: 'Microsoft-CryptoAPI/6.1' + family: 'Microsoft-CryptoAPI' + major: '6' + minor: '1' + patch: + + - user_agent_string: 'Microsoft SkyDriveSync 17.3.6517.0809 ship; Windows NT 6.1 Service Pack 1 (7601)' + family: 'Microsoft SkyDriveSync' + major: '17' + minor: '3' + patch: '6517' + + - user_agent_string: 'ExchangeServicesClient/14.02.0051.000' + family: 'ExchangeServicesClient' + major: '14' + minor: '02' + patch: '0051' + + - user_agent_string: 'Mac OS X/10.11.6 (15G1004); ExchangeWebServices/6.0 (243); Mail/9.3 (3124)' + family: 'ExchangeWebServices' + major: '6' + minor: '0' + patch: From 3f7686fb804a938996f6f647ec684d1095e86aeb Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 5 Nov 2016 14:37:47 +0100 Subject: [PATCH 050/253] detect os for iPhone, iPad --- regexes.yaml | 8 ++++---- tests/test_device.yaml | 11 +++++++++++ tests/test_os.yaml | 15 +++++++++++++++ tests/test_ua.yaml | 13 +++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 7a0470cf..736f504e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -426,13 +426,13 @@ user_agent_parsers: family_replacement: 'Bon Echo' # @note: iOS / OSX Applications - - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.* Safari' + - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'Mobile Safari UI/WKWebView' - - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile.* Safari' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile.*[ +]Safari' family_replacement: 'Mobile Safari' - - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile' family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad).* Safari' family_replacement: 'Mobile Safari' @@ -792,7 +792,7 @@ os_parsers: - regex: '(Apple\s?TV)(?:/(\d+)\.(\d+))?' os_replacement: 'ATV OS X' - - regex: '(CPU OS|iPhone OS|CPU iPhone) +(\d+)[_\.](\d+)(?:[_\.](\d+))?' + - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?' os_replacement: 'iOS' # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 69447b6a..9087621c 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79864,3 +79864,14 @@ test_cases: family: 'LG Web0S SmartTV' brand: 'LG' model: 'Web0S SmartTV' + + - user_agent_string: 'Mozilla/5.0+(iPhone;+CPU+iPhone+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone' + + - user_agent_string: 'Mozilla/5.0+(iPad;+CPU+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'iPad' + brand: 'Apple' + model: 'iPad' + diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 4395b63e..f0d57c63 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2243,3 +2243,18 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'Mozilla/5.0+(iPhone;+CPU+iPhone+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'iOS' + major: '9' + minor: '3' + patch: '1' + patch_minor: + + - user_agent_string: 'Mozilla/5.0+(iPad;+CPU+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'iOS' + major: '9' + minor: '3' + patch: '1' + patch_minor: + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index aed5973a..c81c8cb9 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6752,3 +6752,16 @@ test_cases: major: '6' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0+(iPhone;+CPU+iPhone+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'Mobile Safari' + major: '9' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0+(iPad;+CPU+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' + family: 'Mobile Safari' + major: '9' + minor: '0' + patch: + From 49952d1e79f371a30686c3c5a015735714a21ee5 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 5 Nov 2016 14:43:49 +0100 Subject: [PATCH 051/253] facebook ua has wrong device family --- regexes.yaml | 4 +-- tests/test_device.yaml | 73 ++++++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 736f504e..3894bf48 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4341,10 +4341,10 @@ device_parsers: # cannot determine specific device type from ua string. (3g, 3gs, 4, etc) ########## # @note: on some ua the device can be identified e.g. iPhone5,1 - - regex: '((?:iPhone|iPad|iPod)\d+,\d+)' + - regex: '(iPhone|iPad|iPod)(\d+,\d+)' device_replacement: '$1' brand_replacement: 'Apple' - model_replacement: '$1' + model_replacement: '$1$2' # @note: iPad needs to be before iPhone - regex: '(iPad)(?:;| Simulator;)' device_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 9087621c..ea36a89f 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -3941,172 +3941,172 @@ test_cases: model: 'AppleTV' - user_agent_string: 'Mozilla/5.0 (iPad compatibility; U; CPU iPhone OS 5_1_1 like Mac OS X; HW iPad1,1; de_de) AppleWebKit/525.18.1 (KHTML, like Gecko) (AdMob-iSDK-20100614; iphoneos4.2)' - family: 'iPad1,1' + family: 'iPad' brand: 'Apple' model: 'iPad1,1' - user_agent_string: 'Mozilla/5.0 (iPad2,1; iPad; U; CPU OS 6_1_3 like Mac OS X; de_DE) com.google.GooglePlus/23341 (KHTML, like Gecko) Mobile/K93AP (gzip)' - family: 'iPad2,1' + family: 'iPad' brand: 'Apple' model: 'iPad2,1' - user_agent_string: 'Mozilla/5.0 (iPad compatibility; U; CPU iPhone OS 4_3_3 like Mac OS X; HW iPad2,2; de_de) AppleWebKit/525.18.1 (KHTML, like Gecko) (AdMob-iSDK-20100614; iphoneos4.1)' - family: 'iPad2,2' + family: 'iPad' brand: 'Apple' model: 'iPad2,2' - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A465 [FBAN/FBIOS;FBAV/8.0.0.28.18;FBBV/1665515;FBDV/iPad2,3;FBMD/iPad;FBSN/iPhone OS;FBSV/7.0;FBSS/1; FBCR/Verizon;FBID/tablet;FBLC/de_DE;FBOP/1]' - family: 'iPad2,3' + family: 'iPad' brand: 'Apple' model: 'iPad2,3' - user_agent_string: 'Mozilla/5.0 (iPad2,4; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/K93aAP (gzip)' - family: 'iPad2,4' + family: 'iPad' brand: 'Apple' model: 'iPad2,4' - user_agent_string: 'Mozilla/5.0 (iPad2,5; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/P105AP (gzip)' - family: 'iPad2,5' + family: 'iPad' brand: 'Apple' model: 'iPad2,5' - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B147 [FBAN/FBIOS;FBAV/6.2;FBBV/228172;FBDV/iPad2,6;FBMD/iPad;FBSN/iPhone OS;FBSV/6.1.2;FBSS/1; FBCR/Carrier;FBID/tablet;FBLC/en_US;FBOP/1]' - family: 'iPad2,6' + family: 'iPad' brand: 'Apple' model: 'iPad2,6' - user_agent_string: 'Mozilla/5.0 (iPad2,7; iOS 7.0.3) FreeWheelAdManager/5.8.3-r10206-201309100316;com.vevo.iphone VEVO/6025' - family: 'iPad2,7' + family: 'iPad' brand: 'Apple' model: 'iPad2,7' - user_agent_string: 'Mozilla/5.0 (iPad3,1; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/J1AP (gzip)' - family: 'iPad3,1' + family: 'iPad' brand: 'Apple' model: 'iPad3,1' - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/5.4.2;FBBV/114387;FBDV/iPad3,2;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/Carrier;FBID/tablet;FBLC/en_US]' - family: 'iPad3,2' + family: 'iPad' brand: 'Apple' model: 'iPad3,2' - user_agent_string: 'Mozilla/5.0 (iPad3,4; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/P101AP (gzip)' - family: 'iPad3,4' + family: 'iPad' brand: 'Apple' model: 'iPad3,4' - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A8426 [FBAN/FBIOS;FBAV/7.0.0.17.1;FBBV/1325030;FBDV/iPad3,5;FBMD/iPad;FBSN/iPhone OS;FBSV/6.0.1;FBSS/2; FBCR/AT&T;FBID/tablet;FBLC/en_US;FBOP/1]' - family: 'iPad3,5' + family: 'iPad' brand: 'Apple' model: 'iPad3,5' - user_agent_string: 'Mozilla/5.0 (iPad3,6; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/P103AP (gzip)' - family: 'iPad3,6' + family: 'iPad' brand: 'Apple' model: 'iPad3,6' - user_agent_string: 'Mozilla/5.0 (iPad4,1; iPad; U; CPU OS 7_0_6 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/J71AP (gzip)' - family: 'iPad4,1' + family: 'iPad' brand: 'Apple' model: 'iPad4,1' - user_agent_string: 'Mozilla/5.0 (iPad4,2; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/J72AP (gzip)' - family: 'iPad4,2' + family: 'iPad' brand: 'Apple' model: 'iPad4,2' - user_agent_string: 'Mozilla/5.0 (iPad4,4; iPad; U; CPU OS 7_0_4 like Mac OS X; de_DE) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/J85AP (gzip)' - family: 'iPad4,4' + family: 'iPad' brand: 'Apple' model: 'iPad4,4' - user_agent_string: 'Mozilla/5.0 (iPad4,5; iOS 7.0.4) FreeWheelAdManager/5.3.0-r9485-201301220720;com.cnn.iphone CNN/4622' - family: 'iPad4,5' + family: 'iPad' brand: 'Apple' model: 'iPad4,5' - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1 like Mac OS X; HW iPhone1,1; de_de) AppleWebKit/525.18.1 (KHTML, like Gecko) (AdMob-iSDK-20090617)' - family: 'iPhone1,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone1,1' - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone 4_2_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7E18 Grindr/1.8.5 (iPhone1,2/4.2.1)' - family: 'iPhone1,2' + family: 'iPhone' brand: 'Apple' model: 'iPhone1,2' - user_agent_string: 'Mozilla/5.0 (iPhone2,1; iOS 4.3.5) FreeWheelAdManager/4.6.5-r8099-201204100535;com.vevo.iphone VEVO/5661' - family: 'iPhone2,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone2,1' - user_agent_string: 'Mozilla/5.0 (iPhone3,1; iOS 6.1.3) FreeWheelAdManager/5.3.0-r9485-201301220720;com.cnn.iphone CNN/4254' - family: 'iPhone3,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone3,1' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A523 [FBAN/FBIOS;FBAV/5.5;FBBV/123337;FBDV/iPhone3,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/6.0.1;FBSS/2; FBCR/o2-de;FBID/phone;FBLC/de_DE;FBOP/0]' - family: 'iPhone3,2' + family: 'iPhone' brand: 'Apple' model: 'iPhone3,2' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/5.2.2;FBBV/82131;FBDV/iPhone3,3;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/Verizon;FBID/phone;FBLC/de_DE]' - family: 'iPhone3,3' + family: 'iPhone' brand: 'Apple' model: 'iPhone3,3' - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 [FBAN/FBIOS;FBAV/8.0.0.28.18;FBBV/1665515;FBDV/iPhone4,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/7.0.4;FBSS/2; FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5]' - family: 'iPhone4,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone4,1' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A405 [FBAN/FBIOS;FBAV/6.8;FBBV/745892;FBDV/iPhone5,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/6.0;FBSS/2; FBCR/Carrier;FBID/phone;FBLC/en_US;FBOP/5]' - family: 'iPhone5,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone5,1' - user_agent_string: 'Mozilla/5.0 (iPhone5,2; iOS 7.0.3) FreeWheelAdManager/5.8.3-r10206-201309100316;com.vevo.iphone VEVO/5987' - family: 'iPhone5,2' + family: 'iPhone' brand: 'Apple' model: 'iPhone5,2' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A466 [FBAN/FBIOS;FBAV/6.7.2;FBBV/603804;FBDV/iPhone5,3;FBMD/iPhone;FBSN/iPhone OS;FBSV/7.0;FBSS/2; FBCR/o2-de;FBID/phone;FBLC/es_ES;FBOP/5]' - family: 'iPhone5,3' + family: 'iPhone' brand: 'Apple' model: 'iPhone5,3' - user_agent_string: 'Mozilla/5.0 (iPhone5,4; iPhone; U; CPU OS 7_0_5 like Mac OS X; de_AT) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/N49AP (gzip)' - family: 'iPhone5,4' + family: 'iPhone' brand: 'Apple' model: 'iPhone5,4' - user_agent_string: 'Mozilla/5.0 (iPhone6,1; iPhone; U; CPU OS 7_0_4 like Mac OS X; ar_SA) com.google.GooglePlus/29676 (KHTML, like Gecko) Mobile/N51AP (gzip)' - family: 'iPhone6,1' + family: 'iPhone' brand: 'Apple' model: 'iPhone6,1' - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 [FBAN/FBIOS;FBAV/7.0.0.17.1;FBBV/1325030;FBDV/iPhone6,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/7.0.6;FBSS/2; FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5]' - family: 'iPhone6,2' + family: 'iPhone' brand: 'Apple' model: 'iPhone6,2' - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone 4_2_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7E18 Grindr/1.8.5 (iPod2,1/4.2.1)' - family: 'iPod2,1' + family: 'iPod' brand: 'Apple' model: 'iPod2,1' - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone 5_1_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7E18 Grindr/1.8.8 (iPod3,1/5.1.1)' - family: 'iPod3,1' + family: 'iPod' brand: 'Apple' model: 'iPod3,1' - user_agent_string: 'Mozilla/5.0 (iPhone; U; CPU iPhone 6_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7E18 Grindr/1.8.8 (iPod4,1/6.1.3)' - family: 'iPod4,1' + family: 'iPod' brand: 'Apple' model: 'iPod4,1' - user_agent_string: 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A4449d [FBAN/FBIOS;FBAV/6.4;FBBV/290891;FBDV/iPod5,1;FBMD/iPod touch;FBSN/iPhone OS;FBSV/7.0;FBSS/2; FBCR/;FBID/phone;FBLC/de_DE;FBOP/1]' - family: 'iPod5,1' + family: 'iPod' brand: 'Apple' model: 'iPod5,1' @@ -79875,3 +79875,8 @@ test_cases: brand: 'Apple' model: 'iPad' + - user_agent_string: 'Mozilla/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 [FBAN/FBIOS;FBAV/68.0.0.49.70;FBBV/41924288;FBRV/0;FBDV/iPad4,1;FBMD/iPad;FBSN/iOS;FBSV/10.0.2;FBSS/2;FBCR/;FBID/tablet;FBLC/en_US;FBOP/5]' + family: 'iPad' + brand: 'Apple' + model: 'iPad4,1' + From 7e2a4fdac6ff0c911338a45deee6979348584597 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 5 Nov 2016 14:53:26 +0100 Subject: [PATCH 052/253] add bingpreview as spider --- regexes.yaml | 4 ++-- tests/test_device.yaml | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 3894bf48..9837eb4a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1038,7 +1038,7 @@ device_parsers: # Mobile Spiders # Catch the mobile crawler before checking for iPhones / Androids. ######### - - regex: '(?:(?:iPhone|Windows CE|Android).*(?:(?:Bot|Yeti)-Mobile|YRSpider|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.*iPhone)' + - regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android).*(?:(?:Bot|Yeti)-Mobile|YRSpider|BingPreview|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.*iPhone)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' @@ -4785,7 +4785,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index ea36a89f..d75b050e 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79880,3 +79880,13 @@ test_cases: brand: 'Apple' model: 'iPad4,1' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530) like Gecko BingPreview/1.0b' + family: 'Spider' + brand: 'Spider' + model: 'Smartphone' + From 4c837d4855728b973a643184dbc8d23b5f6eca4a Mon Sep 17 00:00:00 2001 From: commenthol Date: Sun, 6 Nov 2016 08:41:20 +0100 Subject: [PATCH 053/253] adding slackbot --- regexes.yaml | 2 +- tests/test_device.yaml | 10 ++++++++++ tests/test_ua.yaml | 12 ++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 9837eb4a..b7132335 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -38,7 +38,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index d75b050e..feb694b5 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79890,3 +79890,13 @@ test_cases: brand: 'Spider' model: 'Smartphone' + - user_agent_string: 'Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Slack-ImgProxy 1.136 (+https://api.slack.com/robots)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c81c8cb9..bca53521 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6765,3 +6765,15 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)' + family: 'Slackbot-LinkExpanding' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Slack-ImgProxy 1.136 (+https://api.slack.com/robots)' + family: 'Slack-ImgProxy' + major: '1' + minor: '136' + patch: + From 6a07ac747dd0caffd79821c7717c4e4616a01a53 Mon Sep 17 00:00:00 2001 From: Joshua Woolf Date: Sun, 6 Nov 2016 15:03:03 +0200 Subject: [PATCH 054/253] Fixing the detection of Tizen OS. --- regexes.yaml | 2 +- tests/test_os.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 9837eb4a..cf9f4f20 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -738,7 +738,7 @@ os_parsers: # Tizen OS from Samsung # spoofs Android so pushing it above ########## - - regex: '(Tizen)/(\d+)\.(\d+)' + - regex: '(Tizen)[/ ](\d+)\.(\d+)' ########## # Mac OS diff --git a/tests/test_os.yaml b/tests/test_os.yaml index f0d57c63..69c7e440 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2258,3 +2258,9 @@ test_cases: patch: '1' patch_minor: + - user_agent_string: 'Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1' + family: 'Tizen' + major: '2' + minor: '3' + patch: + patch_minor: \ No newline at end of file From 4a19509baa321844a9c6b9cbfec8e3199b4ae5eb Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 12 Nov 2016 08:48:59 +0100 Subject: [PATCH 055/253] adding device Samsung Smart-TV --- regexes.yaml | 5 +++++ tests/test_device.yaml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 4168091f..29ff17ed 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4628,6 +4628,11 @@ device_parsers: ########## # Samsung ########## + # Samsung Smart-TV + - regex: '(SMART-TV); .* Tizen ' + device_replacement: 'Samsung $1' + brand_replacement: 'Samsung' + model_replacement: '$1' # Samsung Symbian Devices - regex: 'SymbianOS/9\.\d.* Samsung[/\-]([A-Za-z0-9 \-]+)' device_replacement: 'Samsung $1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index feb694b5..a65bf53b 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79900,3 +79900,8 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1' + family: 'Samsung SMART-TV' + brand: 'Samsung' + model: 'SMART-TV' + From bad8e9330299f8afec800c009804f4d2fd762010 Mon Sep 17 00:00:00 2001 From: Jiening Wen Date: Wed, 16 Nov 2016 14:22:32 +0100 Subject: [PATCH 056/253] add okhttp --- regexes.yaml | 2 +- tests/test_ua.yaml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 4168091f..26a71901 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -35,7 +35,7 @@ user_agent_parsers: family_replacement: 'MSIECrawler' # Downloader ... - - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index bca53521..bb7cdc43 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6777,3 +6777,8 @@ test_cases: minor: '136' patch: + - user_agent_string: 'okhttp/3.4.2' + family: 'okhttp' + major: '3' + minor: '4' + patch: '2' From 457811337e9912573b7c805acadbe6c4d0012658 Mon Sep 17 00:00:00 2001 From: tpetry Date: Thu, 17 Nov 2016 10:13:37 +0100 Subject: [PATCH 057/253] Lightning identifier as a an addon is appended to the user agent while the standalone product will have it first (fixes ua-parser/uap-core#184) --- regexes.yaml | 2 +- tests/test_ua.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 1b9de037..5edbdbd3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -160,7 +160,7 @@ user_agent_parsers: # Lightning (for Thunderbird) # http://www.mozilla.org/projects/calendar/lightning/ - - regex: '(Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))' + - regex: 'Gecko/\d+ (Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))' # Swiftfox - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index bb7cdc43..c3edd49e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -865,10 +865,10 @@ test_cases: patch: '5' - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 Lightning/2.6.4' - family: 'Lightning' - major: '2' - minor: '6' - patch: '4' + family: 'Thunderbird' + major: '24' + minor: '2' + patch: '0' - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0' family: 'Thunderbird' From dbb15831a3b59c4fd69411a897a0e47c77131dca Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 12 Nov 2016 09:18:26 +0100 Subject: [PATCH 058/253] adding changed ua scheme for Iron --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 50 +++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 5edbdbd3..c4f7a54b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -336,6 +336,10 @@ user_agent_parsers: - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' family_replacement: 'Brave' + # Iron Browser ~since version 50 + - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]* Iron[^/]' + family_replacement: 'Iron' + # Chrome/Chromium/major_version.minor_version.beta_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c3edd49e..bb3eeb56 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6719,38 +6719,38 @@ test_cases: - user_agent_string: 'MacOutlook/15.27.0.161010 (Intelx64 Mac OS X Version 10.11.6 (Build 15G1108))' family: 'MacOutlook' - major: '15' - minor: '27' - patch: '0' + major: '15' + minor: '27' + patch: '0' - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Slack_SSB/2.0.3' family: 'Slack Desktop Client' - major: '2' - minor: '0' - patch: '3' + major: '2' + minor: '0' + patch: '3' - user_agent_string: 'Microsoft-CryptoAPI/6.1' family: 'Microsoft-CryptoAPI' - major: '6' - minor: '1' + major: '6' + minor: '1' patch: - user_agent_string: 'Microsoft SkyDriveSync 17.3.6517.0809 ship; Windows NT 6.1 Service Pack 1 (7601)' family: 'Microsoft SkyDriveSync' - major: '17' - minor: '3' - patch: '6517' + major: '17' + minor: '3' + patch: '6517' - user_agent_string: 'ExchangeServicesClient/14.02.0051.000' family: 'ExchangeServicesClient' - major: '14' - minor: '02' - patch: '0051' + major: '14' + minor: '02' + patch: '0051' - user_agent_string: 'Mac OS X/10.11.6 (15G1004); ExchangeWebServices/6.0 (243); Mail/9.3 (3124)' family: 'ExchangeWebServices' - major: '6' - minor: '0' + major: '6' + minor: '0' patch: - user_agent_string: 'Mozilla/5.0+(iPhone;+CPU+iPhone+OS+9_3_1+like+Mac+OS+X)+AppleWebKit/601.1.46+(KHTML,+like+Gecko)+Version/9.0+Mobile/13E238+Safari/601.1' @@ -6782,3 +6782,21 @@ test_cases: major: '3' minor: '4' patch: '2' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1300.0 Iron/23.0.1300.0 Safari/537.11' + family: 'Iron' + major: '23' + minor: '0' + patch: '1300' + + - user_agent_string: 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Iron/9.0.600.2 Chrome/9.0.600.2 Safari/534.13' + family: 'Iron' + major: '9' + minor: '0' + patch: '600' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2750.0 Iron Safari/537.36' + family: 'Iron' + major: '52' + minor: '0' + patch: '2750' From 1504df15c5def181b63d4460e09c9425186d0d6d Mon Sep 17 00:00:00 2001 From: dampier Date: Mon, 21 Nov 2016 17:06:18 -0800 Subject: [PATCH 059/253] User Agent detection for Electron framework --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 5edbdbd3..e983d6b5 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -281,7 +281,7 @@ user_agent_parsers: #### MAIN CASES - this catches > 50% of all browsers #### # Browser/major_version.minor_version.beta_version - - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c3edd49e..9293d655 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6489,6 +6489,12 @@ test_cases: minor: '2' patch: '1' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) pagedraw/0.1.0 Chrome/49.0.2623.75 Electron/0.37.8 Safari/537.36' + family: 'Electron' + major: '0' + minor: '37' + patch: '8' + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile' family: 'Mobile Safari UI/WKWebView' major: '4' From 82c121a392bdf6df64f135229400fb367719e6eb Mon Sep 17 00:00:00 2001 From: commenthol Date: Tue, 22 Nov 2016 20:54:34 +0100 Subject: [PATCH 060/253] fixing AdobeAir missing patch version --- regexes.yaml | 4 ++-- tests/test_ua.yaml | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index a9c9aa30..7a3f9242 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -281,7 +281,7 @@ user_agent_parsers: #### MAIN CASES - this catches > 50% of all browsers #### # Browser/major_version.minor_version.beta_version - - regex: '\b(MobileIron|Crosswalk|AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|Crosswalk|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' @@ -348,7 +348,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 1e8b90d8..893643da 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6806,3 +6806,22 @@ test_cases: major: '52' minor: '0' patch: '2750' + + - user_agent_string: 'Mozilla/5.0 (Android; U; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/23.0' + family: 'AdobeAIR' + major: '23' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/19.0' + family: 'AdobeAIR' + major: '19' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (iOS; U; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/19.0' + family: 'AdobeAIR' + major: '19' + minor: '0' + patch: + From 2c450a67ee331c0fc4ca7e167684d4a92f93c545 Mon Sep 17 00:00:00 2001 From: Hendra Uzia Date: Tue, 29 Nov 2016 18:03:54 +0700 Subject: [PATCH 061/253] Fix issue #176 add newsreader app useragent Added Kurio and BacaBerita to User Agent Parser --- regexes.yaml | 8 ++++++++ tests/test_ua.yaml | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 7a3f9242..983854e4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -562,6 +562,14 @@ user_agent_parsers: # Roku Digital-Video-Players https://www.roku.com/ - regex: '^(Roku)/DVP-(\d+)\.(\d+)' + # Kurio App News Reader https://kurio.co.id/ + - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Kurio App' + + # Baca Berita App News Reader + - regex: '(BacaBerita\sApp)\/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'BacaBerita App' + os_parsers: ########## # HbbTV vendors diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 893643da..dc482313 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6825,3 +6825,14 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Kurio/3.0.8 Build 65303(Android Kitkat 4.4.4; Phone)' + family: 'Kurio App' + major: '3' + minor: '0' + patch: '8' + + - user_agent_string: 'BacaBerita App/5.5.0 (Linux; U; Android 4.4.4; en-us) Mobile Safari' + family: 'BacaBerita App' + major: '5' + minor: '5' + patch: '0' From 15d893e2d33007abf91d2247a1ed6478027f098d Mon Sep 17 00:00:00 2001 From: Hendyanto Date: Wed, 30 Nov 2016 10:04:45 +0700 Subject: [PATCH 062/253] Fix failing test --- regexes.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 983854e4..2626c01d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1,6 +1,15 @@ user_agent_parsers: #### SPECIAL CASES TOP #### + # Kurio App News Reader https://kurio.co.id/ + - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Kurio App' + + # Baca Berita App News Reader + - regex: '(BacaBerita\sApp)\/(\d+)\.(\d+)\.(\d+)' + os_replacement: 'Android' + family_replacement: 'BacaBerita App' + # @note: iOS / OSX Applications - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' family_replacement: 'CFNetwork' @@ -562,14 +571,6 @@ user_agent_parsers: # Roku Digital-Video-Players https://www.roku.com/ - regex: '^(Roku)/DVP-(\d+)\.(\d+)' - # Kurio App News Reader https://kurio.co.id/ - - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'Kurio App' - - # Baca Berita App News Reader - - regex: '(BacaBerita\sApp)\/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'BacaBerita App' - os_parsers: ########## # HbbTV vendors From d18aeccd777ecc854a23c5ea1c3da574c21d7437 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 30 Nov 2016 18:42:25 +0100 Subject: [PATCH 063/253] detecting iOS from Deezer, AdobeAir --- regexes.yaml | 3 ++- tests/test_os.yaml | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 7a3f9242..2a07722e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -879,8 +879,9 @@ os_parsers: os_v1_replacement: '10' os_v2_replacement: '0' # iOS Apps - - regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' + - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' + - regex: '\((iOS);' ########## # Apple TV diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 69c7e440..7a4a55db 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2263,4 +2263,18 @@ test_cases: major: '2' minor: '3' patch: - patch_minor: \ No newline at end of file + patch_minor: + + - user_agent_string: 'Deezer/4.8.2 (iOS; 7.1; Mobile; de)' + family: 'iOS' + major: '7' + minor: '1' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (iOS; U; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/19.0' + family: 'iOS' + major: + minor: + patch: + patch_minor: From 03132dbe7e42511b725ba61caed2612a62c39c40 Mon Sep 17 00:00:00 2001 From: Hendyanto Date: Thu, 1 Dec 2016 11:08:54 +0700 Subject: [PATCH 064/253] Relocate newsreader app user agent Added Baca berita app above "Android" Checking to prevent Baca berita user agent to match as "Android". Kurio app is placed below because no occurences of Kurio on Donut, Eclair, Froyo, & Gingerbread --- regexes.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 2626c01d..05e365c2 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1,15 +1,6 @@ user_agent_parsers: #### SPECIAL CASES TOP #### - # Kurio App News Reader https://kurio.co.id/ - - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'Kurio App' - - # Baca Berita App News Reader - - regex: '(BacaBerita\sApp)\/(\d+)\.(\d+)\.(\d+)' - os_replacement: 'Android' - family_replacement: 'BacaBerita App' - # @note: iOS / OSX Applications - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' family_replacement: 'CFNetwork' @@ -374,6 +365,9 @@ user_agent_parsers: - regex: '(IEMobile)[ /](\d+)\.(\d+)' family_replacement: 'IE Mobile' + # Baca Berita App News Reader + - regex: '(BacaBerita App)\/(\d+)\.(\d+)\.(\d+)' + # Browser major_version.minor_version.beta_version (space instead of slash) - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' # Browser major_version.minor_version (space instead of slash) @@ -571,6 +565,11 @@ user_agent_parsers: # Roku Digital-Video-Players https://www.roku.com/ - regex: '^(Roku)/DVP-(\d+)\.(\d+)' + # Kurio App News Reader https://kurio.co.id/ + - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Kurio App' + + os_parsers: ########## # HbbTV vendors From 8967188a29323a415c8f701613ba529845aa0f53 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 30 Nov 2016 18:47:11 +0100 Subject: [PATCH 065/253] fix iOS detection for UCWEB browser --- regexes.yaml | 2 +- tests/test_os.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 2a07722e..4dbca81e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -659,7 +659,7 @@ os_parsers: # UCWEB - regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?;' os_replacement: 'Android' - - regex: '^UCWEB.*; (iPad OS|iPh OS) (\d+)_(\d+)(?:_(\d+))?;' + - regex: '^UCWEB.*; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+))?;' os_replacement: 'iOS' - regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+))?;' os_replacement: 'Windows Phone' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 7a4a55db..66c332a7 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2278,3 +2278,10 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'UCWEB/2.0 (iOS; U; iPd OS 7_0_4; zh-CN; iPd5,1) U2/1.0.0 UCBrowser/9.0.1.284 U2/1.0.0 Mobile' + family: 'iOS' + major: '7' + minor: '0' + patch: '4' + patch_minor: From a47b2dda986203c766928e03242a6d8ae428d7c5 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 30 Nov 2016 18:54:17 +0100 Subject: [PATCH 066/253] MxBrowser is Maxthon --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 4dbca81e..4b2fbf40 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -276,6 +276,10 @@ user_agent_parsers: # AOL Browser (IE-based) - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)' + # MxBrowser is Maxthon + - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Maxthon' + #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 893643da..4edcfd1e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6825,3 +6825,15 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxBrowser/4.5.2.2000 Chrome/30.0.1551.0 Safari/537.36' + family: 'Maxthon' + major: '4' + minor: '5' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.5.1000 Chrome/30.0.1599.101 Safari/537.36' + family: 'Maxthon' + major: '4' + minor: '4' + patch: '5' + From 0dabfd35a465e1c7dd5b07c273d4b693d46ee387 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 30 Nov 2016 19:08:18 +0100 Subject: [PATCH 067/253] fix Midori browser hidden by Chrome --- regexes.yaml | 7 ++----- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 4b2fbf40..6ee85f1b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -344,18 +344,15 @@ user_agent_parsers: - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]* Iron[^/]' family_replacement: 'Iron' - # Chrome/Chromium/major_version.minor_version.beta_version - - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)' - # Dolphin Browser # @ref: http://www.dolphin.com - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - - regex: '(Chromium|Chrome)/(\d+)\.(\d+)' + - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' ########## # IE Mobile needs to happen before Android to catch cases such as: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4edcfd1e..5333b013 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6837,3 +6837,15 @@ test_cases: minor: '4' patch: '5' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.6 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/537.6 Midori/0.5' + family: 'Midori' + major: '0' + minor: '5' + patch: + + - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU like Mac OS X; FIT_LANG_REPLACE) AppleWebKit/532+ (KHTML, like Gecko) Version/3.0 Mobile/1A538b Safari/419.3 Midori/0.4' + family: 'Midori' + major: '0' + minor: '4' + patch: + From 168b80812bc78db2119d47fc75b20074be1bfa6e Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 3 Dec 2016 08:40:57 +0100 Subject: [PATCH 068/253] adding headless uas --- regexes.yaml | 5 +- test_resources/pgts_browser_list.yaml | 126 +++++++++++++------------- tests/test_ua.yaml | 96 +++++++++++++++++++- 3 files changed, 160 insertions(+), 67 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 4aa954c0..f7101276 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -349,7 +349,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Microsoft-CryptoAPI)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' @@ -561,6 +561,9 @@ user_agent_parsers: - regex: '(python-requests)/(\d+)\.(\d+)' family_replacement: 'Python Requests' + # headless user-agents + - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|Wget|OpenBSD ftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' # Roku Digital-Video-Players https://www.roku.com/ diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index 8dbf8e80..fd376d2f 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -1051,70 +1051,70 @@ test_cases: patch: '0' - user_agent_string: 'curl/7.10.2 (powerpc-apple-darwin7.0) libcurl/7.10.2 OpenSSL/0.9.7b zlib/1.1.4' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '10' + patch: '2' - user_agent_string: 'curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6 OpenSSL/0.9.7a ipv6 zlib/1.1.4' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '10' + patch: '6' - user_agent_string: 'curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6 OpenSSL/0.9.7a ipv6 zlib/1.2.0.7' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '10' + patch: '6' - user_agent_string: 'curl/7.11.2 (i686-pc-linux-gnu) libcurl/7.10.2 OpenSSL/0.9.6i ipv6 zlib/1.1.4' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '11' + patch: '2' - user_agent_string: 'curl/7.12.0 (i686-pc-linux-gnu) libcurl/7.12.0 OpenSSL/0.9.7e ipv6 zlib/1.2.2' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '12' + patch: '0' - user_agent_string: 'curl/7.7.2 (powerpc-apple-darwin6.0) libcurl 7.7.2 (OpenSSL 0.9.6b)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '7' + patch: '2' - user_agent_string: 'curl/7.7.3 (i686-pc-linux-gnu) libcurl 7.7.3 (OpenSSL 0.9.6)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '7' + patch: '3' - user_agent_string: 'curl/7.7.3 (win32) libcurl 7.7.3 (OpenSSL 0.9.6)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '7' + patch: '3' - user_agent_string: 'curl/7.9.3 (powerpc-ibm-aix4.3.3.0) libcurl 7.9.3 (OpenSSL 0.9.6m)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '9' + patch: '3' - user_agent_string: 'curl/7.9.5 (i386-redhat-linux-gnu) libcurl 7.9.5 (OpenSSL 0.9.6b) (ipv6 enabled)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '9' + patch: '5' - user_agent_string: 'curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)' - family: 'Other' - major: - minor: - patch: + family: 'curl' + major: '7' + minor: '9' + patch: '8' - user_agent_string: 'DA 5.0' family: 'Other' @@ -4165,27 +4165,27 @@ test_cases: patch: - user_agent_string: 'libwww-perl/5.79' - family: 'Other' - major: - minor: + family: 'libwww-perl' + major: '5' + minor: '79' patch: - user_agent_string: 'SonyEricssonT306/R101 [Html2Wml/0.4.11 libwww-perl/5.79]' - family: 'Other' - major: - minor: + family: 'libwww-perl' + major: '5' + minor: '79' patch: - user_agent_string: 'testJapanequeDelicious/0.1 libwww-perl/5.803' - family: 'Other' - major: - minor: + family: 'libwww-perl' + major: '5' + minor: '803' patch: - user_agent_string: 'W3C-checklink/4.1 [4.14] libwww-perl/5.803' - family: 'Other' - major: - minor: + family: 'libwww-perl' + major: '5' + minor: '803' patch: - user_agent_string: 'Mozilla/3.0 (compatible; Linkman)' @@ -74779,15 +74779,15 @@ test_cases: patch: - user_agent_string: 'Wget/1.8.2 modified' - family: 'Other' - major: - minor: - patch: + family: 'Wget' + major: '1' + minor: '8' + patch: '2' - user_agent_string: 'Wget/1.9+cvs-stable (Red Hat modified)' - family: 'Other' - major: - minor: + family: 'Wget' + major: '1' + minor: '9' patch: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 5.00; Window 98)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index fce8d380..3a036244 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -887,7 +887,7 @@ test_cases: major: '4' minor: '0' patch: '8' - + - user_agent_string: 'Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)' family: 'Lotus Notes' major: '6' @@ -1013,7 +1013,7 @@ test_cases: major: '8' minor: '7' patch: '0' - + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.14488.1025 Safari/537.36' family: 'UC Browser' major: '5' @@ -5864,7 +5864,7 @@ test_cases: major: minor: patch: - + - user_agent_string: 'Mozilla/5.0 (compatible; YoudaoBot-rts/1.0; http://www.youdao.com/help/webmaster/spider/; )' family: 'YoudaoBot' major: @@ -6860,3 +6860,93 @@ test_cases: major: '0' minor: '4' patch: + + - user_agent_string: 'curl/7.29.0' + family: 'curl' + major: '7' + minor: '29' + patch: '0' + + - user_agent_string: 'Debian APT-HTTP/1.3 (1.0.1ubuntu2)' + family: 'Debian APT-HTTP' + major: '1' + minor: '3' + patch: + + - user_agent_string: 'jupdate' + family: 'jupdate' + major: + minor: + patch: + + - user_agent_string: 'libcurl-agent/1.0' + family: 'libcurl-agent' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'libwww-perl/6.05' + family: 'libwww-perl' + major: '6' + minor: '05' + patch: + + - user_agent_string: 'Microsoft-CryptoAPI/6.3' + family: 'Microsoft-CryptoAPI' + major: '6' + minor: '3' + patch: + + - user_agent_string: 'OpenBSD ftp' + family: 'OpenBSD ftp' + major: + minor: + patch: + + - user_agent_string: 'SophosAgent/1.0 (type= spa )' + family: 'SophosAgent' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'SophosUpdateManager/1.5.7.50 SDDS/2.0 (u= EO2ANA123G c= 6342da15-f351-4ab7-9656-3f5f2d50885d )' + family: 'SophosUpdateManager' + major: '1' + minor: '5' + patch: '7' + + - user_agent_string: 'Ubuntu APT-HTTP/1.3 (0.7.20.2ubuntu6)' + family: 'Ubuntu APT-HTTP' + major: '1' + minor: '3' + patch: + + - user_agent_string: 'urlgrabber/3.10 yum/3.4.3' + family: 'urlgrabber' + major: '3' + minor: '10' + patch: + + - user_agent_string: 'urlgrabber/3.9.1 yum/3.2.29' + family: 'urlgrabber' + major: '3' + minor: '9' + patch: '1' + + - user_agent_string: 'Wget/1.14 (linux-gnu)' + family: 'Wget' + major: '1' + minor: '14' + patch: + + - user_agent_string: 'Windows-Update-Agent/7.9.9600.17729 Client-Protocol/1.21' + family: 'Windows-Update-Agent' + major: '7' + minor: '9' + patch: '9600' + + - user_agent_string: 'Windows-Update-Agent/7.9.9600.18094 Client-Protocol/1.21' + family: 'Windows-Update-Agent' + major: '7' + minor: '9' + patch: '9600' From 832c67bbab076c6d2334d2051c43370c3148284d Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 10 Dec 2016 08:37:27 +0100 Subject: [PATCH 069/253] fix parsing ATH-AL00 --- regexes.yaml | 16 ++++++++-------- tests/test_device.yaml | 5 +++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index f7101276..e2448b47 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2117,7 +2117,7 @@ device_parsers: device_replacement: 'Huawei Ideos$1' brand_replacement: 'Huawei' model_replacement: 'Ideos$1' - - regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P) Build' + - regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.+?) Build[/ ]' device_replacement: 'Huawei $1' brand_replacement: 'Huawei' model_replacement: '$1' @@ -4740,27 +4740,27 @@ device_parsers: ######### # Android General Device Matching (far from perfect) ######### - - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build' + - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build' + - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build' + - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build' + - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' # No build info at all - "Build" follows locale immediately - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build' + - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]' device_replacement: 'Generic Smartphone' brand_replacement: 'Generic' model_replacement: 'Smartphone' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build' + - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build' + - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index a65bf53b..bf1d3afe 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79905,3 +79905,8 @@ test_cases: brand: 'Samsung' model: 'SMART-TV' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; ATH-AL00 Build/HONORATH-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36 JsKit/1.0 (Android) SohuNews/5.7.3 BuildCode/113' + family: 'Huawei ATH-AL00' + brand: 'Huawei' + model: 'ATH-AL00' + From 060382658447e3337db632b3aee1de7d86b066ee Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 22 Dec 2016 09:13:48 +0900 Subject: [PATCH 070/253] fix baidu dragon browser --- regexes.yaml | 14 +++++++------- tests/test_ua.yaml | 13 +++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e2448b47..f22e86a0 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -222,6 +222,12 @@ user_agent_parsers: - regex: '(SamsungBrowser)/(\d+)\.(\d+)' family_replacement: 'Samsung Internet' + # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) + - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?' + family_replacement: 'Baidu Browser' + - regex: '(FlyFlow)/(\d+)\.(\d+)' + family_replacement: 'Baidu Explorer' + # Chrome Mobile - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' @@ -244,12 +250,6 @@ user_agent_parsers: - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)' family_replacement: 'Sogou Explorer' - # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) - - regex: '(baidubrowser)[/\s](\d+)' - family_replacement: 'Baidu Browser' - - regex: '(FlyFlow)/(\d+)\.(\d+)' - family_replacement: 'Baidu Explorer' - # QQ Browsers - regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' family_replacement: 'QQ Browser Mini' @@ -349,7 +349,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 3a036244..def5552e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6950,3 +6950,16 @@ test_cases: major: '7' minor: '9' patch: '9600' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.1.1; MI NOTE Pro Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 baidubrowser/7.7.13.0 (Baidu; P1 5.1.1)' + family: 'Baidu Browser' + major: '7' + minor: '7' + patch: '13' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Dragon/36.1.1.21 Chrome/36.0.1985.97 Safari/537.36' + family: 'Dragon' + major: '36' + minor: '1' + patch: '1' + From a2ba9fc6a654d0d732fe758deef7c19e5b006d57 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 22 Dec 2016 09:18:32 +0900 Subject: [PATCH 071/253] fix doubled regex Minimo browser --- regexes.yaml | 2 -- tests/test_ua.yaml | 6 ++++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index f22e86a0..ca28010e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -190,8 +190,6 @@ user_agent_parsers: - regex: '(Symphony) (\d+).(\d+)' - - regex: '(Minimo)' - - regex: 'PLAYSTATION 3.+WebKit' family_replacement: 'NetFront NX' - regex: 'PLAYSTATION 3' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index def5552e..6212502d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6963,3 +6963,9 @@ test_cases: minor: '1' patch: '1' + - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/20060610 Minimo/0.016' + family: 'Minimo' + major: '0' + minor: '016' + patch: + From 8c7259832eb74aad66aae57ab78dd237e1286fa3 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 22 Dec 2016 09:38:41 +0900 Subject: [PATCH 072/253] fix detection of iOS --- regexes.yaml | 3 +-- tests/test_os.yaml | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ca28010e..98e137af 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -208,7 +208,6 @@ user_agent_parsers: - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?' family_replacement: 'Amazon Silk' - # @ref: http://www.puffinbrowser.com - regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?' @@ -806,7 +805,7 @@ os_parsers: - regex: '(Apple\s?TV)(?:/(\d+)\.(\d+))?' os_replacement: 'ATV OS X' - - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?' + - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?' os_replacement: 'iOS' # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 66c332a7..04f5c0e1 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2285,3 +2285,18 @@ test_cases: minor: '0' patch: '4' patch_minor: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU IPhone OS 8_1_3 Like Mac OS X) AppleWebKit/600.1.4 (KHTML, Like Gecko) CriOS/43.0.2357.61 Mobile/12B466 Safari/600.1.4' + family: 'iOS' + major: '8' + minor: '1' + patch: '3' + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU IPhone OS 9_2_1 Like Mac OS X) AppleWebKit/601.1.46 (KHTML, Like Gecko) Mobile/13D15 [FBAN/FBIOS;FBAV/52.0.0.46.157;FBBV/26424168;FBDV/iPhone6,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/9.2.1;FBSS/2; FBCR/Globe;FBID/phone;FBLC/en_US;FBOP/5]' + family: 'iOS' + major: '9' + minor: '2' + patch: '1' + patch_minor: + From 6e98843fb94da5cbd49ae9cb0a7de7ee9f09e435 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 22 Dec 2016 09:45:09 +0900 Subject: [PATCH 073/253] fix Opera Mini detected as 008 bot --- regexes.yaml | 2 +- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 98e137af..7e52ec4b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -28,7 +28,7 @@ user_agent_parsers: # Bots Pattern '/name-0.0' - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Bots Pattern 'name/0.0' - - regex: '(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # MSIECrawler - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 6212502d..03a61974 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6969,3 +6969,15 @@ test_cases: minor: '016' patch: + - user_agent_string: 'Opera/9.80 (MAUI Runtime; Opera Mini/4.4.39008/37.9178; U; en) Presto/2.12.423 Version/12.16' + family: 'Opera Mini' + major: '4' + minor: '4' + patch: '39008' + + - user_agent_string: 'Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/spider.html) Gecko/2008032620' + family: '008' + major: '0' + minor: '83' + patch: + From 1a7d3e90db7e2fb2a8a1ed512f8b4433fd13fa0e Mon Sep 17 00:00:00 2001 From: Joey Parrish Date: Tue, 10 Jan 2017 17:15:42 -0800 Subject: [PATCH 074/253] Add Chromecast detection This adds Chromecast detection. The browser will still be Chrome, but the OS will be Chromecast instead of Linux. Closes #210 --- regexes.yaml | 6 ++++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 7e52ec4b..01a45e74 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1015,6 +1015,12 @@ os_parsers: - regex: '(WebTV)/(\d+).(\d+)' + ########## + # Chromecast + ########## + - regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+))?)?' + os_replacement: 'Chromecast' + ########## # Misc mobile ########## diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 04f5c0e1..bb172a0f 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2300,3 +2300,10 @@ test_cases: patch: '1' patch_minor: + - user_agent_string: 'Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.84 Safari/537.36 CrKey/1.22.74257' + family: 'Chromecast' + major: '1' + minor: '22' + patch: '74257' + patch_minor: + From a9ef71095be5046ffdfbe0e51323c24b1405e8b3 Mon Sep 17 00:00:00 2001 From: Alexey Kovalevich Date: Tue, 17 Jan 2017 12:24:23 +0200 Subject: [PATCH 075/253] iOS 10.* detect CFNetwork --- regexes.yaml | 4 +++- tests/test_os.yaml | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 7e52ec4b..602dc8b1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -855,6 +855,9 @@ os_parsers: - regex: '(CF)(Network)/758\.(\d)' os_replacement: 'iOS' os_v1_replacement: '9' + - regex: '(CF)(Network)/808\.(\d)' + os_replacement: 'iOS' + os_v1_replacement: '10' ########## # CFNetwork iOS Apps @@ -886,7 +889,6 @@ os_parsers: - regex: 'CFNetwork/8.* Darwin/(16)\.\d+' os_replacement: 'iOS' os_v1_replacement: '10' - os_v2_replacement: '0' # iOS Apps - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 04f5c0e1..df8cfdcb 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2209,6 +2209,20 @@ test_cases: patch: patch_minor: + - user_agent_string: 'TestApp/1.0 CFNetwork/808.1.4 Darwin/16.1.0' + family: 'iOS' + major: '10' + minor: '1' + patch: + patch_minor: + + - user_agent_string: 'TestApp/1.0 CFNetwork/808.2.16 Darwin/16.3.0' + family: 'iOS' + major: '10' + minor: '2' + patch: + patch_minor: + - user_agent_string: 'TestApp-tvOS/1.0-1' family: 'tvOS' major: '1' From 980832e2588340c3519bbdc40ec1ac6a35a3a775 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 28 Dec 2016 04:51:42 +0900 Subject: [PATCH 076/253] iOS wrongly detected as Android for Outlook-iOS-Android --- regexes.yaml | 4 ++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 840253ed..d566a184 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -640,6 +640,10 @@ os_parsers: - regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)' + # Again a MS-special one: iPhone.*Outlook-iOS-Android/x.x is erroneously detected as Android + - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?.*Outlook-iOS-Android' + os_replacement: 'iOS' + ########## # Android # can actually detect rooted android os. do we care? diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 50ee5e24..d4abcb70 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2321,3 +2321,10 @@ test_cases: patch: '74257' patch_minor: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) Outlook-iOS-Android/1.0 Mobile/13G35 Safari/601.1.46")' + family: 'iOS' + major: '9' + minor: '3' + patch: '4' + patch_minor: + From a92045754ef7ce8a3cccfda2db601a0eb69d3f03 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 28 Dec 2016 04:56:20 +0900 Subject: [PATCH 077/253] detecting Outlook-iOS-Android --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index d566a184..83e7f594 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -346,7 +346,7 @@ user_agent_parsers: - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 03a61974..d71aeed0 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6981,3 +6981,9 @@ test_cases: minor: '83' patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) Outlook-iOS-Android/1.0 Mobile/13G35 Safari/601.1.46")' + family: 'Outlook-iOS-Android' + major: '1' + minor: '0' + patch: + From 48e4481d18cdaa508d0f26b27493ea3ee482ea98 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 18 Jan 2017 04:57:56 +0900 Subject: [PATCH 078/253] fix os for chrome on mac os --- regexes.yaml | 2 +- tests/test_os.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 83e7f594..3e2e15d1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -762,7 +762,7 @@ os_parsers: # @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions # @ref: http://www.puredarwin.org/curious/versions ########## - - regex: '((?:Mac ?|; )OS X)[\s/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)' + - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)' os_replacement: 'Mac OS X' # Leopard - regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index d4abcb70..7ef45653 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2328,3 +2328,10 @@ test_cases: patch: '4' patch_minor: + - user_agent_string: 'Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_11_6)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/52.0.2743.116+Safari/537.36' + family: 'Mac OS X' + major: '10' + minor: '11' + patch: '6' + patch_minor: + From 3d0c78236072ceed368eb826c48c70c17b19de25 Mon Sep 17 00:00:00 2001 From: Alon Salant Date: Fri, 20 Jan 2017 17:41:28 -0800 Subject: [PATCH 079/253] Add regex for PingdomTMS user agent --- regexes.yaml | 3 +++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 3e2e15d1..3cab9ec3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -8,6 +8,9 @@ user_agent_parsers: # Pingdom - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)' family_replacement: 'PingdomBot' + # 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' + - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'PingdomBot' # Facebook - regex: '(facebookexternalhit)/(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index d71aeed0..fe44bf4d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -786,6 +786,12 @@ test_cases: minor: '4' patch: + - user_agent_string: 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' + family: 'PingdomBot' + major: '0' + minor: '8' + patch: '5' + - user_agent_string: 'Mozilla/3.0 (Planetweb/2.100 JS SSL US; Dreamcast US)' family: 'Planetweb' major: '2' From 4ee3aaf1a1a470b58ea28a53f799885fa42ebf40 Mon Sep 17 00:00:00 2001 From: Alon Salant Date: Thu, 2 Feb 2017 13:58:06 -0800 Subject: [PATCH 080/253] Recognize PingdomTMS as a bot --- regexes.yaml | 2 +- tests/test_device.yaml | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 3cab9ec3..4d8b7024 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4819,7 +4819,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index bf1d3afe..2e2f5f7b 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -635,6 +635,16 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I717 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' family: 'Samsung SGH-I717' brand: 'Samsung' From 31d0db6fdfbb0233a57f0960494d9a11cb4ced7a Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 4 Feb 2017 01:12:07 +0900 Subject: [PATCH 081/253] Adding Opera-Neon --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 4d8b7024..8c86bc1a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -149,6 +149,10 @@ user_agent_parsers: - regex: '(OPiOS)/(\d+).(\d+).(\d+)' family_replacement: 'Opera Mini' + # Opera Neon + - regex: 'Chrome/.+( MMS)/(\d+).(\d+).(\d+)' + family_replacement: 'Opera Neon' + # Palm WebOS looks a lot like Safari. - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'webOS Browser' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index fe44bf4d..e80c1929 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6993,3 +6993,14 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36 MMS/1.0.2459.0' + family: 'Opera Neon' + major: '1' + minor: '0' + patch: '2459' + + - user_agent_string: 'PANTECH-EUROPA-U4000-orange/1.0 Obigo/Q04C MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1' + family: 'Obigo' + major: '04' + minor: + patch: From 897f9e90be08bc1c27520618b35ee178213efabb Mon Sep 17 00:00:00 2001 From: Krzysztof Jurewicz Date: Sat, 11 Feb 2017 10:11:54 +0100 Subject: [PATCH 082/253] Update Pale Moon regex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pale Moon does not consider itself a “Firefox variant”, though it is a descendant of Firefox. From FAQ: “Pale Moon is a completely separate product with its own roadmap, direction, versioning and release schedule, unlike all other »Firefox-based« browsers out there.” Current versions allow choosing one of the three “user agent modes” which differ only by the UA string: • native; • Gecko compatibility; • Firefox compatibility. --- regexes.yaml | 6 ++++-- tests/test_ua.yaml | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 8c86bc1a..481bb26c 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -66,9 +66,11 @@ user_agent_parsers: - regex: '\[(Pinterest)/[^\]]+\]' - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' + # Pale Moon + - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' + family_replacement: 'Pale Moon' + # Firefox - - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?' - family_replacement: 'Pale Moon (Firefox Variant)' - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)' family_replacement: 'Firefox Mobile' - regex: '(Fennec)/(\d+)\.(\d+)(pre)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index e80c1929..18173521 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -769,11 +769,29 @@ test_cases: patch: '2' - user_agent_string: 'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20110407 Firefox/4.0.3 PaleMoon/4.0.3' - family: 'Pale Moon (Firefox Variant)' + family: 'Pale Moon' major: '4' minor: '0' patch: '3' + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:3.0) Goanna/20170207 PaleMoon/27.1.0' + family: 'Pale Moon' + major: '27' + minor: '1' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:3.0) Gecko/20100101 Goanna/20170207 PaleMoon/27.1.0' + family: 'Pale Moon' + major: '27' + minor: '1' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:45.9) Gecko/20100101 Goanna/3.0 Firefox/45.9 PaleMoon/27.1.0' + family: 'Pale Moon' + major: '27' + minor: '1' + patch: '0' + - user_agent_string: 'Mozilla/5.0 (LG-T500 AppleWebkit/531 Browser/Phantom/V2.0 Widget/LGMW/3.0 MMS/LG-MMS-V1.0/1.2 Java/ASVM/1.1 Profile/MIDP-2.1 Configuration/CLDC-1.1)' family: 'Phantom Browser' major: '2' From 1d2f5d7bb618524b487bca3471cb024391ce19b7 Mon Sep 17 00:00:00 2001 From: Maria Gullickson Date: Wed, 1 Mar 2017 15:42:54 -0500 Subject: [PATCH 083/253] add RCA, Pixel and OnePlus devices --- regexes.yaml | 26 ++++++++++++++++++++++++++ tests/test_device.yaml | 19 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 481bb26c..57ca10e8 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1967,6 +1967,10 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Google' model_replacement: '$1' + - regex: '; *(Pixel \w+) Build' + device_replacement: '$1' + brand_replacement: 'Google' + model_replacement: '$1' ######### # Gigabyte @@ -3053,6 +3057,19 @@ device_parsers: brand_replacement: 'Odys' model_replacement: '$1' + ######### + # OnePlus + # @ref https://oneplus.net/ + ######### + - regex: '; (ONE [a-zA-Z]\d+) Build/' + device_replacement: 'OnePlus $1' + brand_replacement: 'OnePlus' + model_replacement: '$1' + - regex: '; (ONEPLUS [a-zA-Z]\d+) Build/' + device_replacement: 'OnePlus $1' + brand_replacement: 'OnePlus' + model_replacement: '$1' + ######### # Orion # @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html @@ -3293,6 +3310,15 @@ device_parsers: brand_replacement: 'Quanta' model_replacement: '$1' + ######### + # RCA + # @ref: http://rcamobilephone.com/ + ######### + - regex: '; (RCT\w+) Build/' + device_replacement: '$1' + brand_replacement: 'RCA' + model_replacement: '$1' + ######### # Rockchip # @ref: http://www.rock-chips.com/a/cn/product/index.html diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 2e2f5f7b..4e4c5c86 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79920,3 +79920,22 @@ test_cases: brand: 'Huawei' model: 'ATH-AL00' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; ONEPLUS A3010 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36' + family: 'OnePlus ONEPLUS A3010' + brand: 'OnePlus' + model: 'ONEPLUS A3010' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.1.1; ONE E1003 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.91 Mobile Safari/537.36' + family: 'OnePlus ONE E1003' + brand: 'OnePlus' + model: 'ONE E1003' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36' + family: 'Pixel C' + brand: 'Google' + model: 'Pixel C' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0; RCT6773W22B Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85' + family: 'RCT6773W22B' + brand: 'RCA' + model: 'RCT6773W22B' From f3420221939b0aea4eb71c655aa1ed2149eb25dd Mon Sep 17 00:00:00 2001 From: Nabil Benabbou Date: Tue, 21 Feb 2017 14:46:19 +0100 Subject: [PATCH 084/253] Introduce Whatsapp bot regex --- regexes.yaml | 8 ++++++-- tests/test_ua.yaml | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 57ca10e8..37eb7bfc 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -27,11 +27,15 @@ user_agent_parsers: # Twitter - regex: '(Twitterbot)/(\d+)\.(\d+)' family_replacement: 'TwitterBot' + + # WhatsApp + - regex: '(WhatsApp)/(\d+)\.(\d+).(\d+)' + family_replacement: 'WhatsApp' # Bots Pattern '/name-0.0' - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Bots Pattern 'name/0.0' - - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|WhatsApp|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # MSIECrawler - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' @@ -41,7 +45,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 18173521..665e7632 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -275,6 +275,12 @@ test_cases: major: '1' minor: '0' patch: + + - user_agent_string: 'WhatsApp/2.17.70 W' + family: 'WhatsApp' + major: '2' + minor: '17' + patch: '70' - user_agent_string: 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1pre) Gecko/20090717 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1pre' family: 'Firefox (Shiretoko)' From b97aafdeefc9a21fb45771c2ac0b4f62c9359d28 Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 3 Mar 2017 01:45:35 +0900 Subject: [PATCH 085/253] fix WhatsApp bot; Adding to device_parsers spider hack --- regexes.yaml | 8 ++------ tests/test_device.yaml | 7 +++++++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 37eb7bfc..571b0dfc 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -27,15 +27,11 @@ user_agent_parsers: # Twitter - regex: '(Twitterbot)/(\d+)\.(\d+)' family_replacement: 'TwitterBot' - - # WhatsApp - - regex: '(WhatsApp)/(\d+)\.(\d+).(\d+)' - family_replacement: 'WhatsApp' # Bots Pattern '/name-0.0' - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Bots Pattern 'name/0.0' - - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|WhatsApp|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # MSIECrawler - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' @@ -4855,7 +4851,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|WhatsApp)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 4e4c5c86..9f63ef19 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79939,3 +79939,10 @@ test_cases: family: 'RCT6773W22B' brand: 'RCA' model: 'RCT6773W22B' + + - user_agent_string: 'WhatsApp/2.17.70 W' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + From 721ebdfe46b57e814fa032d172d9a9725db4f495 Mon Sep 17 00:00:00 2001 From: jnozsc Date: Thu, 2 Mar 2017 10:18:05 -0800 Subject: [PATCH 086/253] add masscan as bot --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 571b0dfc..cc529267 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -41,7 +41,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' From 8cc21d3b4afdafc36b905a11fc535dae72329f72 Mon Sep 17 00:00:00 2001 From: jnozsc Date: Thu, 9 Mar 2017 14:56:35 -0800 Subject: [PATCH 087/253] update unit test --- regexes.yaml | 2 +- tests/test_ua.yaml | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index cc529267..85cf8448 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4851,7 +4851,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|WhatsApp)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|WhatsApp|masscan)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 665e7632..42c11df6 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -275,7 +275,7 @@ test_cases: major: '1' minor: '0' patch: - + - user_agent_string: 'WhatsApp/2.17.70 W' family: 'WhatsApp' major: '2' @@ -7028,3 +7028,9 @@ test_cases: major: '04' minor: patch: + + - user_agent_string: 'masscan/1.0 (https://github.com/robertdavidgraham/masscan)' + family: 'masscan' + major: '1' + minor: + patch: From 03c088b50f0b6ec1c0df23284bbc58f74c50b089 Mon Sep 17 00:00:00 2001 From: jnozsc Date: Thu, 9 Mar 2017 15:04:40 -0800 Subject: [PATCH 088/253] add missing minor --- tests/test_ua.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 42c11df6..a6a373b4 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7032,5 +7032,5 @@ test_cases: - user_agent_string: 'masscan/1.0 (https://github.com/robertdavidgraham/masscan)' family: 'masscan' major: '1' - minor: + minor: '0' patch: From 82bfad2f7ca2e14ff94f7e7e220c2312e2f99a36 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 11 Mar 2017 15:06:47 +0900 Subject: [PATCH 089/253] add testcase device masscan --- tests/test_device.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 9f63ef19..2a70c980 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79945,4 +79945,8 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'masscan/1.0 (https://github.com/robertdavidgraham/masscan)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' From 8319ee986517fa69a81b74e8709772a9abf5b11f Mon Sep 17 00:00:00 2001 From: rogeriopvl Date: Wed, 15 Mar 2017 12:04:33 +0000 Subject: [PATCH 090/253] Add Headless Chrome detection Although Headless Chrome is just a `--headless` flag for Chrome, the user-agent is different, so we can treat it as a special browser. This flag is only available on Linux for now, and the UA has no version included. Related with: https://github.com/karma-runner/karma/issues/2603 --- regexes.yaml | 6 ++++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 85cf8448..00e85ab6 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -354,6 +354,12 @@ user_agent_parsers: # @ref: http://www.dolphin.com - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' + # Headless Chrome + # https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md + # Currently only available on Linux + - regex: 'HeadlessChrome' + family_replacement: 'HeadlessChrome' + # Browser/major_version.minor_version - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a6a373b4..36084920 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6621,6 +6621,12 @@ test_cases: minor: '7' patch: '10' + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36' + family: 'HeadlessChrome' + major: + minor: + patch: + - user_agent_string: 'Roku/DVP-6.2 (096.02E06005A)' family: 'Roku' major: '6' From 1be33bb9dabd85de3bf0e4a89a95185a1530bebe Mon Sep 17 00:00:00 2001 From: Ryan Cruz Date: Fri, 24 Mar 2017 09:17:53 -0700 Subject: [PATCH 091/253] Add Catchpoint family and associated test --- regexes.yaml | 3 +++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 00e85ab6..4d5fbb7e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1,6 +1,9 @@ user_agent_parsers: #### SPECIAL CASES TOP #### + # This applies to Catchpoint user agents, desktop and mobile + - regex: '(Catchpoint)' + # @note: iOS / OSX Applications - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' family_replacement: 'CFNetwork' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 36084920..089697cf 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -192,6 +192,12 @@ test_cases: minor: '8' patch: '5' + - user_agent_string: 'Mozilla/5.0 (compatible; Windows NT 6.1; Catchpoint) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' + family: 'Catchpoint' + major: + minor: + patch: + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; chromeframe/11.0.660.0)' family: 'Chrome Frame' major: '11' From cb6ac3dda31cf202c04f79c871c680ebdf1b1a2b Mon Sep 17 00:00:00 2001 From: Sean Dilda Date: Sat, 25 Mar 2017 20:22:07 -0400 Subject: [PATCH 092/253] Handle device match for Huawei EVA-AL10 --- regexes.yaml | 2 +- tests/test_device.yaml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 00e85ab6..2c8bb5e7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2129,7 +2129,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Huawei' model_replacement: '$1' - - regex: '; *([^;]+) Build/Huawei' + - regex: '; *([^;]+) Build/(?:Huawei|HUAWEI)' device_replacement: '$1' brand_replacement: 'Huawei' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 2a70c980..a12c0008 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79950,3 +79950,8 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; EVA-AL10 Build/HUAWEIEVA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' + family: 'EVA-AL10' + brand: 'Huawei' + model: 'EVA-AL10' + From 4fb556e84804144b29f49f52f550d3f6d14cd9d0 Mon Sep 17 00:00:00 2001 From: Sean Dilda Date: Sat, 25 Mar 2017 21:48:56 -0400 Subject: [PATCH 093/253] Some newer CFNetwork applications on OS X were being detected as running iOS and/or being an iOS-Device. This prevents those false detections --- regexes.yaml | 19 +++++++++++++++++++ tests/test_device.yaml | 9 +++++++++ tests/test_os.yaml | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 00e85ab6..b5a540b7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -871,6 +871,10 @@ os_parsers: os_replacement: 'Mac OS X' os_v1_replacement: '10' os_v2_replacement: '10' + - regex: '(CF)(Network)/(760)\.(\d)' + os_replacement: 'Mac OS X' + os_v1_replacement: '10' + os_v2_replacement: '11' - regex: '(CF)(Network)/758\.(\d)' os_replacement: 'iOS' os_v1_replacement: '9' @@ -879,6 +883,18 @@ os_parsers: os_v1_replacement: '10' ########## + # CFNetwork macOS Apps (must be before CFNetwork iOS Apps + # @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history + ########## + - regex: 'CFNetwork/.* Darwin/16\.\d+.*\(x86_64\)' + os_replacement: 'Mac OS X' + os_v1_replacement: '10' + os_v2_replacement: '12' + - regex: 'CFNetwork/8.* Darwin/15\.\d+.*\(x86_64\)' + os_replacement: 'Mac OS X' + os_v1_replacement: '10' + os_v2_replacement: '11' + ########## # CFNetwork iOS Apps # @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history ########## @@ -4430,6 +4446,9 @@ device_parsers: device_replacement: '$1$2,$3' brand_replacement: 'Apple' model_replacement: '$1$2,$3' + # @note: newer desktop applications don't show device info + # This is here so as to not have them recorded as iOS-Device + - regex: 'CFNetwork/.* Darwin/\d+\.\d+\.\d+ \(x86_64\)' # @note: iOS applications do not show device info - regex: 'CFNetwork/.* Darwin/\d' device_replacement: 'iOS-Device' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 2a70c980..b1703259 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79950,3 +79950,12 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'MobileSafari/602.1 CFNetwork/808.1.4 Darwin/16.1.0' + family: 'iOS-Device' + brand: 'Apple' + model: 'iOS-Device' + + - user_agent_string: 'Safari/12602.2.14.0.7 CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)' + family: 'Other' + brand: + model: diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 7ef45653..b348af9e 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2335,3 +2335,9 @@ test_cases: patch: '6' patch_minor: + - user_agent_string: 'Safari/12602.2.14.0.7 CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)' + family: 'Mac OS X' + major: '10' + minor: '12' + patch: + patch_minor: From cf3e378e45802eca7bca8a15dabd1775a9ab4c22 Mon Sep 17 00:00:00 2001 From: Justin Leider Date: Tue, 18 Apr 2017 11:29:08 -0400 Subject: [PATCH 094/253] Add statuscake regex and tests --- regexes.yaml | 6 +++++- tests/test_device.yaml | 5 +++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 78eef554..a348d5a9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -12,6 +12,10 @@ user_agent_parsers: - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'PingdomBot' + #StatusCake + - regex: '(\(StatusCake\))' + family_replacement: 'StatusCakeBot' + # Facebook - regex: '(facebookexternalhit)/(\d+)\.(\d+)' family_replacement: 'FacebookBot' @@ -4876,7 +4880,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|WhatsApp|masscan)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 9742fad5..4ad6a927 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -645,6 +645,11 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I717 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' family: 'Samsung SGH-I717' brand: 'Samsung' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 36084920..3d3c7edb 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -816,6 +816,12 @@ test_cases: minor: '8' patch: '5' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)' + family: 'StatusCakeBot' + major: + minor: + patch: + - user_agent_string: 'Mozilla/3.0 (Planetweb/2.100 JS SSL US; Dreamcast US)' family: 'Planetweb' major: '2' From 4a09c58e279144261f7d9eccc8f4f664686aa73c Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 27 Apr 2017 04:56:39 +0900 Subject: [PATCH 095/253] fix undefined device for CFNetwork Darwin rule --- regexes.yaml | 3 +++ tests/test_device.yaml | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index a348d5a9..8a3bc88d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4453,6 +4453,9 @@ device_parsers: # @note: newer desktop applications don't show device info # This is here so as to not have them recorded as iOS-Device - regex: 'CFNetwork/.* Darwin/\d+\.\d+\.\d+ \(x86_64\)' + device_replacement: 'Mac' + brand_replacement: 'Apple' + model_replacement: 'Mac' # @note: iOS applications do not show device info - regex: 'CFNetwork/.* Darwin/\d' device_replacement: 'iOS-Device' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 4ad6a927..f93e8d2a 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79961,9 +79961,14 @@ test_cases: model: 'iOS-Device' - user_agent_string: 'Safari/12602.2.14.0.7 CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)' - family: 'Other' - brand: - model: + family: 'Mac' + brand: 'Apple' + model: 'Mac' + + - user_agent_string: 'netbarrierd/572 CFNetwork/673.5 Darwin/13.4.0 (x86_64) (MacBookPro11%2C1)' + family: 'MacBookPro11,1' + brand: 'Apple' + model: 'MacBookPro11,1' - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; EVA-AL10 Build/HUAWEIEVA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' family: 'EVA-AL10' From 04278403199b8b7c72fcf0e87703401480d6082a Mon Sep 17 00:00:00 2001 From: Rob Cowie Date: Sat, 1 Apr 2017 09:44:53 +0100 Subject: [PATCH 096/253] Classify Google Web Preview as a Spider --- regexes.yaml | 9 +++++++++ tests/test_device.yaml | 9 +++++++++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 12 ++++++++++++ 4 files changed, 37 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 8a3bc88d..bf44d40d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4889,6 +4889,15 @@ device_parsers: brand_replacement: 'Spider' model_replacement: 'Desktop' + ########## + # Google Web Preview Spider + ########## + - regex: 'Google Web Preview' + regex_flag: 'i' + device_replacement: 'Spider' + brand_replacement: 'Spider' + model_replacement: 'Desktop' + ########## # Generic Feature Phone # take care to do case insensitive matching diff --git a/tests/test_device.yaml b/tests/test_device.yaml index f93e8d2a..87c5ed0c 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79975,3 +79975,12 @@ test_cases: brand: 'Huawei' model: 'EVA-AL10' + - user_agent_string: 'Google Web Preview' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index b348af9e..6963462a 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -420,6 +420,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' + family: 'Linux' + major: + minor: + patch: + patch_minor: + - user_agent_string: 'Bunjalloo/0.7.6(Nintendo DS;U;en)' family: 'Other' major: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 3d3c7edb..8ce39629 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -2343,6 +2343,18 @@ test_cases: minor: patch: + - user_agent_string: 'Google Web Preview' + family: 'Other' + major: + minor: + patch: + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' + family: 'Chrome' + major: '27' + minor: '0' + patch: + - user_agent_string: 'HiddenMarket-1.0-beta (www.hiddenmarket.net/crawler.php)' family: 'HiddenMarket' major: From 075d55fb1ed1e1f6dcbcdf4049a7de432aef0d43 Mon Sep 17 00:00:00 2001 From: Rob Cowie Date: Tue, 2 May 2017 17:58:12 +0100 Subject: [PATCH 097/253] Move GWP regex to the combined spiders pattern. --- regexes.yaml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index bf44d40d..b02af504 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4883,16 +4883,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan)' - regex_flag: 'i' - device_replacement: 'Spider' - brand_replacement: 'Spider' - model_replacement: 'Desktop' - - ########## - # Google Web Preview Spider - ########## - - regex: 'Google Web Preview' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' From 6dfa5fbe00423922f13fbf08da3ba4e5b4f9197b Mon Sep 17 00:00:00 2001 From: Ondrej Kokes Date: Sat, 20 May 2017 14:19:32 +0200 Subject: [PATCH 098/253] add support for Coc Coc --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 8a3bc88d..f6f1197f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -232,6 +232,10 @@ user_agent_parsers: - regex: '(SamsungBrowser)/(\d+)\.(\d+)' family_replacement: 'Samsung Internet' + # Coc Coc browser, based on Chrome (used in Vietnam) + - regex: '(coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Coc Coc' + # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Baidu Browser' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 3d3c7edb..b2be3b7a 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7046,3 +7046,21 @@ test_cases: major: '1' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/42.0 CoRom/36.0.1985.144 Chrome/36.0.1985.144 Safari/537.36' + family: 'Coc Coc' + major: '42' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/49.0 Chrome/43.0.2357.138 Safari/537.36' + family: 'Coc Coc' + major: '49' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/50.0.125 Chrome/44.0.2403.125 Safari/537.36' + family: 'Coc Coc' + major: '50' + minor: '0' + patch: '125' From f1657a6e4c41acba9bcbc92d5d9129193da53249 Mon Sep 17 00:00:00 2001 From: Ondrej Kokes Date: Sat, 20 May 2017 14:53:25 +0200 Subject: [PATCH 099/253] add support for Seznam.cz --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 8a3bc88d..03b4411b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -232,6 +232,10 @@ user_agent_parsers: - regex: '(SamsungBrowser)/(\d+)\.(\d+)' family_replacement: 'Samsung Internet' + # Seznam.cz browser (based on WebKit) + - regex: '(SznProhlizec)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Seznam.cz' + # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Baidu Browser' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 3d3c7edb..f8c73c4e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7046,3 +7046,9 @@ test_cases: major: '1' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 SznProhlizec/3.8.4 NWjs/0.19.6' + family: 'Seznam.cz' + major: '3' + minor: '8' + patch: '4' From 8729e1c78c5e12741fcc5cc8e0a8c008eba01518 Mon Sep 17 00:00:00 2001 From: Ondrej Kokes Date: Sat, 20 May 2017 15:06:13 +0200 Subject: [PATCH 100/253] Seznam.cz iOS app does not include patch info --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 03b4411b..e3a8fbce 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -233,7 +233,7 @@ user_agent_parsers: family_replacement: 'Samsung Internet' # Seznam.cz browser (based on WebKit) - - regex: '(SznProhlizec)/(\d+)\.(\d+)\.(\d+)' + - regex: '(SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'Seznam.cz' # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index f8c73c4e..5202f604 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7052,3 +7052,9 @@ test_cases: major: '3' minor: '8' patch: '4' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 SznProhlizec/4.4i' + family: 'Seznam.cz' + major: '4' + minor: '4' + patch: From 19a3b4e970f4ecba5e92806f15919f2410ae742f Mon Sep 17 00:00:00 2001 From: omar Date: Fri, 12 May 2017 11:10:28 -0500 Subject: [PATCH 101/253] Fix Slack, HipChat, and a few android browsers. Fix Slack Desktop Client detection on Windows and Mac. Add support for HipChat on Mac and Windows. Fix Macthon and Crosswalk support on Android. --- regexes.yaml | 26 ++++++++++++++++++-------- tests/test_ua.yaml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 8a3bc88d..47a78a6e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -238,6 +238,13 @@ user_agent_parsers: - regex: '(FlyFlow)/(\d+)\.(\d+)' family_replacement: 'Baidu Explorer' + # MxBrowser is Maxthon. Must go before Mobile Chrome for Android + - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?' + family_replacement: 'Maxthon' + + # Crosswalk must go before Mobile Chrome for Android + - regex: '(Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)' + # Chrome Mobile - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' @@ -286,16 +293,22 @@ user_agent_parsers: # AOL Browser (IE-based) - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)' - # MxBrowser is Maxthon - - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?' - family_replacement: 'Maxthon' - #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### + + # Slack desktop client (needs to be before Apple Mail, Electron, and Chrome as it gets wrongly detected on Mac OS otherwise) + - regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Slack Desktop Client' + + # HipChat provides a version on Mac, but not on Windows. + # Needs to be before Chrome on Windows, and AppleMail on Mac. + - regex: '(HipChat)/?(\d+)?' + family_replacement: 'HipChat Desktop Client' + # Browser/major_version.minor_version.beta_version - - regex: '\b(MobileIron|Crosswalk|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' @@ -418,9 +431,6 @@ user_agent_parsers: - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7' family_replacement: 'IE Large Screen' - # Slack desktop client (needs to be before Apple Mail as it gets wrongly detected on Mac OS otherwise) - - regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)' - family_replacement: 'Slack Desktop Client' #### END MAIN CASES #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 3d3c7edb..3953d9fa 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6741,6 +6741,12 @@ test_cases: minor: '43' patch: '343' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Z831 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Crosswalk/11.45.2454.20160425 Mobile Safari/537.36' + family: 'Crosswalk' + major: '11' + minor: '45' + patch: '2454' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.2; GT-S7710 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile' family: 'Chrome Mobile' major: '18' @@ -6777,6 +6783,30 @@ test_cases: minor: '0' patch: '3' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) AtomShell/2.6.0 Chrome/56.0.2924.87 Electron/1.6.3 Safari/537.36 MacAppStore/16.5.0 Slack_SSB/2.6.0' + family: 'Slack Desktop Client' + major: '2' + minor: '6' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Slack/2.6.0-beta18998559 Chrome/56.0.2924.87 AtomShell/1.6.3 Safari/537.36 Slack_SSB/2.6.0' + family: 'Slack Desktop Client' + major: '2' + minor: '6' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) HipChat/732 (modern)' + family: 'HipChat Desktop Client' + major: '732' + minor: + patch: + + - user_agent_string: 'HipChat Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.7.0 Chrome/49.0.2623.111 Safari/537.36' + family: 'HipChat Desktop Client' + major: + minor: + patch: + - user_agent_string: 'Microsoft-CryptoAPI/6.1' family: 'Microsoft-CryptoAPI' major: '6' @@ -6891,6 +6921,12 @@ test_cases: minor: '4' patch: '5' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930P Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 MxBrowser/4.5.10.7000' + family: 'Maxthon' + major: '4' + minor: '5' + patch: '10' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.6 (KHTML, like Gecko) Chrome/18.0.1025.133 Safari/537.6 Midori/0.5' family: 'Midori' major: '0' From b5093589b703f4024bee60764f8880ff79332ffc Mon Sep 17 00:00:00 2001 From: Chris Tennant Date: Wed, 24 May 2017 12:38:34 -0700 Subject: [PATCH 102/253] add Qwantify spider --- regexes.yaml | 4 ++-- tests/test_device.yaml | 5 +++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 8e5e4007..3c6144a4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -45,7 +45,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' @@ -4897,7 +4897,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview)' + - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 87c5ed0c..7057c593 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79984,3 +79984,8 @@ test_cases: family: 'Spider' brand: 'Spider' model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (compatible; Qwantify/2.4w; +https://www.qwant.com/)/2.4w' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 928ac1dc..2fd455c8 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7112,3 +7112,9 @@ test_cases: major: '50' minor: '0' patch: '125' + + - user_agent_string: 'Mozilla/5.0 (compatible; Qwantify/2.4w; +https://www.qwant.com/)/2.4w' + family: 'Qwantify' + major: "2" + minor: "4" + patch: From 1c2ac3bde7a719aea6fcf75daae297ec1b31ec63 Mon Sep 17 00:00:00 2001 From: Ryan Cruz Date: Tue, 30 May 2017 13:37:24 -0700 Subject: [PATCH 103/253] Modified Catchpoint regex to account for Catchpoint or Catchpoint bot --- regexes.yaml | 5 +---- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 4d5fbb7e..ddde530d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1,9 +1,6 @@ user_agent_parsers: #### SPECIAL CASES TOP #### - # This applies to Catchpoint user agents, desktop and mobile - - regex: '(Catchpoint)' - # @note: iOS / OSX Applications - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' family_replacement: 'CFNetwork' @@ -44,7 +41,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 089697cf..01e45e99 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -198,6 +198,12 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (compatible; Windows NT 6.1; Catchpoint bot) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' + family: 'Catchpoint bot' + major: + minor: + patch: + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; chromeframe/11.0.660.0)' family: 'Chrome Frame' major: '11' From db059b0f3c5848bf4131064b5a671379804e3d11 Mon Sep 17 00:00:00 2001 From: Ryan Cruz Date: Tue, 30 May 2017 13:46:47 -0700 Subject: [PATCH 104/253] Resolve conflicts --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index ddde530d..412a11eb 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -41,7 +41,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' From 2aa93b03498b79c2cd1e469dd0d6def4871b9999 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 25 May 2017 13:47:54 +0900 Subject: [PATCH 105/253] [#136] Fixing detection error for Lumia --- regexes.yaml | 2 +- tests/test_device.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index ff53db09..d97ecb06 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4264,7 +4264,7 @@ device_parsers: ######### # Noka Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*(\d{3,}[^;\)]*)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:rv:11; )?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*(\d{3,}[^;\)]*)' device_replacement: 'Lumia $1' brand_replacement: 'Nokia' model_replacement: 'Lumia $1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 7057c593..b3572d4d 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79989,3 +79989,9 @@ test_cases: family: 'Spider' brand: 'Spider' model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; rv:11; NOKIA; Lumia 920) like Gecko' + family: 'Lumia 920' + brand: 'Nokia' + model: 'Lumia 920' + From 57bc006321d3e0f72e775b9a281d7ffb8e0c9080 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 25 May 2017 13:55:03 +0900 Subject: [PATCH 106/253] [#233] fix for Edge 12 --- regexes.yaml | 2 +- tests/test_ua.yaml | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index d97ecb06..3e70d181 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -361,7 +361,7 @@ user_agent_parsers: - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)' # Edge/major_version.minor_version - - regex: '(Edge)/(\d+)\.(\d+)' + - regex: '(Edge)/(\d+)(?:\.(\d+))?' # Brave Browser https://brave.com/ - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a9654a8b..45bc1f36 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7127,6 +7127,13 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (compatible; Qwantify/2.4w; +https://www.qwant.com/)/2.4w' family: 'Qwantify' - major: "2" - minor: "4" + major: '2' + minor: '4' + patch: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12' + family: 'Edge' + major: '12' + minor: patch: + From a114ec49927bba5766a4b97b288a06be0bdb37b9 Mon Sep 17 00:00:00 2001 From: shaharmor Date: Tue, 20 Jun 2017 16:56:35 +0300 Subject: [PATCH 107/253] Add support for Chrome Mobile WebView detection --- regexes.yaml | 2 ++ tests/test_ua.yaml | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index d97ecb06..c3c7d802 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -250,6 +250,8 @@ user_agent_parsers: - regex: '(Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)' # Chrome Mobile + - regex: '; wv\).+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Chrome Mobile WebView' - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile' - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a9654a8b..89d58c33 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -210,6 +210,12 @@ test_cases: minor: '0' patch: '660' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.1.2; Nexus 5X Build/N2G47W; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36' + family: 'Chrome Mobile WebView' + major: '58' + minor: '0' + patch: '3029' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.2; Galaxy Nexus Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Chrome Mobile' major: '18' @@ -6822,14 +6828,14 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) HipChat/732 (modern)' family: 'HipChat Desktop Client' major: '732' - minor: - patch: + minor: + patch: - user_agent_string: 'HipChat Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.7.0 Chrome/49.0.2623.111 Safari/537.36' family: 'HipChat Desktop Client' - major: - minor: - patch: + major: + minor: + patch: - user_agent_string: 'Microsoft-CryptoAPI/6.1' family: 'Microsoft-CryptoAPI' From 0d2c5ddb07541b0492f39e77fecaa39a93f8776e Mon Sep 17 00:00:00 2001 From: Ondrej Kokes Date: Wed, 21 Jun 2017 13:36:18 +0200 Subject: [PATCH 108/253] Missed a property during merge, added back now --- tests/test_ua.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index be8c7d91..737308c8 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7118,6 +7118,7 @@ test_cases: family: 'Seznam.cz' major: '4' minor: '4' + patch: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/42.0 CoRom/36.0.1985.144 Chrome/36.0.1985.144 Safari/537.36' family: 'Coc Coc' From 3153c2f2ae72cf52cb79fa5374373e7af3aec717 Mon Sep 17 00:00:00 2001 From: Denis Gladkikh Date: Tue, 27 Jun 2017 08:52:36 -0700 Subject: [PATCH 109/253] Add several popular RSS bots to regexes.yaml --- regexes.yaml | 2 +- tests/test_ua.yaml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index ec34dca3..3beb6fbd 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -45,7 +45,7 @@ user_agent_parsers: - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c2892fa8..f18bde62 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7156,3 +7156,33 @@ test_cases: minor: patch: + - user_agent_string: 'Bloglovin/1.0 (http://www.bloglovin.com; 1000 subscribers)' + family: 'Bloglovin' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Feedbin feed-id:1033517 - 1000 subscribers' + family: 'Feedbin' + major: + minor: + patch: + + - user_agent_string: 'Tiny Tiny RSS/16.3 (http://tt-rss.org/)' + family: 'Tiny Tiny RSS' + major: '16' + minor: '3' + patch: + + - user_agent_string: 'Mtps Feed Aggregation System' + family: 'Mtps Feed Aggregation System' + major: + minor: + patch: + + - user_agent_string: 'Stringer' + family: 'Stringer' + major: + minor: + patch: + From ed4c2b5ad8c18be1659d8b4ab8af2be2165288a0 Mon Sep 17 00:00:00 2001 From: Jayden Meyer Date: Wed, 12 Jul 2017 09:30:26 +1000 Subject: [PATCH 110/253] Added new relic pinger bot --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 3beb6fbd..ac184463 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -12,6 +12,10 @@ user_agent_parsers: - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'PingdomBot' + # New Relic Pinger + - regex: '(NewRelicPinger)/(\d+)\.(\d+)' + family_replacement: 'NewRelicPingerBot' + #StatusCake - regex: '(\(StatusCake\))' family_replacement: 'StatusCakeBot' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index f18bde62..bf2b255a 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -834,6 +834,12 @@ test_cases: minor: '8' patch: '5' + - user_agent_string: 'NewRelicPinger/1.0 (1025794)' + family: 'NewRelicPingerBot' + major: '1' + minor: '0' + patch: + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4 (StatusCake)' family: 'StatusCakeBot' major: From 5e03d3cd4926fd68f11680331f13371712c6ef84 Mon Sep 17 00:00:00 2001 From: lihuanshuai Date: Fri, 28 Jul 2017 14:17:56 +0800 Subject: [PATCH 111/253] fixed some case on gionee device --- regexes.yaml | 7 ++++++- tests/test_device.yaml | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 3beb6fbd..2e204704 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -311,7 +311,7 @@ user_agent_parsers: # Slack desktop client (needs to be before Apple Mail, Electron, and Chrome as it gets wrongly detected on Mac OS otherwise) - regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Slack Desktop Client' - + # HipChat provides a version on Mac, but not on Windows. # Needs to be before Chrome on Windows, and AppleMail on Mac. - regex: '(HipChat)/?(\d+)?' @@ -1991,6 +1991,11 @@ device_parsers: device_replacement: 'Gionee $1' brand_replacement: 'Gionee' model_replacement: '$1' + - regex: '\sGIONEE[-\s_](\w*)' + regex_flag: 'i' + device_replacement: 'Gionee $1' + brand_replacement: 'Gionee' + model_replacement: '$1' ######### # GoClever diff --git a/tests/test_device.yaml b/tests/test_device.yaml index b3572d4d..b93f7314 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79995,3 +79995,7 @@ test_cases: brand: 'Nokia' model: 'Lumia 920' + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; Build/LMY47D ) AppleWebKit/534.30 (KHTML,like Gecko) Version/5.1 Mobile Safari/534.30 GIONEE-GN3003/GN3003 RV/5.0.16 GNBR/5.1.0.cg Id/8D83E4532006ACCE31D712F4F73C8C70' + family: 'Gionee GN3003' + brand: 'Gionee' + model: 'GN3003' From a9ac1489c5ef10e18ccd4762633a85921fb615e4 Mon Sep 17 00:00:00 2001 From: Gaetano Guerriero Date: Thu, 31 Aug 2017 13:59:29 +0200 Subject: [PATCH 112/253] Fix version parsing for Facebook and Pinterest app The patch number was wrongly captured. --- regexes.yaml | 4 ++-- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 3beb6fbd..edf84cb5 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -64,11 +64,11 @@ user_agent_parsers: # Social Networks # Facebook - - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' + - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Facebook' # Pinterest - regex: '\[(Pinterest)/[^\]]+\]' - - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?' + - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Pale Moon - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index f18bde62..c8de2d0f 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6471,6 +6471,12 @@ test_cases: minor: '9' patch: + - user_agent_string: '[FBAN/FB4A;FBAV/130.0.321;FBBV/149649;FBDM/{density=1.5,width=480,height=800};FBLC/es_ES;FBCR/;FBPN/com.facebook.katana;FBDV/LG-P920;FBSV/2.2.2;]' + family: 'Facebook' + major: '130' + minor: '0' + patch: '321' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B350 [Pinterest/iOS]' family: 'Pinterest' major: @@ -6525,6 +6531,12 @@ test_cases: minor: '2' patch: + - user_agent_string: 'Pinterest for Android/1.1.12 (endeavoru; 4.1.1)' + family: 'Pinterest' + major: '1' + minor: '1' + patch: '12' + - user_agent_string: 'Pinterest/3.2 CFNetwork/672.0.8 Darwin/14.0.0' family: 'CFNetwork' major: '672' From f23ac66e77366373fccb108ae2ba589927609795 Mon Sep 17 00:00:00 2001 From: James Hartig Date: Mon, 11 Sep 2017 20:55:15 -0400 Subject: [PATCH 113/253] Added Pinterestbot to differentiate between the app and the bot --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 46628bf3..77e41d01 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -48,6 +48,10 @@ user_agent_parsers: # Downloader ... - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + # Pinterestbot + - regex: '(Pinterest(?:bot)?)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?[;\s\(]+\+https://www.pinterest.com/bot.html' + family_replacement: 'Pinterestbot' + # Bots - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index bf2b255a..6da6a429 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6555,6 +6555,24 @@ test_cases: minor: '1' patch: '14' + - user_agent_string: 'Pinterest/0.2 (+https://www.pinterest.com/bot.html)' + family: 'Pinterestbot' + major: '0' + minor: '2' + patch: + + - user_agent_string: 'Mozilla/5.0 (compatible; Pinterestbot/1.0; +https://www.pinterest.com/bot.html)' + family: 'Pinterestbot' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Pinterestbot/1.0; +https://www.pinterest.com/bot.html)' + family: 'Pinterestbot' + major: '1' + minor: '0' + patch: + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) qutebrowser/0.2.1 Safari/538.1' family: 'qutebrowser' major: '0' From 89d333eeedc61f0e81c2a60ebb867613c43b0abd Mon Sep 17 00:00:00 2001 From: Stephen Jazdzewski Date: Fri, 22 Sep 2017 19:31:16 -0700 Subject: [PATCH 114/253] Podcast catcher applications --- regexes.yaml | 72 ++ .../podcasting_user_agent_strings.yaml | 732 ++++++++++++++++++ tests/test.js | 2 +- tests/test_ua.yaml | 222 +++--- 4 files changed, 916 insertions(+), 112 deletions(-) create mode 100755 test_resources/podcasting_user_agent_strings.yaml diff --git a/regexes.yaml b/regexes.yaml index 53c41206..70bf0aff 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1,6 +1,27 @@ user_agent_parsers: #### SPECIAL CASES TOP #### + # CFNetwork Podcast catcher Applications + - regex: '(ESPN)[%20| ]+Radio/(\d+)\.(\d+)\.(\d+) CFNetwork' + - regex: '(Antenna)/(\d+) CFNetwork' + family_replacement: 'AntennaPod' + - regex: '(TopPodcasts)Pro/(\d+) CFNetwork' + - regex: '(MusicDownloader)Lite/(\d+)\.(\d+)\.(\d+) CFNetwork' + - regex: '^(.*)-iPad/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' + - regex: '^(.*)-iPhone/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' + - regex: '^(.*)/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' + + # Podcast catchers + - regex: '(espn\.go)' + family_replacement: 'ESPN' + - regex: '(espnradio\.com)' + family_replacement: 'ESPN' + - regex: 'ESPN APP$' + family_replacement: 'ESPN' + - regex: '(audioboom\.com)' + family_replacement: 'AudioBoom' + - regex: ' (Rivo) RHYTHM' + # @note: iOS / OSX Applications - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' family_replacement: 'CFNetwork' @@ -311,6 +332,9 @@ user_agent_parsers: # AOL Browser (IE-based) - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)' + # Podcast catcher Applications using iTunes + - regex: '(PodCruncher|Downcast)[ /]?(\d+)\.?(\d+)?\.?(\d+)?\.?(\d+)?' + #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### @@ -416,6 +440,54 @@ user_agent_parsers: # Baca Berita App News Reader - regex: '(BacaBerita App)\/(\d+)\.(\d+)\.(\d+)' + # Podcast catchers + - regex: '^(bPod|Pocket Casts|Player FM)$' + - regex: '^(AlexaMediaPlayer|VLC)/(\d+)\.(\d+)\.([^.\s]+)' + - regex: '^(AntennaPod|WMPlayer|Zune|Podkicker|Radio|ExoPlayerDemo|Overcast|PocketTunes|NSPlayer|okhttp|DoggCatcher|QuickNews|QuickTime|Peapod|Podcasts|GoldenPod|VLC|Spotify|Miro|MediaGo|Juice|iPodder|gPodder|Banshee)/(\d+)\.(\d+)\.?(\d+)?\.?(\d+)?' + - regex: '^(Peapod|Liferea)/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + - regex: '^(bPod|Player FM) BMID/(\S+)' + - regex: '^(Podcast ?Addict)/v(\d+) ' + - regex: '^(Podcast ?Addict) ' + family_replacement: 'PodcastAddict' + - regex: '(Replay) AV' + - regex: '(VOX) Music Player' + - regex: '(CITA) RSS Aggregator/(\d+)\.(\d+)' + - regex: '(Pocket Casts)$' + - regex: '(Player FM)$' + - regex: '(LG Player|Doppler|FancyMusic|MediaMonkey|Clementine) (\d+)\.(\d+)\.?([^.\s]+)?\.?([^.\s]+)?' + - regex: '(philpodder)/(\d+)\.(\d+)\.?([^.\s]+)?\.?([^.\s]+)?' + - regex: '(Player FM|Pocket Casts|DoggCatcher|Spotify|MediaMonkey|MediaGo|BashPodder)' + - regex: '(QuickTime)\.(\d+)\.(\d+)\.(\d+)' + - regex: '(Kinoma)(\d+)' + - regex: '(Fancy) Cloud Music (\d+)\.(\d+)' + family_replacement: 'FancyMusic' + - regex: 'EspnDownloadManager' + family_replacement: 'ESPN' + - regex: '(ESPN) Radio (\d+)\.(\d+)\.?(\d+)? ?[rv:]?(\d+)? ' + - regex: '(podracer|jPodder) v ?(\d+)\.(\d+)\.?(\d+)?' + - regex: '(ZDM)/(\d+)\.(\d+)[; ]?' + - regex: '(Zune|BeyondPod) (\d+)\.?(\d+)?[\);]' + - regex: '(WMPlayer)/(\d+)\.(\d+)\.(\d+)\.(\d+)' + - regex: '^(Lavf)' + family_replacement: 'WMPlayer' + - regex: '^(RSSRadio)[ /]?(\d+)?' + - regex: '(RSS_Radio) (\d+)\.(\d+)' + family_replacement: 'RSSRadio' + - regex: '(Podkicker) \S+/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Podkicker' + - regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)\.?(\d+)?' + - regex: '^(Stitcher)/iOS' + - regex: '^(Stitcher)/Android' + - regex: '^(VLC) .*version (\d+)\.(\d+)\.(\d+)' + - regex: ' (VLC) for' + - regex: '(vlc)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'VLC' + - regex: '^(foobar)\S+/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + - regex: '^(Clementine)\S+ ([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + - regex: '(amarok)/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + family_replacement: 'Amarok' + - regex: '(Custom)-Feed Reader' + # Browser major_version.minor_version.beta_version (space instead of slash) - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' # Browser major_version.minor_version (space instead of slash) diff --git a/test_resources/podcasting_user_agent_strings.yaml b/test_resources/podcasting_user_agent_strings.yaml new file mode 100755 index 00000000..17207a61 --- /dev/null +++ b/test_resources/podcasting_user_agent_strings.yaml @@ -0,0 +1,732 @@ +test_cases: + + - user_agent_string: 'okhttp/2.7.5' + family: 'okhttp' + major: '2' + minor: '7' + patch: '5' + - user_agent_string: 'Stitcher/iOS' + family: 'Stitcher' + major: + minor: + patch: + - user_agent_string: 'Stitcher/Android' + family: 'Stitcher' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (Linux; U; en-us; BeyondPod 4)' + family: 'BeyondPod' + major: '4' + minor: + patch: + - user_agent_string: 'NSPlayer/10.0.0.3702 WMFSDK/10.0' + family: 'NSPlayer' + major: '10' + minor: '0' + patch: '0' + patch_minor: '3702' + - user_agent_string: 'NSPlayer/12.00.10011.16384 WMFSDK/12.00.10011.16384' + family: 'NSPlayer' + major: '12' + minor: '00' + patch: '10011' + patch_minor: '16384' + - user_agent_string: 'Pocket Casts' + family: 'Pocket Casts' + major: + minor: + patch: + - user_agent_string: 'Shifty Jelly Pocket Casts, Android v4.3.5' + family: 'Pocket Casts' + major: + minor: + patch: + - user_agent_string: 'Player/LG Player 1.0 for Android 4.4.2 (stagefright alternative), Pocket Casts' + family: 'Pocket Casts' + major: + minor: + patch: + - user_agent_string: 'PocketTunes/5.5.8' + family: 'PocketTunes' + major: '5' + minor: '5' + patch: '8' + - user_agent_string: 'Overcast/2.0 (+http://overcast.fm/; iOS podcast app)' + family: 'Overcast' + major: '2' + minor: '0' + patch: + - user_agent_string: 'Overcast/1.0 Podcast Sync (+http://overcast.fm/)' + family: 'Overcast' + major: '1' + minor: '0' + patch: + - user_agent_string: 'Player FM' + family: 'Player FM' + major: + minor: + patch: + - user_agent_string: 'Player/LG Player 1.0 for Android 4.4.2 (stagefright alternative), Player FM' + family: 'Player FM' + major: + minor: + patch: + - user_agent_string: 'AppleCoreMedia/1.0.0.9A405 (iPad; U; CPU OS 5_0_1 like Mac OS X; zh_cn), Player FM' + family: 'Player FM' + major: + minor: + patch: + - user_agent_string: 'Player FM BMID/E6804C1C77' + family: 'Player FM' + major: 'E6804C1C77' + minor: + patch: + - user_agent_string: 'ExoPlayerDemo/4.11 (Linux;Android 5.1.1) ExoPlayerLib/1.5.2' + family: 'ExoPlayerDemo' + major: '4' + minor: '11' + patch: + - user_agent_string: 'Radio/1.0 (Linux;Android 6.0.1) ExoPlayerLib/1.5.2' + family: 'Radio' + major: '1' + minor: '0' + patch: + - user_agent_string: 'AlexaMediaPlayer/5.3.1-21 (Linux;Android 5.1) ExoPlayerLib/1.3.3 ' + family: 'AlexaMediaPlayer' + major: '5' + minor: '3' + patch: '1-21' + - user_agent_string: 'Podkicker/2.2.4' + family: 'Podkicker' + major: '2' + minor: '2' + patch: '4' + - user_agent_string: 'Podkicker Pro/2.2.2 ' + family: 'Podkicker' + major: '2' + minor: '2' + patch: '2' + - user_agent_string: 'Podkicker Classic/1.2.9' + family: 'Podkicker' + major: '1' + minor: '2' + patch: '9' + - user_agent_string: 'Downcast/2.9.13 (iPhone; iOS 9.2.1; Scale/2.00)' + family: 'Downcast' + major: '2' + minor: '9' + patch: '13' + - user_agent_string: 'iTunes/10.7 Downcast/5608' + family: 'Downcast' + major: '5608' + minor: + patch: + - user_agent_string: 'Downcast/2.9.10 (Mac OS X Version 10.11.3 (Build 15D21))' + family: 'Downcast' + major: '2' + minor: '9' + patch: '10' + - user_agent_string: 'iTunes/10.7 Downcast/2.8.14.1002' + family: 'Downcast' + major: '2' + minor: '8' + patch: '14' + patch_minor: '1002' + - user_agent_string: 'ESPN%20Radio/3.2.113 CFNetwork/485.12.30 Darwin/10.4.0' + family: 'ESPN' + major: '3' + minor: '2' + patch: '113' + - user_agent_string: 'ESPN Radio/3.2.113 CFNetwork/485.12.30 Darwin/10.4.0' + family: 'ESPN' + major: '3' + minor: '2' + patch: '113' + - user_agent_string: 'Stitcher/28420 CFNetwork/548.1.4 Darwin/11.0.0' + family: 'Stitcher' + major: '28420' + minor: + patch: + - user_agent_string: 'Stitcher/3.310746 CFNetwork/459 Darwin/10.0.0d3' + family: 'Stitcher' + major: '3' + minor: '310746' + patch: + - user_agent_string: 'Mark%20Levin%20Show/11 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'Mark%20Levin%20Show' + major: '11' + minor: + patch: + - user_agent_string: 'The%20Dan%20Patrick%20Show/11 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'The%20Dan%20Patrick%20Show' + major: '11' + minor: + patch: + - user_agent_string: 'The Dan Patrick Show/11 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'The Dan Patrick Show' + major: '11' + minor: + patch: + - user_agent_string: '77%20WABC/11 CFNetwork/758.3.15 Darwin/15.4.0' + family: '77%20WABC' + major: '11' + minor: + patch: + - user_agent_string: '77 WABC/11 CFNetwork/758.3.15 Darwin/15.4.0' + family: '77 WABC' + major: '11' + minor: + patch: + - user_agent_string: 'KNBR%20680/11 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'KNBR%20680' + major: '11' + minor: + patch: + - user_agent_string: 'PodcastOne/3.0.6 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'PodcastOne' + major: '3' + minor: '0' + patch: '6' + - user_agent_string: 'PodcastOne/2.0 CFNetwork/758.2.8 Darwin/15.0.0 ' + family: 'PodcastOne' + major: '2' + minor: '0' + patch: + - user_agent_string: 'AudioBoom/226 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'AudioBoom' + major: '226' + minor: + patch: + - user_agent_string: 'https://audioboom.com/boos/' + family: 'AudioBoom' + major: + minor: + patch: + - user_agent_string: 'Sports%20Talk%201050/10 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'Sports%20Talk%201050' + major: '10' + minor: + patch: + - user_agent_string: 'PodCruncher/3.2 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'PodCruncher' + major: '3' + minor: '2' + patch: + - user_agent_string: 'iTunes/10.5.2 (PodCruncher 2.2)' + family: 'PodCruncher' + major: '2' + minor: '2' + patch: + - user_agent_string: 'Zune/4.8' + family: 'Zune' + major: '4' + minor: '8' + patch: + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Zune 4.7)' + family: 'Zune' + major: '4' + minor: '7' + patch: + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; OverDrive Download Station 1.0; Zune 4.7; .NET4.0C)' + family: 'Zune' + major: '4' + minor: '7' + patch: + - user_agent_string: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)' + family: 'Zune' + major: '4' + minor: '0' + patch: + - user_agent_string: 'RSSRadio/8899 (iPhone,iPhone OS,9.3)' + family: 'RSSRadio' + major: '8899' + minor: + patch: + - user_agent_string: 'RSSRadio (Push Notification Scanner;support@dorada.co.uk)' + family: 'RSSRadio' + major: + minor: + patch: + - user_agent_string: 'RSS_Radio 1.5' + family: 'RSSRadio' + major: '1' + minor: '5' + patch: + - user_agent_string: 'RSSRadio/2.68.14049 CFNetwork/672.1.15 Darwin/14.0.0' + family: 'RSSRadio' + major: '2' + minor: '68' + patch: '14049' + - user_agent_string: 'Lavf/56.15.102' + family: 'WMPlayer' + major: + minor: + patch: + - user_agent_string: 'Lavf52.64.2' + family: 'WMPlayer' + major: + minor: + patch: + - user_agent_string: 'Lavf53.32.100/WinampMPEG/2.8' + family: 'WMPlayer' + major: + minor: + patch: + - user_agent_string: 'Lavf52.104.0 WMPlayer/10.0.0.364 guid/3300AD50-2C39-46C0-AE0A-AC7B8159E203' + family: 'WMPlayer' + major: '10' + minor: '0' + patch: '0' + patch_minor '364' + - user_agent_string: 'WMPlayer/10.0.0.364 guid/3300AD50-2C39-46C0-AE0A-AC7B8159E203' + family: 'WMPlayer' + major: '10' + minor: '0' + patch: '0' + patch_minor '364' + - user_agent_string: 'AntennaPod/1.5.2.0' + family: 'AntennaPod' + major: '1' + minor: '5' + patch: '2' + patch_minor '0' + - user_agent_string: 'Antenna/965 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'AntennaPod' + major: '965' + minor: + patch: + - user_agent_string: 'AntennaPod/1.2.1' + family: 'AntennaPod' + major: '1' + minor: '2' + patch: '1' + - user_agent_string: 'HTC Streaming Player htc / 1.0 / cingular_us / 5.0.2' + family: 'HTC' + major: '5' + minor: '0' + patch: '2' + - user_agent_string: 'HTC Streaming Player utstarcom_wwe-generic / 1.0 / htc_kingdom / 2.3.4' + family: 'HTC' + major: '2' + minor: '3' + patch: '4' + - user_agent_string: 'HTC Streaming Player telus_wwe / 1.0 / htc_ruby / 4.0.3' + family: 'HTC' + major: '4' + minor: '0' + patch: '3' + - user_agent_string: 'HTC Streaming Player htc / 1.0 / himauhl_htc_asia_tw / 6.0 ' + family: 'HTC' + major: '6' + minor: '0' + patch: + - user_agent_string: 'ZDM/4.0; Windows Mobile 8.1' + family: 'ZDM' + major: '4' + minor: '0' + patch: + - user_agent_string: 'bPod' + family: 'bPod' + major: + minor: + patch: + - user_agent_string: 'bPod BMID/E679FACD4C' + family: 'bPod' + major: 'E679FACD4C' + minor: + patch: + - user_agent_string: 'PodcastAddict/v2 - Dalvik/2.1.0 (Linux; U; Android 6.0; LG-H811 Build/MRA58K)' + family: 'PodcastAddict' + major: '2' + minor: + patch: + - user_agent_string: 'Podcast Addict - Dalvik/2.1.0 (Linux; U; Android 5.1.1; SM-G920P Build/LMY47X)' + family: 'PodcastAddict' + major: + minor: + patch: + - user_agent_string: 'LG-H345/V10f Player/LG Player 1.0 for Android 5.1.1 (stagefright alternative)' + family: 'LG Player' + major: '1' + minor: '0' + patch: + - user_agent_string: 'Player/LG Player 1.0 for Android 6.0 (stagefright alternative)' + family: 'LG Player' + major: '1' + minor: '0' + patch: + - user_agent_string: 'EspnDownloadManager' + family: 'ESPN' + major: + minor: + patch: + - user_agent_string: 'ESPN Radio 4.7.4 rv:1032 (iPhone; iPhone OS 9.2.1; en_US)' + family: 'ESPN' + major: '4' + minor: '7' + patch: '4' + patch_minor: '1032' + - user_agent_string: 'ESPN Radio 4.5.1 (iPhone; iPhone OS 5.1.1; en_US)' + family: 'ESPN' + major: '4' + minor: '5' + patch: '1' + - user_agent_string: 'ESPN Radio 4.0 (iPhone; iPhone OS 7.1.2; en_AU)' + family: 'ESPN' + major: '4' + minor: '0' + patch: + - user_agent_string: 'http://c.espnradio.com/s:' + family: 'ESPN' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.4; HP Slate 17 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Safari/537.36ESPN APP' + family: 'ESPN' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (compatible; heritrix/3.2.0 +http://espn.go.com' + family: 'ESPN' + major: + minor: + patch: + - user_agent_string: 'Custom-Feed Reader' + family: 'Custom' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) amarok/2.8.0 Safari/534.34' + family: 'Amarok' + major: '2' + minor: '8' + patch: '0' + - user_agent_string: 'amarok/2.8.0 (Phonon/4.8.0; Phonon-VLC/0.8.0) LibVLC/2.2.1' + family: 'Amarok' + major: '2' + minor: '8' + patch: '0' + - user_agent_string: 'Banshee/2.6.2 (http://banshee-project.org/)' + family: 'Banshee' + major: '2' + minor: '6' + patch: '2' + - user_agent_string: 'gPodder/3.7.0 (+http://gpodder.org/)' + family: 'gPodder' + major: '3' + minor: '7' + patch: '0' + - user_agent_string: 'jPodder v 1.1 RC3' + family: 'jPodder' + major: '1' + minor: '1' + patch: + - user_agent_string: 'iPodder/2.1 +http://ipodder.sf.net/' + family: 'iPodder' + major: '2' + minor: '1' + patch: + - user_agent_string: 'massyn.net philpodder/1.6 (linux)' + family: 'philpodder' + major: '1' + minor: '6' + patch: + - user_agent_string: 'BashPodder' + family: 'BashPodder' + major: + minor: + patch: + - user_agent_string: 'Clementine-qt5 1.2.3' + family: 'Clementine' + major: '1' + minor: '2' + patch: '3' + - user_agent_string: 'Clementine 1.2.3-1457-g4db358a' + family: 'Clementine' + major: '1' + minor: '2' + patch: '3-1457-g4db358a' + - user_agent_string: 'Clementine 1.2.3' + family: 'Clementine' + major: '1' + minor: '2' + patch: '3' + - user_agent_string: 'Clementine 1.2' + family: 'Clementine' + major: '1' + minor: '2' + patch: + - user_agent_string: 'Clementine 1.2.2 Clementine 1.2.2 Clementine 1.2.2' + family: 'Clementine' + major: '1' + minor: '2' + patch: '2' + - user_agent_string: 'foobar2000/1.1.14a' + family: 'foobar' + major: '1' + minor: '1' + patch: '14a' + - user_agent_string: 'foobar2000/1.2.3' + family: 'foobar' + major: '1' + minor: '2' + patch: '3' + - user_agent_string: 'Juice/2.2 (Windows) +http://juicereceiver.sf.net/' + family: 'Juice' + major: '2' + minor: '2' + patch: + - user_agent_string: 'Liferea/0.x.x (Linux; en_US.UTF-8; http://liferea.sf.net/)' + family: 'Liferea' + major: '0' + minor: 'x' + patch: 'x' + - user_agent_string: 'MediaGo' + family: 'MediaGo' + major: + minor: + patch: + - user_agent_string: 'MediaGo/3.0.0.403 (Windows NT 6.3; WOW64) NetworkDownloader/1.6.01.0 PlaybackEngine/2.20.103.05220' + family: 'MediaGo' + major: '3' + minor: '0' + patch: '0' + patch_minor: '403' + - user_agent_string: 'MediaMonkey' + family: 'MediaMonkey' + major: + minor: + patch: + - user_agent_string: 'MediaMonkey 4.1.9.1764' + family: 'MediaMonkey' + major: '4' + minor: '1' + patch: '9' + patch_minor: '1764' + - user_agent_string: 'Miro/6.0 (http://www.getmiro.com/; Windows post2008Server x86) ' + family: 'Miro' + major: '6' + minor: '0' + patch: + - user_agent_string: 'Miro/3.0.3 (http://www.getmiro.com/; Microsoft Windows )' + family: 'Miro' + major: '3' + minor: '0' + patch: '3' + - user_agent_string: 'Fancy Cloud Music 1.4 build 2 (iPhone; iPhone OS 9.2.1; en_US)' + family: 'FancyMusic' + major: '1' + minor: '4' + patch: + - user_agent_string: 'FancyMusic 1.5.0 build 5 (iPod touch; iPhone OS 9.2.1; en_US)' + family: 'FancyMusic' + major: '1' + minor: '5' + patch: '0' + - user_agent_string: 'VOX Music Player' + family: 'VOX' + major: + minor: + patch: + - user_agent_string: 'NetNewsWire/3.3 (Mac OS X; http://netnewswireapp.com/mac/; gzip-happy)' + family: 'NetNewsWire' + major: '3' + minor: '3' + patch: + - user_agent_string: 'NetNewsWire/3.1.7 (Mac OS X; http://www.newsgator.com/Individuals/NetNewsWire/)' + family: 'NetNewsWire' + major: '3' + minor: '1' + patch: '7' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) NetNewsWire/3.2' + family: 'NetNewsWire' + major: '3' + minor: '2' + patch: + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) NetNewsWire/3.3.2' + family: 'NetNewsWire' + major: '3' + minor: '3' + patch: '2' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0; Rivo RHYTHM RX75 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36; | 2016-04-07 14:37:04' + family: 'Rivo' + major: + minor: + patch: + - user_agent_string: 'Spotify' + family: 'Spotify' + major: + minor: + patch: + - user_agent_string: 'Spotify/1.0' + family: 'Spotify' + major: '1' + minor: '0' + patch: + - user_agent_string: 'VLC/2.0.6 LibVLC/2.0.6' + family: 'VLC' + major: '2' + minor: '0' + patch: '6' + - user_agent_string: 'vlc/1.1.0 LibVLC/1.1.0' + family: 'VLC' + major: '1' + minor: '1' + patch: '0' + - user_agent_string: 'VLC/3.0.0-git LibVLC/3.0.0-git BMID/E67AB28521' + family: 'VLC' + major: '3' + minor: '0' + patch: '0-git' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/9.3 Mobile/11A465 Safari/9537.53 VLC for iOS/2.7.2' + family: 'VLC' + major: + minor: + patch: + - user_agent_string: 'VLC media player - version 1.0.3 Goldeneye - (c) 1996-2009 the VideoLAN team' + family: 'VLC' + major: '1' + minor: '0' + patch: '3' + - user_agent_string: 'VLC/2.2.0-rc1 LibVLC/2.2.0-rc1' + family: 'VLC' + major: '2' + minor: '2' + patch: '0-rc1' + - user_agent_string: 'VLC/2.2.0-pre4 LibVLC/2.2.0-pre4' + family: 'VLC' + major: '2' + minor: '2' + patch: '0-pre4' + - user_agent_string: 'CITA RSS Aggregator/2.7' + family: 'CITA' + major: '2' + minor: '7' + patch: + - user_agent_string: 'Doppler 2.9.5.4' + family: 'Doppler' + major: '2' + minor: '9' + patch: '5' + patch_minor: '4' + - user_agent_string: 'GoldenPod/0.8.4 (GNU/Linux; podcatcher; Using LWP) libwwwperl' + family: 'GoldenPod' + major: '0' + minor: '8' + patch: '4' + - user_agent_string: 'Replay AV' + family: 'Replay' + major: + minor: + patch: + - user_agent_string: 'MusicDownloaderLite/1.0.1 CFNetwork/609.1.4 Darwin/13.0.0' + family: 'MusicDownloader' + major: '1' + minor: '0' + patch: '1' + - user_agent_string: 'MusicDownloader/2.0.3 CFNetwork/548.0.4 Darwin/11.0.0' + family: 'MusicDownloader' + major: '2' + minor: '0' + patch: '3' + - user_agent_string: 'Plugged%20-%20Stream%20Podcasts%2C%20Music%20&%20More%20Free/5.0 CFNetwork/711.5.6 Darwin/14.0.0' + family: 'Plugged%20-%20Stream%20Podcasts%2C%20Music%20&%20More%20Free' + major: '5' + minor: '0' + patch: + - user_agent_string: 'PodWrangler/1.1 CFNetwork/672.1.15 Darwin/14.0.0' + family: 'PodWrangler' + major: '1' + minor: '1' + patch: + - user_agent_string: 'Custom/12 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'Custom' + major: '12' + minor: + patch: + - user_agent_string: 'GoodReader4/100 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'GoodReader4' + major: '100' + minor: + patch: + - user_agent_string: 'Free-Podcasts/132 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'Free-Podcasts' + major: '132' + minor: + patch: + - user_agent_string: 'Free-Podcasts/1.05 CFNetwork/609 Darwin/13.0.0' + family: 'Free-Podcasts' + major: '1' + minor: '05' + patch: + - user_agent_string: 'TopPodcasts/261 CFNetwork/758.0.2 Darwin/15.0.0' + family: 'TopPodcasts' + major: '261' + minor: + patch: + - user_agent_string: 'TopPodcastsPro/201 CFNetwork/758.2.8 Darwin/15.0.0' + family: 'TopPodcasts' + major: '201' + minor: + patch: + - user_agent_string: 'TopPodcasts/2.1.4 CFNetwork/672.1.15 Darwin/14.0.0' + family: 'TopPodcasts' + major: '2' + minor: '1' + patch: '4' + - user_agent_string: 'Podcasts/2.2' + family: 'Podcasts' + major: '2' + minor: '2' + patch: + - user_agent_string: 'Podcasts/1.4.113' + family: 'Podcasts' + major: '1' + minor: '4' + patch: '113' + - user_agent_string: 'Peapod/pre1.0 +http://www.peapodpy.org.uk' + family: 'Peapod' + major: 'pre1' + minor: '0' + patch: + - user_agent_string: 'Peapod/1.0 +http://www.peapodpy.org.uk' + family: 'Peapod' + major: '1' + minor: '0' + patch: + - user_agent_string: 'podracer v1.4.1; GNU/Linux; x86_64' + family: 'podracer' + major: '1' + minor: '4' + patch: '1' + - user_agent_string: 'Kinoma5' + family: 'Kinoma' + major: '5' + minor: + patch: + - user_agent_string: 'QuickTime/7.6' + family: 'QuickTime' + major: '7' + minor: '6' + patch: + - user_agent_string: 'QuickTime.7.6.6' + family: 'QuickTime' + major: '7' + minor: '6' + patch: '6' + - user_agent_string: 'QuickNews/1.25' + family: 'QuickNews' + major: '1' + minor: '25' + patch: + - user_agent_string: 'Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher' + family: 'DoggCatcher' + major: + minor: + patch: + - user_agent_string: 'DoggCatcher/1.2' + family: 'DoggCatcher' + major: '1' + minor: '2' + patch: diff --git a/tests/test.js b/tests/test.js index aca88eb2..ae23dfe9 100644 --- a/tests/test.js +++ b/tests/test.js @@ -15,7 +15,7 @@ function msg(name, actual, expected) { } ['../test_resources/firefox_user_agent_strings.yaml', '../tests/test_ua.yaml', '../test_resources/pgts_browser_list.yaml', - '../test_resources/opera_mini_user_agent_strings.yaml'].forEach(function(fileName) { + '../test_resources/opera_mini_user_agent_strings.yaml','../test_resources/podcasting_user_agent_strings.yaml'].forEach(function(fileName) { var fixtures = readYAML(fileName).test_cases; suite(fileName, function() { fixtures.forEach(function(f) { diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 6ac25d07..5ee58b80 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1460,164 +1460,164 @@ test_cases: patch_minor: - user_agent_string: 'Safari/6533.18.5 CFNetwork/454.9.8 Darwin/10.4.0 (i386) (MacBookPro7,1)' - family: 'CFNetwork' - major: '454' - minor: '9' - patch: '8' + family: 'Safari' + major: '6533' + minor: '18' + patch: '5' patch_minor: - user_agent_string: 'Safari/7536.30.1 CFNetwork/520.5.1 Darwin/11.4.2 (i386) (MacBook3,1)' - family: 'CFNetwork' - major: '520' - minor: '5' + family: 'Safari' + major: '7536' + minor: '30' patch: '1' patch_minor: - user_agent_string: 'Reader Notifier/5 CFNetwork/596.3.3 Darwin/12.3.0 (x86_64) (MacBookPro7,1)' - family: 'CFNetwork' - major: '596' - minor: '3' - patch: '3' + family: 'Reader Notifier' + major: '5' + minor: + patch: patch_minor: - user_agent_string: 'Safari/9537.71 CFNetwork/673.0.2 Darwin/13.0.1 (x86_64) (MacBookPro11,1)' - family: 'CFNetwork' - major: '673' - minor: '0' - patch: '2' + family: 'Safari' + major: '9537' + minor: '71' + patch: patch_minor: - user_agent_string: 'DEPoker-iPad/1.0.2 CFNetwork/548.1.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' - minor: '1' - patch: '4' + family: 'DEPoker' + major: '1' + minor: '0' + patch: '2' patch_minor: - user_agent_string: 'JDSports-iPad/1.1 CFNetwork/672.0.8 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '8' + family: 'JDSports' + major: '1' + minor: '1' + patch: patch_minor: - user_agent_string: 'AngryBirdsBlack-iPhone/1.1.0 CFNetwork/548.1.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' + family: 'AngryBirdsBlack' + major: '1' minor: '1' - patch: '4' + patch: '0' patch_minor: - user_agent_string: 'Bing for iPad/1.1.2 CFNetwork/485.13.9 Darwin/11.0.0' - family: 'CFNetwork' - major: '485' - minor: '13' - patch: '9' + family: 'Bing for iPad' + major: '1' + minor: '1' + patch: '2' patch_minor: - user_agent_string: 'NightstandPaid-iPad/1.3.1 CFNetwork/548.1.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' - minor: '1' - patch: '4' + family: 'NightstandPaid' + major: '1' + minor: '3' + patch: '1' patch_minor: - user_agent_string: 'Glo-De-iPad/1.4.7 CFNetwork/672.0.2 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '2' + family: 'Glo-De' + major: '1' + minor: '4' + patch: '7' patch_minor: - user_agent_string: 'Island for iPhone/1.95 CFNetwork/672.0.2 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '2' + family: 'Island for iPhone' + major: '1' + minor: '95' + patch: patch_minor: - user_agent_string: 'WormsiPhone-iPad/2.3 CFNetwork/548.1.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' - minor: '1' - patch: '4' + family: 'WormsiPhone' + major: '2' + minor: '3' + patch: patch_minor: - user_agent_string: 'Rummy LITE iPad/2.3.0 CFNetwork/609.1.4 Darwin/13.0.0' - family: 'CFNetwork' - major: '609' - minor: '1' - patch: '4' + family: 'Rummy LITE iPad' + major: '2' + minor: '3' + patch: '0' patch_minor: - user_agent_string: 'MobileRSSFree-iPad/3.1 CFNetwork/467.12 Darwin/10.3.1' - family: 'CFNetwork' - major: '467' - minor: '12' + family: 'MobileRSSFree' + major: '3' + minor: '1' patch: patch_minor: - user_agent_string: 'MobileRSSFree-iPad/3.1.4 CFNetwork/485.13.9 Darwin/11.0.0' - family: 'CFNetwork' - major: '485' - minor: '13' - patch: '9' + family: 'MobileRSSFree' + major: '3' + minor: '1' + patch: '4' patch_minor: - user_agent_string: 'babbelIndonesian-iPad/4.0.1 CFNetwork/672.0.8 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' + family: 'babbelIndonesian' + major: '4' minor: '0' - patch: '8' + patch: '1' patch_minor: - user_agent_string: 'WeltMobile-iPad/4.2 CFNetwork/609.1.4 Darwin/13.0.0' - family: 'CFNetwork' - major: '609' - minor: '1' - patch: '4' + family: 'WeltMobile' + major: '4' + minor: '2' + patch: patch_minor: - user_agent_string: 'IMPlusFull-iPad/7.9.1 CFNetwork/548.0.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' - minor: '0' - patch: '4' + family: 'IMPlusFull' + major: '7' + minor: '9' + patch: '1' patch_minor: - user_agent_string: 'Cooliris/1.3 CFNetwork/342.1 Darwin/9.4.1' - family: 'CFNetwork' - major: '342' - minor: '1' + family: 'Cooliris' + major: '1' + minor: '3' patch: patch_minor: - user_agent_string: 'Poof/1.0 CFNetwork/485.12.7 Darwin/10.4.0' - family: 'CFNetwork' - major: '485' - minor: '12' - patch: '7' + family: 'Poof' + major: '1' + minor: '0' + patch: patch_minor: - user_agent_string: 'Parking Mania Free/1.9.5.0 CFNetwork/548.0.4 Darwin/11.0.0' - family: 'CFNetwork' - major: '548' - minor: '0' - patch: '4' - patch_minor: + family: 'Parking Mania Free' + major: '1' + minor: '9' + patch: '5' + patch_minor: '0' - user_agent_string: 'Planet Boing!/1.4.8 CFNetwork/609.1.4 Darwin/13.0.0' - family: 'CFNetwork' - major: '609' - minor: '1' - patch: '4' + family: 'Planet Boing!' + major: '1' + minor: '4' + patch: '8' patch_minor: - user_agent_string: 'PlayTube/1.7 CFNetwork/672.0.2 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '2' + family: 'PlayTube' + major: '1' + minor: '7' + patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.2.1; es-us) AppleWebKit/534.12 (KHTML, like Gecko) Puffin/1.3.2913S Mobile Safari/534.12' @@ -1840,10 +1840,10 @@ test_cases: patch: - user_agent_string: 'Argus/2.8.65 CFNetwork/609 Darwin/13.0.0' - family: 'CFNetwork' - major: - minor: - patch: + family: 'Argus' + major: '2' + minor: '8' + patch: '65' - user_agent_string: 'DoCoMo/2.0 P05A(c100;TB;W24H15) (compatible; BaiduMobaider/1.0; http://www.baidu.jp/spider/)' family: 'BaiduMobaider' @@ -2662,10 +2662,10 @@ test_cases: patch: - user_agent_string: 'RedCarpet/2.1 CFNetwork/672.0.2 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '2' + family: 'RedCarpet' + major: '2' + minor: '1' + patch: - user_agent_string: 'Riddler (http://riddler.io/about.html)' family: 'Riddler' @@ -6544,28 +6544,28 @@ test_cases: patch: '12' - user_agent_string: 'Pinterest/3.2 CFNetwork/672.0.8 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' - minor: '0' - patch: '8' + family: 'Pinterest' + major: '3' + minor: '2' + patch: - user_agent_string: 'Pinterest/3.3.3 CFNetwork/609.1.4 Darwin/13.0.0' - family: 'CFNetwork' - major: '609' - minor: '1' - patch: '4' + family: 'Pinterest' + major: '3' + minor: '3' + patch: '3' - user_agent_string: 'Pinterest/3356 CFNetwork/711.0.6 Darwin/14.0.0' - family: 'CFNetwork' - major: '711' - minor: '0' - patch: '6' + family: 'Pinterest' + major: '3356' + minor: + patch: - user_agent_string: 'Pinterest/4.1.3 CFNetwork/672.1.14 Darwin/14.0.0' - family: 'CFNetwork' - major: '672' + family: 'Pinterest' + major: '4' minor: '1' - patch: '14' + patch: '3' - user_agent_string: 'Pinterest/0.2 (+https://www.pinterest.com/bot.html)' family: 'Pinterestbot' From 07ce1c9a59bac0c01534571d874e090c318d98c2 Mon Sep 17 00:00:00 2001 From: Chris Cassell <2981417+ccassell@users.noreply.github.com> Date: Wed, 11 Oct 2017 15:04:17 -0400 Subject: [PATCH 115/253] Add support for Box Drive, Sync, and Notes --- regexes.yaml | 14 ++++++++++++ tests/test_os.yaml | 56 ++++++++++++++++++++++++++++++++++++++++++++++ tests/test_ua.yaml | 47 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 70bf0aff..d1a702d4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -335,6 +335,10 @@ user_agent_parsers: # Podcast catcher Applications using iTunes - regex: '(PodCruncher|Downcast)[ /]?(\d+)\.?(\d+)?\.?(\d+)?\.?(\d+)?' + # Box Notes https://www.box.com/resources/downloads + # Must be before Electron + - regex: ' (BoxNotes)/(\d+)\.(\d+)\.(\d+)' + #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### @@ -689,6 +693,8 @@ user_agent_parsers: - regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Kurio App' + # Box Drive and Box Sync https://www.box.com/resources/downloads + - regex: '^(Box(?: Sync)?)/(\d+)\.(\d+)\.(\d+)' os_parsers: ########## @@ -870,6 +876,10 @@ os_parsers: - regex: 'Win32' os_replacement: 'Windows 95' + # Box apps (Drive, Sync, Notes) on Windows https://www.box.com/resources/downloads + - regex: '^Box.*Windows/([\d.]+);' + os_replacement: 'Windows $1' + ########## # Tizen OS from Samsung # spoofs Android so pushing it above @@ -920,6 +930,10 @@ os_parsers: # ios devices spoof (mac os x), so including intel/ppc prefixes - regex: '(?:PPC|Intel) (Mac OS X)' + # Box Drive and Box Sync on Mac OS X use OSX version numbers, not Darwin + - regex: '^Box.*;(Darwin)/(10)\.(1\d)(?:\.(\d+))?' + os_replacement: 'Mac OS X' + ########## # iOS # http://en.wikipedia.org/wiki/IOS_version_history diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 6963462a..bdecae13 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2348,3 +2348,59 @@ test_cases: minor: '12' patch: patch_minor: + + - user_agent_string: 'Box Sync/4.0.7848;Darwin/10.13;i386/64bit' + family: 'Mac OS X' + major: '10' + minor: '13' + patch: + patch_minor: + + - user_agent_string: 'Box/1.2.93;Darwin/10.13;i386/64bit' + family: 'Mac OS X' + major: '10' + minor: '13' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'Mac OS X' + major: '10' + minor: '13' + patch: '0' + patch_minor: + + - user_agent_string: 'Box Sync/4.0.7848;Windows/8.1;x86 Family 6 Model 158 Stepping 9, GenuineIntel/32bit' + family: 'Windows 8.1' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Box Sync/4.0.7848;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' + family: 'Windows 10' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'Windows 8.1' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'Windows 10' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Box/1.2.93;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' + family: 'Windows 10' + major: + minor: + patch: + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 5ee58b80..c09f339b 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7222,3 +7222,50 @@ test_cases: minor: patch: + - user_agent_string: 'Box Sync/4.0.7848;Darwin/10.13;i386/64bit' + family: 'Box Sync' + major: '4' + minor: '0' + patch: '7848' + + - user_agent_string: 'Box/1.2.93;Darwin/10.13;i386/64bit' + family: 'Box' + major: '1' + minor: '2' + patch: '93' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'BoxNotes' + major: '1' + minor: '3' + patch: '0' + + - user_agent_string: 'Box Sync/4.0.7848;Windows/8.1;x86 Family 6 Model 158 Stepping 9, GenuineIntel/32bit' + family: 'Box Sync' + major: '4' + minor: '0' + patch: '7848' + + - user_agent_string: 'Box Sync/4.0.7848;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' + family: 'Box Sync' + major: '4' + minor: '0' + patch: '7848' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'BoxNotes' + major: '1' + minor: '3' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' + family: 'BoxNotes' + major: '1' + minor: '3' + patch: '0' + + - user_agent_string: 'Box/1.2.93;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' + family: 'Box' + major: '1' + minor: '2' + patch: '93' From 64999553c761279b23f15946827af187283050e3 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 4 Nov 2017 18:27:04 +0100 Subject: [PATCH 116/253] - removing node 0.12 as mocha discontinued support - adding node v6.x and v8.x --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 66d69d37..ba58f19f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,9 @@ sudo: false language: node_js node_js: - - 0.12 - 4 + - 6 + - 8 - node script: From a0279ff4ad39216bbf3743d4dcc4cd531e848ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= Date: Wed, 26 Jul 2017 13:45:17 +0200 Subject: [PATCH 117/253] Parse Headless Chrome versions The initial implementation of the Headless Chrome detection (#228) didn't detect versions of the headless version. This has been fixed. A test for Ubuntu Chromium in headless mode was also added. I haven't made it recognized as HeadlessChromium as it has HeadlessChrome in the user agent. It might be worthwhile to check how a pure compiled from source Chromium behaves. Nevertheless, this commit is still an improvement. Ref #228 Ref karma-runner/karma#2762 --- regexes.yaml | 4 +--- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index d1a702d4..1879142b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -419,9 +419,7 @@ user_agent_parsers: # Headless Chrome # https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md - # Currently only available on Linux - - regex: 'HeadlessChrome' - family_replacement: 'HeadlessChrome' + - regex: '(HeadlessChrome)(?:/(\d+)\.(\d+)\.(\d+))?' # Browser/major_version.minor_version - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c09f339b..b7852eab 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6699,6 +6699,18 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/62.0.3202.89 Safari/537.36' + family: 'HeadlessChrome' + major: '62' + minor: '0' + patch: '3202' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 HeadlessChrome/59.0.3071.109 Safari/537.36' + family: 'HeadlessChrome' + major: '59' + minor: '0' + patch: '3071' + - user_agent_string: 'Roku/DVP-6.2 (096.02E06005A)' family: 'Roku' major: '6' From 8d5b307c7496192b3b48e4afe465f03145563f65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= Date: Wed, 26 Jul 2017 13:45:27 +0200 Subject: [PATCH 118/253] Add a test for a bare Chrome 60 instance --- tests/test_ua.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b7852eab..10d4d6d6 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -2373,6 +2373,12 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36' + family: 'Chrome' + major: '60' + minor: '0' + patch: '3112' + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' family: 'Chrome' major: '27' From ab576d92d1048e56f68a0983ae8b26b0792ff853 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sat, 11 Nov 2017 18:30:49 +0100 Subject: [PATCH 119/253] Add Evolution CardDav/CalDav user agent --- regexes.yaml | 3 +++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 1879142b..2dc9bed2 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -421,6 +421,9 @@ user_agent_parsers: # https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md - regex: '(HeadlessChrome)(?:/(\d+)\.(\d+)\.(\d+))?' + # Evolution Mail CardDav/CalDav integration + - regex: '(Evolution)/(\d+)\.(\d+)\.(\d+\.\d+)' + # Browser/major_version.minor_version - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 10d4d6d6..18ce4796 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7287,3 +7287,9 @@ test_cases: major: '1' minor: '2' patch: '93' + + - user_agent_string: 'Evolution/3.26.2.1' + family: 'Evolution' + major: '3' + minor: '26' + patch: '2.1' From 820bf4da5a795e372973171adec4571f38cf89c4 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sat, 11 Nov 2017 18:47:34 +0100 Subject: [PATCH 120/253] Add Roundcube CardDav plugin user agent --- regexes.yaml | 3 +++ tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 2dc9bed2..c7638354 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -424,6 +424,9 @@ user_agent_parsers: # Evolution Mail CardDav/CalDav integration - regex: '(Evolution)/(\d+)\.(\d+)\.(\d+\.\d+)' + # Roundcube Mail CardDav plugin + - regex: '(RCM CardDAV plugin)/(\d+)\.(\d+)\.(\d+(?:-dev)?)' + # Browser/major_version.minor_version - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 18ce4796..ae0b1982 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7293,3 +7293,15 @@ test_cases: major: '3' minor: '26' patch: '2.1' + + - user_agent_string: 'RCM CardDAV plugin/2.0.4' + family: 'RCM CardDAV plugin' + major: '2' + minor: '0' + patch: '4' + + - user_agent_string: 'RCM CardDAV plugin/0.9.2-dev' + family: 'RCM CardDAV plugin' + major: '0' + minor: '9' + patch: '2-dev' From ff5146267890b4cec3c7b8aa40aa573fc1e6163c Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sat, 11 Nov 2017 19:46:27 +0100 Subject: [PATCH 121/253] Add DAVdroid --- regexes.yaml | 3 +++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index c7638354..fb8ba64a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -66,6 +66,9 @@ user_agent_parsers: - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' family_replacement: 'MSIECrawler' + # DAVdroid + - regex: '(DAVdroid)/(\d+)\.(\d+)\.(\d+(?:-gplay))' + # Downloader ... - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index bdecae13..566953ab 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -1074,6 +1074,13 @@ test_cases: patch: '4' patch_minor: + - user_agent_string: 'DAVdroid/1.9.2-gplay (2017/11/04; dav4android; okhttp3) Android/7.1.2' + family: 'Android' + major: '7' + minor: '1' + patch: '2' + patch_minor: + - user_agent_string: 'Mozilla/5.0 (SymbianOS 9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344' family: 'Symbian OS' major: '9' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index ae0b1982..8564db92 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7305,3 +7305,9 @@ test_cases: major: '0' minor: '9' patch: '2-dev' + + - user_agent_string: 'DAVdroid/1.9.2-gplay (2017/11/04; dav4android; okhttp3) Android/7.1.2' + family: 'DAVdroid' + major: '1' + minor: '9' + patch: '2-gplay' From 3c395114f7908c2c71289e2bd0b49dcba7c0a4b0 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sat, 11 Nov 2017 20:12:43 +0100 Subject: [PATCH 122/253] Add DAVdroid F-Droid variant --- regexes.yaml | 2 +- tests/test_ua.yaml | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index fb8ba64a..beeac285 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -67,7 +67,7 @@ user_agent_parsers: family_replacement: 'MSIECrawler' # DAVdroid - - regex: '(DAVdroid)/(\d+)\.(\d+)\.(\d+(?:-gplay))' + - regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+))?' # Downloader ... - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 8564db92..bf9c0886 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7310,4 +7310,10 @@ test_cases: family: 'DAVdroid' major: '1' minor: '9' - patch: '2-gplay' + patch: '2' + + - user_agent_string: 'DAVdroid/1.9-ose (2017/10/19; dav4android; okhttp3) Android/7.1.2' + family: 'DAVdroid' + major: '1' + minor: '9' + patch: From 631c5e4bc519ed49d446fa188c7ba1a623c6b463 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sun, 12 Nov 2017 22:21:27 +0100 Subject: [PATCH 123/253] Add Nextcloud desktop sync client --- regexes.yaml | 5 +++++ tests/test_os.yaml | 14 ++++++++++++++ tests/test_ua.yaml | 12 ++++++++++++ 3 files changed, 31 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index beeac285..21ca5c41 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -532,6 +532,11 @@ user_agent_parsers: - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7' family_replacement: 'IE Large Screen' + # Nextcloud desktop sync client + - regex: '(Nextcloud)' + + # Generic mirall client + - regex: '(mirall)/(\d+)\.(\d+)\.(\d+)' #### END MAIN CASES #### diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 566953ab..e82aa9e7 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2411,3 +2411,17 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows) mirall/2.3.2 (build 1) (Nextcloud)' + family: 'Windows' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Linux) mirall/2.3.2 (Nextcloud)' + family: 'Linux' + major: + minor: + patch: + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index bf9c0886..b3fe2897 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7317,3 +7317,15 @@ test_cases: major: '1' minor: '9' patch: + + - user_agent_string: 'Mozilla/5.0 (Windows) mirall/2.3.2 (build 1) (Nextcloud)' + family: 'Nextcloud' + major: + minor: + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux) mirall/2.3.2 (Nextcloud)' + family: 'Nextcloud' + major: + minor: + patch: From 5aa11ba5fe7c110e638074831d6956a08308b2b6 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Sun, 12 Nov 2017 22:36:37 +0100 Subject: [PATCH 124/253] Add Nextcloud android app --- regexes.yaml | 4 ++++ tests/test_device.yaml | 5 +++++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 6 ++++++ 4 files changed, 22 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 21ca5c41..b42a09b3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -538,6 +538,10 @@ user_agent_parsers: # Generic mirall client - regex: '(mirall)/(\d+)\.(\d+)\.(\d+)' + # Nextcloud/Owncloud android client + - regex: '(ownCloud-android)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Owncloud' + #### END MAIN CASES #### #### SPECIAL CASES #### diff --git a/tests/test_device.yaml b/tests/test_device.yaml index b93f7314..ffdfb529 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79999,3 +79999,8 @@ test_cases: family: 'Gionee GN3003' brand: 'Gionee' model: 'GN3003' + + - user_agent_string: 'Mozilla/5.0 (Android) ownCloud-android/2.0.0' + family: 'Generic Smartphone' + brand: 'Generic' + model: 'Smartphone' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index e82aa9e7..0d427ee9 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2425,3 +2425,10 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Android) ownCloud-android/2.0.0' + family: 'Android' + major: + minor: + patch: + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b3fe2897..23d69d60 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7329,3 +7329,9 @@ test_cases: major: minor: patch: + + - user_agent_string: 'Mozilla/5.0 (Android) ownCloud-android/2.0.0' + family: 'Owncloud' + major: '2' + minor: '0' + patch: '0' From 638a9d2b070c8ac14b24bb3f18073a7f8f6ba5a4 Mon Sep 17 00:00:00 2001 From: Jake Champion Date: Mon, 27 Nov 2017 13:41:19 +0000 Subject: [PATCH 125/253] add test for applenews browser --- tests/test_ua.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 23d69d60..bfd2dc82 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7173,7 +7173,7 @@ test_cases: major: '3' minor: '8' patch: '4' - + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 SznProhlizec/4.4i' family: 'Seznam.cz' major: '4' @@ -7335,3 +7335,9 @@ test_cases: major: '2' minor: '0' patch: '0' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) AppleNews/608.0.1 Version/2.0.1' + family: 'Mobile Safari UI/WKWebView' + major: '10' + minor: '0' + patch: '2' From 392984bfa343521dfeb018b8bf5f582fd67256a9 Mon Sep 17 00:00:00 2001 From: Jake Champion Date: Mon, 27 Nov 2017 13:46:43 +0000 Subject: [PATCH 126/253] Add regex to detect AppleNews as WKWebView --- regexes.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index b42a09b3..20487175 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -572,6 +572,8 @@ user_agent_parsers: # @note: iOS / OSX Applications - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari' family_replacement: 'Mobile Safari' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.* AppleNews\/\d+\.\d+\.\d+?' + family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile.*[ +]Safari' From 4c5a893598706ed05e797e9718ec7d52ae2a3110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Wed, 29 Nov 2017 17:19:00 +0200 Subject: [PATCH 127/253] Fix test and add new case for iPhone --- regexes.yaml | 4 ++++ tests/test_device.yaml | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 20487175..8311669d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4582,6 +4582,10 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Apple' model_replacement: '$1' + - regex: 'iPhone' + device_replacement: 'iPhone' + brand_replacement: 'Apple' + model_replacement: 'iPhone' # @note: desktop applications show device info - regex: 'CFNetwork/.* Darwin/\d.*\(((?:Mac|iMac|PowerMac|PowerBook)[^\d]*)(\d+)(?:,|%2C)(\d+)' device_replacement: '$1$2,$3' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index ffdfb529..392c25a8 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -361,9 +361,9 @@ test_cases: model: - user_agent_string: 'MQQBrowser/371 Mozilla/5.0 (iPhone 4S; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A523 Safari/7534.48.3' - family: 'Generic Smartphone' - brand: 'Generic' - model: 'Smartphone' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone' - user_agent_string: 'Opera/9.80 (VRE; Opera Mini/4.2/28.2794; U; en) Presto/2.8.119 Version/11.10' family: 'Generic Feature Phone' @@ -80000,6 +80000,11 @@ test_cases: brand: 'Gionee' model: 'GN3003' + - user_agent_string: 'Mozilla/5.0 (iPhone## CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone' + - user_agent_string: 'Mozilla/5.0 (Android) ownCloud-android/2.0.0' family: 'Generic Smartphone' brand: 'Generic' From 6318cae5c8d610bb7d7da72ff9f4ff8b7c9ea6fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Wed, 29 Nov 2017 21:00:49 +0200 Subject: [PATCH 128/253] Fix regexps and tests for recognizing windows majors better --- regexes.yaml | 54 ++++++++----- tests/test_os.yaml | 184 ++++++++++++++++++++++----------------------- 2 files changed, 129 insertions(+), 109 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 8311669d..c2389cd8 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -848,55 +848,75 @@ os_parsers: os_replacement: 'Windows Mobile' - regex: '(Windows (?:NT 5\.2|NT 5\.1))' - os_replacement: 'Windows XP' + os_replacement: 'Windows' + os_v1_replacement: 'XP' - regex: '(Windows NT 6\.1)' - os_replacement: 'Windows 7' + os_replacement: 'Windows' + os_v1_replacement: '7' - regex: '(Windows NT 6\.0)' - os_replacement: 'Windows Vista' + os_replacement: 'Windows' + os_v1_replacement: 'Vista' - regex: '(Win 9x 4\.90)' - os_replacement: 'Windows ME' + os_replacement: 'Windows' + os_v1_replacement: 'ME' - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)' - regex: '(Windows NT 6\.2; ARM;)' - os_replacement: 'Windows RT' + os_replacement: 'Windows' + os_v1_replacement: 'RT' + - regex: '(Windows NT 6\.2)' - os_replacement: 'Windows 8' + os_replacement: 'Windows' + os_v1_replacement: '8' - regex: '(Windows NT 6\.3; ARM;)' - os_replacement: 'Windows RT 8.1' + os_replacement: 'Windows' + os_v1_replacement: 'RT 8.1' + - regex: '(Windows NT 6\.3)' - os_replacement: 'Windows 8.1' + os_replacement: 'Windows' + os_v1_replacement: '8.1' - regex: '(Windows NT 6\.4)' - os_replacement: 'Windows 10' + os_replacement: 'Windows' + os_v1_replacement: '10' + - regex: '(Windows NT 10\.0)' - os_replacement: 'Windows 10' + os_replacement: 'Windows' + os_v1_replacement: '10' - regex: '(Windows NT 5\.0)' - os_replacement: 'Windows 2000' + os_replacement: 'Windows' + os_v1_replacement: '2000' - regex: '(WinNT4.0)' - os_replacement: 'Windows NT 4.0' + os_replacement: 'Windows' + os_v1_replacement: 'NT 4.0' - regex: '(Windows ?CE)' - os_replacement: 'Windows CE' + os_replacement: 'Windows' + os_v1_replacement: 'CE' - regex: 'Win ?(95|98|3.1|NT|ME|2000)' - os_replacement: 'Windows $1' + os_replacement: 'Windows' + os_v1_replacement: '$1' - regex: 'Win16' - os_replacement: 'Windows 3.1' + os_replacement: 'Windows' + os_v1_replacement: '3.1' - regex: 'Win32' - os_replacement: 'Windows 95' + os_replacement: 'Windows' + os_v1_replacement: '95' # Box apps (Drive, Sync, Notes) on Windows https://www.box.com/resources/downloads - regex: '^Box.*Windows/([\d.]+);' - os_replacement: 'Windows $1' + os_replacement: 'Windows' + os_v1_replacement: '$1' ########## # Tizen OS from Samsung diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 0d427ee9..9d581894 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -743,92 +743,92 @@ test_cases: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.4; Trident/7.0; rv:11.0) like Gecko' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.4; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' - family: 'Windows 8.1' - major: + family: 'Windows' + major: '8.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; ARM; WOW64; Trident/7.0; rv:11.0) like Gecko' - family: 'Windows RT 8.1' - major: + family: 'Windows' + major: 'RT 8.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 ThunderBrowse/3.3.5' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Thunderbird/45.0' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a1) Gecko/20100208 MozillaDeveloperPreview/3.7a1 (.NET CLR 3.5.30729)' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) FireWeb/1.0.0.0' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh_CN) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0 baidubrowser/1.x Safari/534.7' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; baidubrowser 1.x)' - family: 'Windows 7' - major: + family: 'Windows' + major: '7' minor: patch: patch_minor: @@ -862,85 +862,85 @@ test_cases: patch_minor: - user_agent_string: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)' - family: 'Windows 8' - major: + family: 'Windows' + major: '8' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0)' - family: 'Windows RT' - major: + family: 'Windows' + major: 'RT' minor: patch: patch_minor: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; chromeframe; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)' - family: 'Windows Vista' - major: + family: 'Windows' + major: 'Vista' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110414 Lightning/1.0b3pre Thunderbird/3.1.10' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.24 Version/10.53' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.101) AppleWebKit/530 (KHTML, like Gecko) Version/4.0 Safari/530.17' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Sleipnir 2.8.5)3.0.30729)' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; chromeframe; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; .NET CLR 2.0.50727; .NET CLR 1.1.4322)' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) RockMelt/0.8.34.841 Chrome/6.0.472.63 Safari/534.3' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Comodo_Dragon/4.1.1.11 Chrome/4.1.249.1042 Safari/532.5' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20110407 Firefox/4.0.3 PaleMoon/4.0.3' - family: 'Windows XP' - major: + family: 'Windows' + major: 'XP' minor: patch: patch_minor: @@ -953,8 +953,8 @@ test_cases: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win 9x 4.90; PL; rv:1.7.5) Gecko/20041217' - family: 'Windows ME' - major: + family: 'Windows' + major: 'ME' minor: patch: patch_minor: @@ -1656,106 +1656,106 @@ test_cases: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows U; Win NT 5.0; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2' - family: 'Windows NT' - major: + family: 'Windows' + major: 'NT' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; N; WinNT; en-US; m14) Netscape6/6.0b1,gzip(gfe),gzip(gfe),gzip(gfe)' - family: 'Windows NT' - major: + family: 'Windows' + major: 'NT' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win 9x 4.90; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7' - family: 'Windows ME' - major: + family: 'Windows' + major: 'ME' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win 9x 4.90; en-CA; rv:0.9.4.1) Gecko/20020314 Netscape6/6.2.2' - family: 'Windows ME' - major: + family: 'Windows' + major: 'ME' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win16; en-US; rv:1.7) Safari/85.5' - family: 'Windows 3.1' - major: + family: 'Windows' + major: '3.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win3.1; en-US; rv:1.0.0) Gecko/20020530' - family: 'Windows 3.1' - major: + family: 'Windows' + major: '3.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win3.11; en-US; rv:21.56.11.90) Gecko/20500230 Firefox/3.5' - family: 'Windows 3.1' - major: + family: 'Windows' + major: '3.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win32; rv:1.6),gzip(gfe),gzip(gfe),gzip(gfe)' - family: 'Windows 95' - major: + family: 'Windows' + major: '95' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win95; en-GB; rv:1.0.1) Gecko/20020823 Netscape/7.0' - family: 'Windows 95' - major: + family: 'Windows' + major: '95' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; Win95; en-GB; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8' - family: 'Windows 95' - major: + family: 'Windows' + major: '95' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows; U; WindowsCE 5.2; en-US; rv:1.9.2a2pre) Gecko/20090904 Fennec/1.0a3' - family: 'Windows CE' - major: + family: 'Windows' + major: 'CE' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko Firefox/5.0.1' - family: 'Windows CE' - major: + family: 'Windows' + major: 'CE' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 SeaMonkey/2.1.1' - family: 'Windows CE' - major: + family: 'Windows' + major: 'CE' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (WindowsCE 6.0; rv:2.1.1) Gecko/ Firefox/5.0.1' - family: 'Windows CE' - major: + family: 'Windows' + major: 'CE' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (WindowsCE; rv:4.0) Gecko/20120320 Firefox/4.0' - family: 'Windows CE' - major: + family: 'Windows' + major: 'CE' minor: patch: patch_minor: @@ -2378,36 +2378,36 @@ test_cases: patch_minor: - user_agent_string: 'Box Sync/4.0.7848;Windows/8.1;x86 Family 6 Model 158 Stepping 9, GenuineIntel/32bit' - family: 'Windows 8.1' - major: + family: 'Windows' + major: '8.1' minor: patch: patch_minor: - user_agent_string: 'Box Sync/4.0.7848;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' - family: 'Windows 8.1' - major: + family: 'Windows' + major: '8.1' minor: patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: - user_agent_string: 'Box/1.2.93;Windows/10;Intel64 Family 6 Model 158 Stepping 9, GenuineIntel/64bit' - family: 'Windows 10' - major: + family: 'Windows' + major: '10' minor: patch: patch_minor: From 85541f71672f85343d1d3a72a7497671e339ac84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Wed, 29 Nov 2017 21:04:45 +0200 Subject: [PATCH 129/253] Point to reference implementation where there is replacements supported with minor --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index afc4ccf4..6cac290a 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "yamlparser": ">=0.0.2", "mocha": "*", - "uap-ref-impl": "*" + "uap-ref-impl": "git@github.com:theikkila/uap-ref-impl.git#65a6a3b8df233eecd20bc88ee22d3c0e3bb2512c" }, "scripts": { "test": "mocha -u tdd -R min ./tests/test.js" From da6f582426d62ee1c756adefc65d7281a312fef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Wed, 29 Nov 2017 21:14:09 +0200 Subject: [PATCH 130/253] Update package.json to point public repo --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6cac290a..b5aec70d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "yamlparser": ">=0.0.2", "mocha": "*", - "uap-ref-impl": "git@github.com:theikkila/uap-ref-impl.git#65a6a3b8df233eecd20bc88ee22d3c0e3bb2512c" + "uap-ref-impl": "theikkila/uap-ref-impl" }, "scripts": { "test": "mocha -u tdd -R min ./tests/test.js" From d9dd0db8cd28817b5aa30cb1d825adb27508cbe5 Mon Sep 17 00:00:00 2001 From: Sean Callan Date: Wed, 29 Nov 2017 12:25:27 -0700 Subject: [PATCH 131/253] Update patterns for IE compatibility mode --- regexes.yaml | 15 ++++++++++++++- tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 20487175..e975c752 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -674,9 +674,22 @@ user_agent_parsers: - regex: '(Phantom)/V(\d+)\.(\d+)' family_replacement: 'Phantom Browser' + + - regex: '(Trident)/(7)\.(0)' + family_replacement: 'IE' + v1_replacement: '11' + + - regex: '(Trident)/(6)\.(0)' + family_replacement: 'IE' + v1_replacement: '10' + + - regex: '(Trident)/(5)\.(0)' + family_replacement: 'IE' + v1_replacement: '9' - - regex: 'Trident(.*)rv.(\d+)\.(\d+)' + - regex: '(Trident)/(4)\.(0)' family_replacement: 'IE' + v1_replacement: '8' # Espial - regex: '(Espial)/(\d+)(?:\.(\d+))?(?:\.(\d+))?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index bfd2dc82..fd5278cc 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7341,3 +7341,21 @@ test_cases: major: '10' minor: '0' patch: '2' + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3)' + family: 'IE' + major: '11' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)' + family: 'IE' + major: '10' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)' + family: 'IE' + major: '9' + minor: '0' + patch: From d3784c9363a985129f5a9e11fd9d89cc40c1fffd Mon Sep 17 00:00:00 2001 From: Vitaliy Khamin Date: Tue, 5 Dec 2017 11:01:09 +0500 Subject: [PATCH 132/253] iOS 10.3.x and 11.x recognition --- regexes.yaml | 29 +++++++++++++++++++++++++++++ tests/test_os.yaml | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 843c2f32..009df6c8 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1070,9 +1070,38 @@ os_parsers: os_replacement: 'iOS' os_v1_replacement: '9' os_v2_replacement: '0' + - regex: 'CFNetwork/8.* Darwin/16\.5\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '10' + os_v2_replacement: '3' + - regex: 'CFNetwork/8.* Darwin/16\.6\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '10' + os_v2_replacement: '3' + os_v3_replacement: '2' + - regex: 'CFNetwork/8.* Darwin/16\.7\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '10' + os_v2_replacement: '3' + os_v3_replacement: '3' - regex: 'CFNetwork/8.* Darwin/(16)\.\d+' os_replacement: 'iOS' os_v1_replacement: '10' + - regex: 'CFNetwork/8.* Darwin/17\.0\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '0' + - regex: 'CFNetwork/8.* Darwin/17\.2\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '1' + - regex: 'CFNetwork/8.* Darwin/17\.3\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '2' + - regex: 'CFNetwork/8.* Darwin/(17)\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' # iOS Apps - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 0d427ee9..c71385f7 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2432,3 +2432,45 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/811.4.18 Darwin/16.5.0' + family: 'iOS' + major: '10' + minor: '3' + patch: + patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/811.5.4 Darwin/16.6.0' + family: 'iOS' + major: '10' + minor: '3' + patch: '2' + patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/811.5.4 Darwin/16.7.0' + family: 'iOS' + major: '10' + minor: '3' + patch: '3' + patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/887 Darwin/17.0.0' + family: 'iOS' + major: '11' + minor: '0' + patch: + patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/889.9 Darwin/17.2.0' + family: 'iOS' + major: '11' + minor: '1' + patch: + patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/893.10 Darwin/17.3.0' + family: 'iOS' + major: '11' + minor: '2' + patch: + patch_minor: From e59b11bf0ec78cae8ab24a0b48deea0fc4755873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Thu, 7 Dec 2017 13:25:16 +0200 Subject: [PATCH 133/253] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b5aec70d..7c13e948 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "yamlparser": ">=0.0.2", "mocha": "*", - "uap-ref-impl": "theikkila/uap-ref-impl" + "uap-ref-impl": "*" }, "scripts": { "test": "mocha -u tdd -R min ./tests/test.js" From 176e9a11f3bf24ef05d39463eaf6ad622fb6d564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teemu=20Heikkil=C3=A4?= Date: Thu, 7 Dec 2017 13:57:47 +0200 Subject: [PATCH 134/253] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c13e948..0c669386 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "yamlparser": ">=0.0.2", "mocha": "*", - "uap-ref-impl": "*" + "uap-ref-impl": "ua-parser/uap-ref-impl" }, "scripts": { "test": "mocha -u tdd -R min ./tests/test.js" From 1b571f0e74bca171df04a17ca14eee8e19addb07 Mon Sep 17 00:00:00 2001 From: Eran Friedman Date: Thu, 28 Dec 2017 18:11:34 +0200 Subject: [PATCH 135/253] Add default regex to detect iOS for unknown versions --- regexes.yaml | 3 +++ tests/test_os.yaml | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 100ccd3f..cc469033 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1122,6 +1122,9 @@ os_parsers: - regex: 'CFNetwork/8.* Darwin/(17)\.\d+' os_replacement: 'iOS' os_v1_replacement: '11' + - regex: 'CFNetwork/.* Darwin/' + os_replacement: 'iOS' + # iOS Apps - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' os_replacement: 'iOS' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 52aab265..59a2f30f 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2474,3 +2474,10 @@ test_cases: minor: '2' patch: patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/9999.99 Darwin/99.99.99' + family: 'iOS' + major: + minor: + patch: + patch_minor: From af07aafbf4c1f9515af99b8827534fa1f233143c Mon Sep 17 00:00:00 2001 From: Jay Klehr Date: Sat, 30 Dec 2017 07:22:36 +0000 Subject: [PATCH 136/253] Fixing yaml syntax in podcasting_user_agent_strings.yaml Symfony's yaml parser choked on these three lines since they're missing the colon. --- test_resources/podcasting_user_agent_strings.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test_resources/podcasting_user_agent_strings.yaml b/test_resources/podcasting_user_agent_strings.yaml index 17207a61..c2d609fa 100755 --- a/test_resources/podcasting_user_agent_strings.yaml +++ b/test_resources/podcasting_user_agent_strings.yaml @@ -278,19 +278,19 @@ test_cases: major: '10' minor: '0' patch: '0' - patch_minor '364' + patch_minor: '364' - user_agent_string: 'WMPlayer/10.0.0.364 guid/3300AD50-2C39-46C0-AE0A-AC7B8159E203' family: 'WMPlayer' major: '10' minor: '0' patch: '0' - patch_minor '364' + patch_minor: '364' - user_agent_string: 'AntennaPod/1.5.2.0' family: 'AntennaPod' major: '1' minor: '5' patch: '2' - patch_minor '0' + patch_minor: '0' - user_agent_string: 'Antenna/965 CFNetwork/758.2.8 Darwin/15.0.0' family: 'AntennaPod' major: '965' From 90e662e4ebe6ea40e987e2d5d0bc242138f2ff00 Mon Sep 17 00:00:00 2001 From: Armaan Dandavati Date: Fri, 5 Jan 2018 13:13:09 -0500 Subject: [PATCH 137/253] Update regexes.yaml to include Tableau --- regexes.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 100ccd3f..8e89825c 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -36,6 +36,10 @@ user_agent_parsers: # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' family_replacement: 'NewRelicPingerBot' + + # Tableau + - regex: '(Tableau)/(\d+)\.(\d+)' + family_replacement: 'Tableau' #StatusCake - regex: '(\(StatusCake\))' From 7c710841e9a50dd1f1d10a482eb4d10a1cc02a18 Mon Sep 17 00:00:00 2001 From: Armaan Dandavati Date: Fri, 5 Jan 2018 13:25:10 -0500 Subject: [PATCH 138/253] add test case for Tableau --- tests/test_ua.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index fd5278cc..d354f3a2 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7359,3 +7359,9 @@ test_cases: major: '9' minor: '0' patch: + + - user_agent_string: 'Tableau/1.0 (1025794)' + family: 'Tableau' + major: '1' + minor: '0' + patch: From a959220d4fee17a4ac2d4a71c4cdca588cc33e4e Mon Sep 17 00:00:00 2001 From: hichhock Date: Fri, 26 Jan 2018 12:57:12 +0200 Subject: [PATCH 139/253] Update regexes.yaml Add support for CFNetwork macOS Apps on macOS v. 10.13 --- regexes.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 100ccd3f..c0f4fe79 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1055,6 +1055,10 @@ os_parsers: # CFNetwork macOS Apps (must be before CFNetwork iOS Apps # @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history ########## + - regex: 'CFNetwork/.* Darwin/17\.\d+.*\(x86_64\)' + os_replacement: 'Mac OS X' + os_v1_replacement: '10' + os_v2_replacement: '13' - regex: 'CFNetwork/.* Darwin/16\.\d+.*\(x86_64\)' os_replacement: 'Mac OS X' os_v1_replacement: '10' From 73a92544b15400bb95458da496a4591e5dc4cec3 Mon Sep 17 00:00:00 2001 From: hichhock Date: Fri, 26 Jan 2018 14:01:33 +0200 Subject: [PATCH 140/253] Update test_os.yaml Added test --- tests/test_os.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 52aab265..035d3b58 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2474,3 +2474,10 @@ test_cases: minor: '2' patch: patch_minor: + + - user_agent_string: 'MyApp/1.0 CFNetwork/893.13.1 Darwin/17.3.0 (x86_64)' + family: 'Mac OS X' + major: '10' + minor: '13' + patch: + patch_minor: From d61510f9f741b87090010385c46b92930368605a Mon Sep 17 00:00:00 2001 From: Chris Cassell <2981417+ccassell@users.noreply.github.com> Date: Wed, 31 Jan 2018 08:37:01 -0500 Subject: [PATCH 141/253] Add support for OktaMobile --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index c26742fd..eddb8975 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -361,7 +361,7 @@ user_agent_parsers: family_replacement: 'HipChat Desktop Client' # Browser/major_version.minor_version.beta_version - - regex: '\b(MobileIron|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)' + - regex: '\b(MobileIron|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron|OktaMobile)/(\d+)\.(\d+)\.(\d+)' # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index d354f3a2..d47a035e 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7365,3 +7365,9 @@ test_cases: major: '1' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/11.2.5 Mobile/9B179 Safari/7534.48.3 OktaMobile/5.10.2' + family: 'OktaMobile' + major: '5' + minor: '10' + patch: '2' From 6196868e988f6debd5db569dca2dae0fd0d2abb9 Mon Sep 17 00:00:00 2001 From: Maria Gullickson Date: Wed, 14 Feb 2018 09:36:40 -0500 Subject: [PATCH 142/253] add some more matching for RCA phones --- regexes.yaml | 4 ++++ tests/test_device.yaml | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index c26742fd..b648d565 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3550,6 +3550,10 @@ device_parsers: device_replacement: '$1' brand_replacement: 'RCA' model_replacement: '$1' + - regex: '; (RCA \w+) Build/' + device_replacement: 'RCA $1' + brand_replacement: 'RCA' + model_replacement: '$1' ######### # Rockchip diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 392c25a8..45c315e4 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79945,6 +79945,11 @@ test_cases: brand: 'RCA' model: 'RCT6773W22B' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.2; RCA G1 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' + family: 'RCA G1' + brand: 'RCA' + model: 'G1' + - user_agent_string: 'WhatsApp/2.17.70 W' family: 'Spider' brand: 'Spider' From 818f908b9fd6211940fbfe85870a758fb57f7bf7 Mon Sep 17 00:00:00 2001 From: Maria Gullickson Date: Wed, 14 Feb 2018 09:39:19 -0500 Subject: [PATCH 143/253] little fix --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index b648d565..5a1a66e4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3550,7 +3550,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'RCA' model_replacement: '$1' - - regex: '; (RCA \w+) Build/' + - regex: '; RCA (\w+) Build/' device_replacement: 'RCA $1' brand_replacement: 'RCA' model_replacement: '$1' From 742fe3bd96e477759fcf365b85637a39570904ba Mon Sep 17 00:00:00 2001 From: Sun Knudsen Date: Wed, 14 Feb 2018 15:34:29 -0500 Subject: [PATCH 144/253] Fix merge conflict --- regexes.yaml | 4 ++-- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index eddb8975..b0366176 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -81,7 +81,7 @@ user_agent_parsers: family_replacement: 'Pinterestbot' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|BUbiNG|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' @@ -5093,7 +5093,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' + - regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index d47a035e..dc2ad642 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7371,3 +7371,15 @@ test_cases: major: '5' minor: '10' patch: '2' + + - user_agent_string: 'BUbiNG (+http://law.di.unimi.it/BUbiNG.html)' + family: 'BUbiNG' + major: + minor: + patch: + + - user_agent_string: 'Mozilla/5.0 (compatible; SemrushBot/1.2~bl; +http://www.semrush.com/bot.html)' + family: 'SemrushBot' + major: '1' + minor: '2' + patch: From 7be3ea4f48b48589c21dc30a8cd5b9c0b1bc5883 Mon Sep 17 00:00:00 2001 From: Chris Natter Date: Fri, 9 Feb 2018 14:15:01 -0500 Subject: [PATCH 145/253] Added support for Outlook >= 2.62.0 running on iOS --- regexes.yaml | 18 ++++++++++++++++++ tests/test_device.yaml | 5 +++++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 6 ++++++ 4 files changed, 36 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index be28a104..9bf34c05 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -589,6 +589,11 @@ user_agent_parsers: - regex: '(iPod|iPhone|iPad)' family_replacement: 'Mobile Safari UI/WKWebView' + ########################## + # Outlook on iOS >= 2.62.0 + ########################## + - regex: '(Outlook-iOS)/\d+\.\d+\.prod\.iphone \((\d+)\.(\d+)\.(\d+)\)' + - regex: '(AvantGo) (\d+).(\d+)' - regex: '(OneBrowser)/(\d+).(\d+)' @@ -1138,6 +1143,11 @@ os_parsers: os_replacement: 'iOS' - regex: '\((iOS);' + ########################## + # Outlook on iOS >= 2.62.0 + ########################## + - regex: 'Outlook-(iOS)/\d+\.\d+\.prod\.iphone' + ########## # Apple TV ########## @@ -4680,6 +4690,14 @@ device_parsers: brand_replacement: 'Apple' model_replacement: 'iOS-Device' + ########################## + # Outlook on iOS >= 2.62.0 + ########################## + - regex: 'Outlook-(iOS)/\d+\.\d+\.prod\.iphone' + brand_replacement: 'Apple' + device_replacement: 'iPhone' + model_replacement: 'iPhone' + ########## # Acer ########## diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 45c315e4..ff327714 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80014,3 +80014,8 @@ test_cases: family: 'Generic Smartphone' brand: 'Generic' model: 'Smartphone' + + - user_agent_string: 'Outlook-iOS/665.29827.prod.iphone (2.63.0)' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index bfd8e04c..def743bd 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2482,3 +2482,10 @@ test_cases: minor: '13' patch: patch_minor: + + - user_agent_string: 'Outlook-iOS/665.29827.prod.iphone (2.63.0)' + family: 'iOS' + major: + minor: + patch: + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index dc2ad642..a7e7d9aa 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7383,3 +7383,9 @@ test_cases: major: '1' minor: '2' patch: + + - user_agent_string: 'Outlook-iOS/665.29827.prod.iphone (2.63.0)' + family: 'Outlook-iOS' + major: '2' + minor: '63' + patch: '0' From 9a1357a2da970f67153bf5c5bd6b3a1ffe625af6 Mon Sep 17 00:00:00 2001 From: Chris Natter Date: Mon, 19 Feb 2018 14:32:37 -0500 Subject: [PATCH 146/253] Should account for Trident/8.0 - "Compatibility view of Win10 with Internet Explorer 11" --- regexes.yaml | 2 +- tests/test_ua.yaml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index be28a104..cd8517a9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -679,7 +679,7 @@ user_agent_parsers: - regex: '(Phantom)/V(\d+)\.(\d+)' family_replacement: 'Phantom Browser' - - regex: '(Trident)/(7)\.(0)' + - regex: '(Trident)/(7|8)\.(0)' family_replacement: 'IE' v1_replacement: '11' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index dc2ad642..d6608006 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7383,3 +7383,9 @@ test_cases: major: '1' minor: '2' patch: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)' + family: 'IE' + major: '11' + minor: '0' + patch: From 8f60df1b79839c0570b2d594fa090bb41ada8175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=C5=9Euhan?= Date: Sat, 24 Feb 2018 12:50:27 -0800 Subject: [PATCH 147/253] Fix ESPN Radio podcast catcher regex Make it more precise and compatible with Boost.Regex syntax as well. --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 9bf34c05..c5ab803b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -478,7 +478,7 @@ user_agent_parsers: family_replacement: 'FancyMusic' - regex: 'EspnDownloadManager' family_replacement: 'ESPN' - - regex: '(ESPN) Radio (\d+)\.(\d+)\.?(\d+)? ?[rv:]?(\d+)? ' + - regex: '(ESPN) Radio (\d+)\.(\d+)\.?(\d+)? ?(?:rv:(\d+))? ' - regex: '(podracer|jPodder) v ?(\d+)\.(\d+)\.?(\d+)?' - regex: '(ZDM)/(\d+)\.(\d+)[; ]?' - regex: '(Zune|BeyondPod) (\d+)\.?(\d+)?[\);]' From 7bdf6cbd21fdc28202f6db92485dda2c1b597bc1 Mon Sep 17 00:00:00 2001 From: "matthew.woolf@mailonline.co.uk" Date: Mon, 26 Feb 2018 15:16:36 +0000 Subject: [PATCH 148/253] Add "Instagram" app --- .gitignore | 4 +++- regexes.yaml | 2 ++ tests/test_device.yaml | 11 +++++++++++ tests/test_os.yaml | 15 +++++++++++++++ tests/test_ua.yaml | 12 ++++++++++++ 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 58b805fe..1f0a0808 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store -node_modules/ \ No newline at end of file +node_modules/ +/.project +/package-lock.json diff --git a/regexes.yaml b/regexes.yaml index 9bf34c05..16701098 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -105,6 +105,8 @@ user_agent_parsers: # Pinterest - regex: '\[(Pinterest)/[^\]]+\]' - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + # Instagram app + - regex: 'Mozilla.*Mobile.*(Instagram).(\d+)\.(\d+)\.(\d+)' # Pale Moon - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index ff327714..33bc8172 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80019,3 +80019,14 @@ test_cases: family: 'iPhone' brand: 'Apple' model: 'iPhone' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; LG-TP260 Build/NRD90U; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Instagram 33.0.0.11.92 Android (24/7.0; 320dpi; 720x1193; LGE/lge; LG-TP260; lv517; lv517; en_US; 93117667)' + family: 'LG-TP260' + brand: 'LG' + model: 'TP260' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 Instagram 33.0.0.11.96 (iPhone9,3; iOS 11_2_5; en_AU; en-AU; scale=2.00; gamut=wide; 750x1334)' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone9,3' + \ No newline at end of file diff --git a/tests/test_os.yaml b/tests/test_os.yaml index def743bd..806783e5 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2489,3 +2489,18 @@ test_cases: minor: patch: patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; LG-TP260 Build/NRD90U; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Instagram 33.0.0.11.92 Android (24/7.0; 320dpi; 720x1193; LGE/lge; LG-TP260; lv517; lv517; en_US; 93117667)' + family: 'Android' + major: '7' + minor: '0' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 Instagram 33.0.0.11.96 (iPhone9,3; iOS 11_2_5; en_AU; en-AU; scale=2.00; gamut=wide; 750x1334)' + family: 'iOS' + major: '11' + minor: '2' + patch: '5' + patch_minor: + \ No newline at end of file diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a7e7d9aa..7a6653ce 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7389,3 +7389,15 @@ test_cases: major: '2' minor: '63' patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; LG-TP260 Build/NRD90U; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Instagram 33.0.0.11.92 Android (24/7.0; 320dpi; 720x1193; LGE/lge; LG-TP260; lv517; lv517; en_US; 93117667)' + family: 'Instagram' + major: '33' + minor: '0' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 Instagram 33.0.0.11.96 (iPhone9,3; iOS 11_2_5; en_AU; en-AU; scale=2.00; gamut=wide; 750x1334)' + family: 'Instagram' + major: '33' + minor: '0' + patch: '0' From f813c4b3ac8a89c2be64dc271c58ca074b1fb8d1 Mon Sep 17 00:00:00 2001 From: "matthew.woolf@mailonline.co.uk" Date: Tue, 27 Feb 2018 11:44:35 +0000 Subject: [PATCH 149/253] Add "Flipboard" (iOS,Android) and "Onefootball" (Android) apps --- regexes.yaml | 4 ++++ tests/test_device.yaml | 17 ++++++++++++++++- tests/test_os.yaml | 23 ++++++++++++++++++++++- tests/test_ua.yaml | 20 ++++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 16701098..b9af3b4f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -107,6 +107,10 @@ user_agent_parsers: - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Instagram app - regex: 'Mozilla.*Mobile.*(Instagram).(\d+)\.(\d+)\.(\d+)' + # Flipbaord app + - regex: 'Mozilla.*Mobile.*(Flipboard).(\d+)\.(\d+)\.(\d+)' + # Onefootball app + - regex: 'Mozilla.*Mobile.*(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)' # Pale Moon - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 33bc8172..927177f4 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80029,4 +80029,19 @@ test_cases: family: 'iPhone' brand: 'Apple' model: 'iPhone9,3' - \ No newline at end of file + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' + family: 'iPhone' + brand: 'Apple' + model: 'iPhone' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 Flipboard/4.1.9/4323,4.1.9.4323' + family: 'Samsung SM-G610F' + brand: 'Samsung' + model: 'SM-G610F' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Onefootball/Android/9.10.6' + family: 'Samsung SM-G930F' + brand: 'Samsung' + model: 'SM-G930F' + diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 806783e5..a643bb8a 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2503,4 +2503,25 @@ test_cases: minor: '2' patch: '5' patch_minor: - \ No newline at end of file + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' + family: 'iOS' + major: '11' + minor: '2' + patch: '6' + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 Flipboard/4.1.9/4323,4.1.9.4323' + family: 'Android' + major: '7' + minor: '0' + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Onefootball/Android/9.10.6' + family: 'Android' + major: '7' + minor: '0' + patch: + patch_minor: + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 7a6653ce..ea839a24 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7401,3 +7401,23 @@ test_cases: major: '33' minor: '0' patch: '0' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' + family: 'Flipboard' + major: '4' + minor: '2' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 Flipboard/4.1.9/4323,4.1.9.4323' + family: 'Flipboard' + major: '4' + minor: '1' + patch: '9' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Onefootball/Android/9.10.6' + family: 'Onefootball' + major: '9' + minor: '10' + patch: '6' + + \ No newline at end of file From 45fb2153b47f717bc5d62765b0c69c7cdfce82b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20M=C3=B6sner?= Date: Fri, 9 Mar 2018 15:25:42 +0100 Subject: [PATCH 150/253] updated test cases for SznProhlizec; new family name --- regexes.yaml | 6 +++--- tests/test_ua.yaml | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 9bf34c05..1aafb68d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -36,7 +36,7 @@ user_agent_parsers: # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' family_replacement: 'NewRelicPingerBot' - + # Tableau - regex: '(Tableau)/(\d+)\.(\d+)' family_replacement: 'Tableau' @@ -270,7 +270,7 @@ user_agent_parsers: # Seznam.cz browser (based on WebKit) - regex: '(SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+))?' - family_replacement: 'Seznam.cz' + family_replacement: 'Seznam prohlížeč' # Coc Coc browser, based on Chrome (used in Vietnam) - regex: '(coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+))?' @@ -683,7 +683,7 @@ user_agent_parsers: - regex: '(Phantom)/V(\d+)\.(\d+)' family_replacement: 'Phantom Browser' - + - regex: '(Trident)/(7)\.(0)' family_replacement: 'IE' v1_replacement: '11' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a7e7d9aa..fd550423 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7167,15 +7167,26 @@ test_cases: minor: '0' patch: + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 SznProhlizec/4.3.0-251281' + family: 'Seznam prohlížeč' + major: '4' + minor: '3' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 SznProhlizec/5.2.1a' + family: 'Seznam prohlížeč' + major: '5' + minor: '2' + patch: '1' - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 SznProhlizec/3.8.4 NWjs/0.19.6' - family: 'Seznam.cz' + family: 'Seznam prohlížeč' major: '3' minor: '8' patch: '4' - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 SznProhlizec/4.4i' - family: 'Seznam.cz' + family: 'Seznam prohlížeč' major: '4' minor: '4' patch: From 576ff88e526e3812abbbfa75c00e94f4bc54cb42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannik=20Schu=CC=88rg?= Date: Mon, 12 Mar 2018 16:03:07 +0100 Subject: [PATCH 151/253] Replace empty alternations by optional group A popular regexp implementation of Rust does not allow empty alternations. --- regexes.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 9bf34c05..777316db 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2489,7 +2489,7 @@ device_parsers: device_replacement: '$1 $2' brand_replacement: 'iBall' model_replacement: '$1 $2' - - regex: '; *(IBall)(?:[ _]([^;/]+)|) Build' + - regex: '; *(IBall)(?:[ _]([^;/]+))? Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'iBall' @@ -4848,7 +4848,7 @@ device_parsers: ########## # LGE NetCast TV ########## - - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media|)-\d+' + - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media)?-\d+' device_replacement: 'NetCast$2' brand_replacement: 'LG' model_replacement: '$1' From 29aeffb73a0c5ca01cd7b60cadeff02fd9cb1ccb Mon Sep 17 00:00:00 2001 From: "matthew.woolf@mailonline.co.uk" Date: Wed, 14 Mar 2018 17:00:43 +0000 Subject: [PATCH 152/253] Add "Flipboard-Briefing" and tests --- regexes.yaml | 2 ++ tests/test_device.yaml | 4 ++++ tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 7 ++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index b9af3b4f..f93f5c2f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -109,6 +109,8 @@ user_agent_parsers: - regex: 'Mozilla.*Mobile.*(Instagram).(\d+)\.(\d+)\.(\d+)' # Flipbaord app - regex: 'Mozilla.*Mobile.*(Flipboard).(\d+)\.(\d+)\.(\d+)' + # Flipbaord-briefing app + - regex: 'Mozilla.*Mobile.*(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)' # Onefootball app - regex: 'Mozilla.*Mobile.*(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 927177f4..86e4aea0 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80045,3 +80045,7 @@ test_cases: brand: 'Samsung' model: 'SM-G930F' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-A520F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 Flipboard-Briefing/2.7.28' + family: 'Samsung SM-A520F' + brand: 'Samsung' + model: 'SM-A520F' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index a643bb8a..26ba3123 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2524,4 +2524,11 @@ test_cases: minor: '0' patch: patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-A520F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 Flipboard-Briefing/2.7.28' + family: 'Android' + major: '7' + minor: '0' + patch: + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index ea839a24..9362e725 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7420,4 +7420,9 @@ test_cases: minor: '10' patch: '6' - \ No newline at end of file + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-A520F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 Flipboard-Briefing/2.7.28' + family: 'Flipboard-Briefing' + major: '2' + minor: '7' + patch: '28' + From cb7843789f3b3de6544f859c0015b89840081a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=C5=9Euhan?= Date: Tue, 20 Mar 2018 20:17:01 -0700 Subject: [PATCH 153/253] Add ESPN Radio podcast tests to test_ua.yaml --- tests/test_ua.yaml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a7e7d9aa..5a438c29 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7389,3 +7389,28 @@ test_cases: major: '2' minor: '63' patch: '0' + + - user_agent_string: 'ESPN Radio/3.2.113 CFNetwork/485.12.30 Darwin/10.4.0' + family: 'ESPN' + major: '3' + minor: '2' + patch: '113' + + - user_agent_string: 'ESPN Radio 4.7.4 rv:1032 (iPhone; iPhone OS 9.2.1; en_US)' + family: 'ESPN' + major: '4' + minor: '7' + patch: '4' + patch_minor: '1032' + + - user_agent_string: 'ESPN Radio 4.5.1 (iPhone; iPhone OS 5.1.1; en_US)' + family: 'ESPN' + major: '4' + minor: '5' + patch: '1' + + - user_agent_string: 'ESPN Radio 4.0 (iPhone; iPhone OS 7.1.2; en_AU)' + family: 'ESPN' + major: '4' + minor: '0' + patch: From d0e9ca06fa17ec6b48b29d79f99985c1f1dbf3d2 Mon Sep 17 00:00:00 2001 From: Samuele Kaplun Date: Tue, 20 Mar 2018 13:42:52 +0100 Subject: [PATCH 154/253] Add Waterfox/Basilisk Firefox variants --- regexes.yaml | 8 ++++++-- tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 9a3b2665..67d2bfd6 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -95,8 +95,8 @@ user_agent_parsers: # See os_parsers if you want to target a specific TV - regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \(' - # must go before Firefox to catch Chimera/SeaMonkey/Camino - - regex: '(Chimera|SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' + # must go before Firefox to catch Chimera/SeaMonkey/Camino/Waterfox + - regex: '(Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' # Social Networks # Facebook @@ -106,6 +106,10 @@ user_agent_parsers: - regex: '\[(Pinterest)/[^\]]+\]' - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + # Basilisk + - regex: '(Firefox)/(\d+)\.(\d+) Basilisk/(\d+)' + family_replacement: 'Basilisk' + # Pale Moon - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' family_replacement: 'Pale Moon' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 756437c8..af3c9104 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7431,3 +7431,15 @@ test_cases: major: '4' minor: '0' patch: + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.2.2 Waterfox/55.2.2' + family: 'Waterfox' + major: '55' + minor: '2' + patch: '2' + + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Goanna/4.0 Firefox/55.0 Basilisk/20171113' + family: 'Basilisk' + major: '55' + minor: '0' + patch: '20171113' From 12ff1d2ccbd30ece74cafa4029dbb7ab840ed5d2 Mon Sep 17 00:00:00 2001 From: Sun Knudsen Date: Fri, 6 Apr 2018 06:57:43 -0400 Subject: [PATCH 155/253] Removed .project from .gitignore --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1f0a0808..e617da44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ .DS_Store node_modules/ -/.project -/package-lock.json +package-lock.json From b91a65fc8072d59a5a3489b332707987f1407791 Mon Sep 17 00:00:00 2001 From: Alexander Clouter Date: Fri, 6 Apr 2018 18:52:35 +0100 Subject: [PATCH 156/253] fix invalid indentation in yaml --- tests/test_device.yaml | 2 +- tests/test_os.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 86e4aea0..6049d63a 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80030,7 +80030,7 @@ test_cases: brand: 'Apple' model: 'iPhone9,3' - - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' family: 'iPhone' brand: 'Apple' model: 'iPhone' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 26ba3123..162883f9 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2504,7 +2504,7 @@ test_cases: patch: '5' patch_minor: - - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' family: 'iOS' major: '11' minor: '2' From 33dd2fa48b044de46cce89aa08f263f2c8645b5b Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 27 Apr 2018 10:01:15 +0200 Subject: [PATCH 157/253] Add HTTP clients for Go, Scala, Rust (reqwest) --- regexes.yaml | 2 +- tests/test_ua.yaml | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 42f6dcc0..12272a24 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -74,7 +74,7 @@ user_agent_parsers: - regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+))?' # Downloader ... - - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' # Pinterestbot - regex: '(Pinterest(?:bot)?)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?[;\s\(]+\+https://www.pinterest.com/bot.html' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 21a0a05c..df014d42 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7480,3 +7480,22 @@ test_cases: major: '55' minor: '0' patch: '20171113' + + - user_agent_string: 'Go-http-client/1.1' + family: 'Go-http-client' + major: '1' + minor: '1' + patch: + + - user_agent_string: 'scalaj-http/1.0' + family: 'scalaj-http' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'reqwest/0.8.1' + family: 'reqwest' + major: '0' + minor: '8' + patch: '1' + From 9c38d46c4d2453db8eeeebec4eea83cca7473f21 Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 27 Apr 2018 10:06:03 +0200 Subject: [PATCH 158/253] Add clients to access AWS S3 (Simple Storage Service) --- regexes.yaml | 4 +++ tests/test_ua.yaml | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 12272a24..98169f43 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -83,6 +83,10 @@ user_agent_parsers: # Bots - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|BUbiNG|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + # AWS S3 Clients + # must come before "Bots General matcher" to catch "boto"/"boto3" before "bot" + - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?))|s3fs)/(\d+)\.(\d+)(?:\.(\d+))?' + # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Bots General matcher 'name 0.0' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index df014d42..a2168e6d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7499,3 +7499,81 @@ test_cases: minor: '8' patch: '1' + - user_agent_string: 'Boto/2.48.0 Python/2.7.14 Linux/4.2.0-41-generic' + family: 'Boto' + major: '2' + minor: '48' + patch: '0' + + - user_agent_string: 'aws-cli/1.14.9 Python/2.7.12 Linux/4.9.76-3.78.amzn1.x86_64 botocore/1.8.13' + family: 'aws-cli' + major: '1' + minor: '14' + patch: '9' + + - user_agent_string: 'Boto3/1.6.2 Python/3.4.3 Linux/4.4.35-33.55.amzn1.x86_64 Botocore/1.9.2 Resource' + family: 'Boto3' + major: '1' + minor: '6' + patch: '2' + + - user_agent_string: 'ElasticMapReduce/1.0.0 emrfs/s3n {}, aws-sdk-java/1.11.129 Linux/4.4.35-33.55.amzn1.x86_64 OpenJDK_64-Bit_Server_VM/25.141-b16/1.8.0_141 scala/2.11.8' + family: 'aws-sdk-java' + major: '1' + minor: '11' + patch: '129' + + - user_agent_string: 'Hadoop 2.6.0-cdh5.14.0, aws-sdk-java/1.11.134 Linux/4.4.0-1052-aws OpenJDK_64-Bit_Server_VM/25.151-b12/1.8.0_151' + family: 'aws-sdk-java' + major: '1' + minor: '11' + patch: '134' + + - user_agent_string: 'Hadoop 2.8.3-amzn-0, aws-sdk-java/1.11.267 Linux/4.9.77-31.58.amzn1.x86_64 OpenJDK_64-Bit_Server_VM/25.161-b14 java/1.8.0_161 scala/2.11.8' + family: 'aws-sdk-java' + major: '1' + minor: '11' + patch: '267' + + - user_agent_string: 'aws-sdk-java/1.11.226 Mac_OS_X/10.12.6 Java_HotSpot(TM)_64-Bit_Server_VM/25.131-b11 java/1.8.0_131 scala/2.11.11' + family: 'aws-sdk-java' + major: '1' + minor: '11' + patch: '226' + + - user_agent_string: 'aws-sdk-ruby2/2.2.18 ruby/2.1.5 x86_64-linux' + family: 'aws-sdk-ruby2' + major: '2' + minor: '2' + patch: '18' + + - user_agent_string: 'aws-sdk-cpp/1.0.64 Linux/4.4.0-66-generic x86_64' + family: 'aws-sdk-cpp' + major: '1' + minor: '0' + patch: '64' + + - user_agent_string: 'aws-sdk-go/1.4.12 (go1.6; linux; amd64) S3Manager' + family: 'aws-sdk-go' + major: '1' + minor: '4' + patch: '12' + + - user_agent_string: 'aws-sdk-nodejs/2.141.0 win32/v8.4.0' + family: 'aws-sdk-nodejs' + major: '2' + minor: '141' + patch: '0' + + - user_agent_string: 'JetS3t/0.9.0 (Linux/4.4.0-1044-aws; amd64; en; JVM 1.8.0_131)' + family: 'JetS3t' + major: '0' + minor: '9' + patch: '0' + + - user_agent_string: 's3fs/1.80 (commit hash 6be3236; OpenSSL)' + family: 's3fs' + major: '1' + minor: '80' + patch: + From 82dff5701f53e31dab3ba5ee4c0bb0c5a63d3b1c Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 27 Apr 2018 10:29:23 +0200 Subject: [PATCH 159/253] Add cloud storage clients: https://cyberduck.io/, https://rclone.org/ and http://s3browser.com/ --- regexes.yaml | 6 ++++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 98169f43..a90688c9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -742,6 +742,12 @@ user_agent_parsers: - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' + # Cloud Storage Clients + - regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+)?' + - regex: '^(S3 Browser) (\d+)-(\d+)-(\d+)(?:\s*http://s3browser\.com)?' + # rclone - rsync for cloud storage - https://rclone.org/ + - regex: '^(rclone)/v(\d+)\.(\d+)' + # Roku Digital-Video-Players https://www.roku.com/ - regex: '^(Roku)/DVP-(\d+)\.(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a2168e6d..c1a06e8f 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7577,3 +7577,21 @@ test_cases: minor: '80' patch: + - user_agent_string: 'Cyberduck/6.3.0.27105 (Windows 10/10.0) (x86)' + family: 'Cyberduck' + major: '6' + minor: '3' + patch: '0' + + - user_agent_string: 'S3 Browser 7-4-5 https://s3browser.com' + family: 'S3 Browser' + major: '7' + minor: '4' + patch: '5' + + - user_agent_string: 'rclone/v1.34' + family: 'rclone' + major: '1' + minor: '34' + patch: + From 1cdb34855f2843273eee6f36b1b4ca2a2ef4bcb2 Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 27 Apr 2018 10:31:41 +0200 Subject: [PATCH 160/253] Add download clients lftp (https://lftp.yar.ru/), Axel (https://github.com/axel-download-accelerator/axel), aria2 (https://aria2.github.io/) and PycURL (http://pycurl.io/) --- regexes.yaml | 2 +- tests/test_ua.yaml | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index a90688c9..dc7b17cd 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -738,7 +738,7 @@ user_agent_parsers: family_replacement: 'Python Requests' # headless user-agents - - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|Wget|OpenBSD ftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c1a06e8f..2254bd34 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7595,3 +7595,27 @@ test_cases: minor: '34' patch: + - user_agent_string: 'PycURL/7.43.0 libcurl/7.38.0 OpenSSL/1.0.1t zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3' + family: 'PycURL' + major: '7' + minor: '43' + patch: '0' + + - user_agent_string: 'Axel 2.4 (Linux)' + family: 'Axel' + major: '2' + minor: '4' + patch: + + - user_agent_string: 'lftp/4.7.7' + family: 'lftp' + major: '4' + minor: '7' + patch: '7' + + - user_agent_string: 'aria2/1.19.0' + family: 'aria2' + major: '1' + minor: '19' + patch: '0' + From 02162fc43d43e2476f0df90d70fb1c23b2ee87d9 Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 27 Apr 2018 10:33:12 +0200 Subject: [PATCH 161/253] Add variants of Linux OS sent via Wget --- regexes.yaml | 7 +++++++ tests/test_os.yaml | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index dc7b17cd..d6215854 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1326,6 +1326,13 @@ os_parsers: - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?' - regex: 'SunOS' os_replacement: 'Solaris' + # Wget/x.x.x (linux-gnu) + - regex: '\(linux-gnu\)' + os_replacement: 'Linux' + - regex: '\(x86_64-redhat-linux-gnu\)' + os_replacement: 'Red Hat' + - regex: '\((freebsd)(\d+)\.(\d+)\)' + os_replacement: 'FreeBSD' # Roku Digital-Video-Players https://www.roku.com/ - regex: '^(Roku)/DVP-(\d+)\.(\d+)' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 162883f9..11417fff 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2532,3 +2532,24 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Wget/1.18 (linux-gnu)' + family: 'Linux' + major: + minor: + patch: + patch_minor: + + - user_agent_string: 'Wget/1.18 (freebsd10.3)' + family: 'FreeBSD' + major: '10' + minor: '3' + patch: + patch_minor: + + - user_agent_string: 'curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2' + family: 'Red Hat' + major: + minor: + patch: + patch_minor: + From b6df6171b6054efe838590432500f763ed9f25c1 Mon Sep 17 00:00:00 2001 From: kevin Date: Tue, 15 May 2018 10:10:30 +0900 Subject: [PATCH 162/253] Add Naver Yeti and Daum to Spiders regex --- regexes.yaml | 2 +- tests/test_device.yaml | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index e5ba7af3..5de489d1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -5148,7 +5148,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' + - regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Daum|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify|Yeti)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 6049d63a..7f3e62e0 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79760,6 +79760,16 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (compatible; Yeti/1.1; +http://naver.me/spd)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (compatible; Daum/4.1; +http://cs.daum.net/faq/15/4118.html?faqId=28966)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'NewsGator FetchLinks extension/0.2.0 (http://graemef.com)' family: 'Spider' brand: 'Spider' From 98e276f4f7ad001f2b4d0922bad6b64fdf42631d Mon Sep 17 00:00:00 2001 From: Sheehan Khan Date: Mon, 21 May 2018 16:33:20 -0400 Subject: [PATCH 163/253] Added OS and UserAgent parser for Salesforce UA on Android --- regexes.yaml | 7 +++++++ tests/test_os.yaml | 14 ++++++++++++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 5de489d1..29c4cae6 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -41,6 +41,9 @@ user_agent_parsers: - regex: '(Tableau)/(\d+)\.(\d+)' family_replacement: 'Tableau' + # Salesforce + - regex: '(Salesforce)(?:.)\/(\d+)\.(\d?)' + #StatusCake - regex: '(\(StatusCake\))' family_replacement: 'StatusCakeBot' @@ -867,6 +870,10 @@ os_parsers: - regex: '^(JUC).*; ?U; ?(?:Android)?(\d+)\.(\d+)(?:[\.\-]([a-z0-9]+))?' os_replacement: 'Android' + # Salesforce + - regex: '(android)\s(?:mobile\/)(\d+)\.(\d+)\.?(\d+)?' + os_replacement: 'Android' + ########## # Kindle Android ########## diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 11417fff..ea546641 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2553,3 +2553,17 @@ test_cases: patch: patch_minor: + - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/8.0.0 (SM-G955F) Salesforce1/15.2 Native uid_c4589f605fad8c7e ftr_ Cordova/6.2.3' + family: 'Android' + major: '8' + minor: '0' + patch: '0' + patch_minor: + + - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/7.0 (SM-G955U) Salesforce1/15.2 Native uid_4ec4068eddf27447 ftr_ Cordova/6.2.3' + family: 'Android' + major: '7' + minor: '0' + patch: + patch_minor: + diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 2254bd34..03e234d4 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7619,3 +7619,9 @@ test_cases: minor: '19' patch: '0' + - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/7.1.1 (XT1635-02) Salesforce1/15.2 Native uid_bef1747905d064c6 ftr_ Cordova/6.2.3' + family: 'Salesforce' + major: '15' + minor: '2' + patch: + From 85663a6b69e989089898a0b0e512c303cbb491ff Mon Sep 17 00:00:00 2001 From: "Louis R. Marascio" Date: Tue, 5 Jun 2018 17:51:21 -0500 Subject: [PATCH 164/253] Add support for patch_minor when detecting Chrome. --- regexes.yaml | 2 +- tests/test_ua.yaml | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 29c4cae6..c63ef16a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -457,7 +457,7 @@ user_agent_parsers: - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' # Chrome/Chromium/major_version.minor_version - - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?(?:\.(\d+))?' ########## # IE Mobile needs to happen before Android to catch cases such as: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 03e234d4..974a62c7 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -2378,12 +2378,21 @@ test_cases: major: '60' minor: '0' patch: '3112' + patch_minor: '78' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112 Safari/537.36' + family: 'Chrome' + major: '60' + minor: '0' + patch: '3112' + patch_minor: - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' family: 'Chrome' major: '27' minor: '0' patch: + patch_minor: - user_agent_string: 'HiddenMarket-1.0-beta (www.hiddenmarket.net/crawler.php)' family: 'HiddenMarket' From 8742df1dae404354b54a7eec4d172765044cfd8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannik=20Schu=CC=88rg?= Date: Mon, 12 Mar 2018 16:03:07 +0100 Subject: [PATCH 165/253] Replace empty alternations by optional group A popular regexp implementation of Rust does not allow empty alternations. --- regexes.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index d6215854..e5ba7af3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2518,7 +2518,7 @@ device_parsers: device_replacement: '$1 $2' brand_replacement: 'iBall' model_replacement: '$1 $2' - - regex: '; *(IBall)(?:[ _]([^;/]+)|) Build' + - regex: '; *(IBall)(?:[ _]([^;/]+))? Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'iBall' @@ -4877,7 +4877,7 @@ device_parsers: ########## # LGE NetCast TV ########## - - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media|)-\d+' + - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media)?-\d+' device_replacement: 'NetCast$2' brand_replacement: 'LG' model_replacement: '$1' From d7cd67dee49345ff63e69710f76343fa0e53d899 Mon Sep 17 00:00:00 2001 From: kevin Date: Tue, 15 May 2018 10:10:30 +0900 Subject: [PATCH 166/253] Add Naver Yeti and Daum to Spiders regex --- regexes.yaml | 2 +- tests/test_device.yaml | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index e5ba7af3..5de489d1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -5148,7 +5148,7 @@ device_parsers: ########## # Spiders (this is hack...) ########## - - regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify)' + - regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Daum|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify|Yeti)' regex_flag: 'i' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 6049d63a..7f3e62e0 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79760,6 +79760,16 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (compatible; Yeti/1.1; +http://naver.me/spd)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (compatible; Daum/4.1; +http://cs.daum.net/faq/15/4118.html?faqId=28966)' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'NewsGator FetchLinks extension/0.2.0 (http://graemef.com)' family: 'Spider' brand: 'Spider' From 54e9181cf5f5f7295c0d16446d0729c030c4cd8a Mon Sep 17 00:00:00 2001 From: Gurvinder Singh Date: Mon, 28 May 2018 11:44:47 +0200 Subject: [PATCH 167/253] add support for mac os detection when agent is macoutlook --- regexes.yaml | 5 +++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 5de489d1..24718580 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -975,6 +975,11 @@ os_parsers: ########## - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)' os_replacement: 'Mac OS X' + - regex: '(\w+\s+Mac OS X\s+\w+\s+(\d+).(\d+).(\d+).*)' + os_replacement: 'Mac OS X' + os_v1_replacement: '$2' + os_v2_replacement: '$3' + os_v3_replacement: '$4' # Leopard - regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)' os_replacement: 'Mac OS X' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 11417fff..d3788824 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -378,6 +378,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'MacOutlook/16.12.0.180401 (Intelx64 Mac OS X Version 10.12.6 (build 16G29))' + family: 'Mac OS X' + major: '10' + minor: '12' + patch: '6' + patch_minor: + - user_agent_string: 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13' family: 'MeeGo' major: From 89167d468ec138ea362a4e72314df2e04e5fcbc9 Mon Sep 17 00:00:00 2001 From: "Louis R. Marascio" Date: Wed, 6 Jun 2018 14:48:14 -0500 Subject: [PATCH 168/253] Add patch_minor to other Chrome test cases --- tests/test_ua.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 974a62c7..1c63fd29 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -215,30 +215,35 @@ test_cases: major: '58' minor: '0' patch: '3029' + patch_minor: '83' - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.2; Galaxy Nexus Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Chrome Mobile' major: '18' minor: '0' patch: '1025' + patch_minor: '166' - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.1; SPH-L710 Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Chrome Mobile' major: '18' minor: '0' patch: '1025' + patch_minor: '166' - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 5 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' family: 'Chrome Mobile' major: '35' minor: '0' patch: '1916' + patch_minor: '122' - user_agent_string: 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16' family: 'Chromium' major: '10' minor: '0' patch: '648' + patch_minor: '133' - user_agent_string: 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Comodo_Dragon/4.1.1.11 Chrome/4.1.249.1042 Safari/532.5' family: 'Comodo Dragon' @@ -6845,18 +6850,21 @@ test_cases: major: '18' minor: '0' patch: '1025' + patch_minor: '166' - user_agent_string: 'Mozilla/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) Chrome/19.0.1084.60 Mobile/9B206 Safari/7534.48.3' family: 'Chrome Mobile' major: '19' minor: '0' patch: '1084' + patch_minor: '60' - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.4.4; de-de; SM-G850F Build/KTU84P) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16 Chrome/33.0.0.0' family: 'Chrome Mobile' major: '33' minor: '0' patch: '0' + patch_minor: '0' - user_agent_string: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41' family: 'Safari' From 5efbdcc8a8f5d46a52e890d616e1af3029244bf7 Mon Sep 17 00:00:00 2001 From: Geoff Keyes Date: Tue, 12 Jun 2018 17:56:56 -0400 Subject: [PATCH 169/253] Update Android Regex to allow for single digit OS versions The current Android 9 user agent is as follows Mozilla/5.0 (Linux; Android 9; Pixel Build/PPP3.180510.008) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.81 Mobile Safari/537.36 This commit allows the code to parse 9 as a valid OS version. --- regexes.yaml | 2 +- tests/test_os.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 29c4cae6..0f2788c8 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -838,7 +838,7 @@ os_parsers: # Android # can actually detect rooted android os. do we care? ########## - - regex: '(Android)[ \-/](\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?' + - regex: '(Android)[ \-/](\d+)\.?(\d+)?(?:[.\-]([a-z0-9]+))?' - regex: '(Android) Donut' os_v1_replacement: '1' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index ea546641..0efcef09 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2567,3 +2567,10 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 9; Pixel Build/PPP3.180510.008) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.81 Mobile Safari/537.36' + family: 'Android' + major: '9' + minor: + patch: + patch_minor: + From 664fff0ebaeaa5b37ee4ef6baae07180332c6ade Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 22 Jun 2018 15:06:28 +1000 Subject: [PATCH 170/253] Added Apple Watch and HomePod devices --- regexes.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 29c4cae6..7d86af7d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4705,6 +4705,14 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Apple' model_replacement: '$1' + - regex: '(Apple Watch)(?:;| Simulator;)' + device_replacement: '$1' + brand_replacement: 'Apple' + model_replacement: '$1' + - regex: '(HomePod)(?:;| Simulator;)' + device_replacement: '$1' + brand_replacement: 'Apple' + model_replacement: '$1' - regex: 'iPhone' device_replacement: 'iPhone' brand_replacement: 'Apple' From cefc647d2d1234cbee5ef365b882fd3ade48aa98 Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 22 Jun 2018 15:12:16 +1000 Subject: [PATCH 171/253] Added tests for Apple Watch & HomePod --- tests/test_device.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 7f3e62e0..3a97d635 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -90,6 +90,16 @@ test_cases: brand: 'Apple' model: 'iPhone' + - user_agent_string: 'AppleCoreMedia/1.0.0.16R5303d (Apple Watch; U; CPU OS 5_0 like Mac OS X; en_au)' + family: 'iPhone' + brand: 'Apple' + model: 'Apple Watch' + + - user_agent_string: 'AppleCoreMedia/1.0.0.16A303 (HomePod; U; CPU OS 12_0 like Mac OS X; en_us)' + family: 'iPhone' + brand: 'Apple' + model: 'HomePod' + - user_agent_string: 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5' family: 'iPod' brand: 'Apple' From 4a04cc6c10489ec69103bc963d7fd77cc2c73d0b Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 22 Jun 2018 15:15:31 +1000 Subject: [PATCH 172/253] Fixed test --- tests/test_device.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 3a97d635..9235f655 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -91,12 +91,12 @@ test_cases: model: 'iPhone' - user_agent_string: 'AppleCoreMedia/1.0.0.16R5303d (Apple Watch; U; CPU OS 5_0 like Mac OS X; en_au)' - family: 'iPhone' + family: 'Apple Watch' brand: 'Apple' model: 'Apple Watch' - user_agent_string: 'AppleCoreMedia/1.0.0.16A303 (HomePod; U; CPU OS 12_0 like Mac OS X; en_us)' - family: 'iPhone' + family: 'HomePod' brand: 'Apple' model: 'HomePod' From 463a8082e0f78cf3d2fd66bbb1150349e76e1760 Mon Sep 17 00:00:00 2001 From: Thomas Decaux Date: Thu, 28 Jun 2018 10:33:44 +0200 Subject: [PATCH 173/253] Fix #326: add insomnia user-agent --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 29c4cae6..c1be422a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -741,7 +741,7 @@ user_agent_parsers: family_replacement: 'Python Requests' # headless user-agents - - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' From 07265f61eca74bb8802c18b81dcdc04d59b54fd9 Mon Sep 17 00:00:00 2001 From: Vitaliy Khamin Date: Tue, 17 Jul 2018 14:37:11 +0500 Subject: [PATCH 174/253] iOS CFNetwork recognition update - 9.3.x - 10.2.1 - 11.2.6 - 11.3 - 11.4.x - 12 Signed-off-by: Vitaliy Khamin --- regexes.yaml | 45 +++++++++++++++++++++++++++++++++ tests/test_os.yaml | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 29c4cae6..e23cee41 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1082,9 +1082,29 @@ os_parsers: os_replacement: 'Mac OS X' os_v1_replacement: '10' os_v2_replacement: '11' + - regex: 'CFNetwork/7.* Darwin/15\.4\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '9' + os_v2_replacement: '3' + os_v3_replacement: '1' + - regex: 'CFNetwork/7.* Darwin/15\.5\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '9' + os_v2_replacement: '3' + os_v3_replacement: '2' + - regex: 'CFNetwork/7.* Darwin/15\.6\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '9' + os_v2_replacement: '3' + os_v3_replacement: '5' - regex: '(CF)(Network)/758\.(\d)' os_replacement: 'iOS' os_v1_replacement: '9' + - regex: 'CFNetwork/808\.3 Darwin/16\.3\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '10' + os_v2_replacement: '2' + os_v3_replacement: '1' - regex: '(CF)(Network)/808\.(\d)' os_replacement: 'iOS' os_v1_replacement: '10' @@ -1161,9 +1181,34 @@ os_parsers: os_replacement: 'iOS' os_v1_replacement: '11' os_v2_replacement: '2' + - regex: 'CFNetwork/8.* Darwin/17\.4\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '2' + os_v3_replacement: '6' + - regex: 'CFNetwork/8.* Darwin/17\.5\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '3' + - regex: 'CFNetwork/9.* Darwin/17\.6\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '4' + - regex: 'CFNetwork/9.* Darwin/17\.7\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '11' + os_v2_replacement: '4' + os_v3_replacement: '1' - regex: 'CFNetwork/8.* Darwin/(17)\.\d+' os_replacement: 'iOS' os_v1_replacement: '11' + - regex: 'CFNetwork/9.* Darwin/18\.0\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '12' + os_v2_replacement: '0' + - regex: 'CFNetwork/9.* Darwin/(18)\.\d+' + os_replacement: 'iOS' + os_v1_replacement: '12' - regex: 'CFNetwork/.* Darwin/' os_replacement: 'iOS' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index ea546641..769fbc7f 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2054,6 +2054,41 @@ test_cases: patch: patch_minor: + - user_agent_string: 'App/1.0.0 CFNetwork/894 Darwin/17.4.0' + family: 'iOS' + major: '11' + minor: '2' + patch: '6' + patch_minor: + + - user_agent_string: 'App/1.0.0 CFNetwork/897.15 Darwin/17.5.0' + family: 'iOS' + major: '11' + minor: '3' + patch: + patch_minor: + + - user_agent_string: 'App/1.0.0 CFNetwork/901.1 Darwin/17.6.0' + family: 'iOS' + major: '11' + minor: '4' + patch: + patch_minor: + + - user_agent_string: 'App/1.0.0 CFNetwork/902.2 Darwin/17.7.0' + family: 'iOS' + major: '11' + minor: '4' + patch: '1' + patch_minor: + + - user_agent_string: 'App/1.0.0 CFNetwork/958.1 Darwin/18.0.0' + family: 'iOS' + major: '12' + minor: '0' + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU 7_0_6 like Mac OS X; en_GB) AppleWebKit (KHTML, like Gecko) Mobile [OKMagazine/4.0.1 (iOS/7.0.6)] [LiteApps]' family: 'iOS' major: '7' @@ -2216,6 +2251,27 @@ test_cases: patch: patch_minor: + - user_agent_string: 'TestApp/1.0 CFNetwork/758.3.15 Darwin/15.4.0' + family: 'iOS' + major: '9' + minor: '3' + patch: '1' + patch_minor: + + - user_agent_string: 'TestApp/1.0 CFNetwork/758.4.3 Darwin/15.5.0' + family: 'iOS' + major: '9' + minor: '3' + patch: '2' + patch_minor: + + - user_agent_string: 'TestApp/1.0 CFNetwork/758.5.3 Darwin/15.6.0' + family: 'iOS' + major: '9' + minor: '3' + patch: '5' + patch_minor: + - user_agent_string: 'TestApp/1.0 CFNetwork/808.0.2 Darwin/16.0.0' family: 'iOS' major: '10' @@ -2237,6 +2293,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'App/1.0.0 CFNetwork/808.3 Darwin/16.3.0' + family: 'iOS' + major: '10' + minor: '2' + patch: '1' + patch_minor: + - user_agent_string: 'TestApp-tvOS/1.0-1' family: 'tvOS' major: '1' From f8a370331b4ef0e0c6ea3a870ab49211ec9f35fb Mon Sep 17 00:00:00 2001 From: Ikuo Matsumura Date: Tue, 24 Jul 2018 13:38:26 +0900 Subject: [PATCH 175/253] Support WebView detection in Android KitKat to Lollipop --- regexes.yaml | 2 ++ tests/test_os.yaml | 4 ++-- tests/test_ua.yaml | 9 ++++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e23cee41..c44643a4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -309,6 +309,8 @@ user_agent_parsers: - regex: '(Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)' # Chrome Mobile + - regex: 'Version/.+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Chrome Mobile WebView' - regex: '; wv\).+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile WebView' - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 769fbc7f..aaee7b48 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2552,14 +2552,14 @@ test_cases: minor: patch: patch_minor: - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; LG-TP260 Build/NRD90U; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Instagram 33.0.0.11.92 Android (24/7.0; 320dpi; 720x1193; LGE/lge; LG-TP260; lv517; lv517; en_US; 93117667)' family: 'Android' major: '7' minor: '0' patch: patch_minor: - + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 Instagram 33.0.0.11.96 (iPhone9,3; iOS 11_2_5; en_AU; en-AU; scale=2.00; gamut=wide; 750x1334)' family: 'iOS' major: '11' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 03e234d4..1de11fc1 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -216,6 +216,13 @@ test_cases: minor: '0' patch: '3029' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.4; SHV31 Build/S2280) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36' + family: 'Chrome Mobile WebView' + major: '33' + minor: '0' + patch: '0' + patch_minor: '0' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.2; Galaxy Nexus Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Chrome Mobile' major: '18' @@ -6844,7 +6851,7 @@ test_cases: patch: '1084' - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.4.4; de-de; SM-G850F Build/KTU84P) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16 Chrome/33.0.0.0' - family: 'Chrome Mobile' + family: 'Chrome Mobile WebView' major: '33' minor: '0' patch: '0' From 7754ec4c550443842327c86eb5e03c7ab8153075 Mon Sep 17 00:00:00 2001 From: Madhu Manne Date: Fri, 27 Jul 2018 15:00:45 +0530 Subject: [PATCH 176/253] Fix to identify MI devices Dalvik/2.1.0 (Linux; U; Android 8.0.0; Mi A1 MIUI/V9.5.13.0.ODHMIFA) Dalvik/2.1.0 (Linux; U; Android 5.0.2; Mi 4i MIUI/V8.1.7.0.LXIMIDI) --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index e23cee41..c42fb723 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4288,7 +4288,7 @@ device_parsers: # XiaoMi # @ref: http://www.xiaomi.com/event/buyphone ######### - - regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/' + - regex: '; *((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/' device_replacement: 'XiaoMi $1' brand_replacement: 'XiaoMi' model_replacement: '$1' From 0867782242955631d4a5385ffbf04ae1d4c47415 Mon Sep 17 00:00:00 2001 From: Andy Day Date: Mon, 30 Jul 2018 09:40:43 -0700 Subject: [PATCH 177/253] Added Yahoo Mail Proxy to regexes.yaml --- regexes.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index e23cee41..4630abc5 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -60,6 +60,10 @@ user_agent_parsers: - regex: 'via ggpht.com GoogleImageProxy' family_replacement: 'GmailImageProxy' + # Yahoo + - regex: 'User-Agent: YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' + family_replacement: 'YahooMailProxy' + # Twitter - regex: '(Twitterbot)/(\d+)\.(\d+)' family_replacement: 'TwitterBot' From 9bdc3534e005df20ed0b3e41a6793f2ca17ba0bd Mon Sep 17 00:00:00 2001 From: Andy Day Date: Mon, 30 Jul 2018 09:47:41 -0700 Subject: [PATCH 178/253] Add test. --- tests/test_ua.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 03e234d4..a12d055a 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7625,3 +7625,9 @@ test_cases: minor: '2' patch: + - user_agent_string: 'User-Agent: YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' + family: 'YahooMailProxy' + major: + minor: + patch: + From 62e477f323fee18fd5dd29e12adb68ddf31f2856 Mon Sep 17 00:00:00 2001 From: Andy Day Date: Mon, 30 Jul 2018 09:50:59 -0700 Subject: [PATCH 179/253] Fix ua string in test --- tests/test_ua.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a12d055a..e0de07bf 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7625,7 +7625,7 @@ test_cases: minor: '2' patch: - - user_agent_string: 'User-Agent: YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' + - user_agent_string: 'YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' family: 'YahooMailProxy' major: minor: From 8fad11a4bc424350c7dca2ff50e8c1aa83291ef7 Mon Sep 17 00:00:00 2001 From: Andy Day Date: Mon, 30 Jul 2018 09:55:06 -0700 Subject: [PATCH 180/253] Fix actual UA. Happy Monday --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 4630abc5..e32f4e68 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -61,7 +61,7 @@ user_agent_parsers: family_replacement: 'GmailImageProxy' # Yahoo - - regex: 'User-Agent: YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' + - regex: 'YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' family_replacement: 'YahooMailProxy' # Twitter From 1a976c229946f76430d3d0a134d12ae9868480a9 Mon Sep 17 00:00:00 2001 From: Jihan Kim Date: Mon, 6 Aug 2018 14:00:09 +0900 Subject: [PATCH 181/253] Add support for Whale browser --- regexes.yaml | 7 +++++++ tests/test_ua.yaml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 78dd2bc3..6bc87f92 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -371,6 +371,13 @@ user_agent_parsers: # Must be before Electron - regex: ' (BoxNotes)/(\d+)\.(\d+)\.(\d+)' + # Whale + - regex: '(Whale)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)' + family_replacement: 'Whale' + + - regex: '(Whale)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Whale' + #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 463a43e6..0a203107 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1033,6 +1033,42 @@ test_cases: minor: '0' patch: '6' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.220 Whale/1.3.45.0 Safari/537.36' + family: 'Whale' + major: '1' + minor: '3' + patch: '45' + + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.220 Whale/1.3.50.3 Safari/537.36' + family: 'Whale' + major: '1' + minor: '3' + patch: '50' + + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Whale/0.9.1.679 Mobile/15D100 Safari/604.5.6' + family: 'Whale' + major: '0' + minor: '9' + patch: '1' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Whale/0.9.5.0 Mobile Safari/537.36' + family: 'Whale' + major: '0' + minor: '9' + patch: '5' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.1.2; Nexus 6P Build/WHALE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.220 Whale/1.3.50.3 Mobile Safari/537.36 sidebar webpanel' + family: 'Whale' + major: '1' + minor: '3' + patch: '50' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.1.2; Nexus 6P Build/WHALE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.220 Whale/1.3.50.3 Mobile Safari/537.36' + family: 'Whale' + major: '1' + minor: '3' + patch: '50' + - user_agent_string: 'J2ME/UCWEB7.0.3.45/139/7682' family: 'UC Browser' major: '7' From e1a30310f400689eb57698525d329df5678c484b Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 10 Aug 2018 22:36:45 +1000 Subject: [PATCH 182/253] Fixed Google Pixel detection Added tests --- regexes.yaml | 2 +- tests/test_device.yaml | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 78dd2bc3..f9b9623b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -2300,7 +2300,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Google' model_replacement: '$1' - - regex: '; *(Pixel \w+) Build' + - regex: '; *(Pixel.*) Build' device_replacement: '$1' brand_replacement: 'Google' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 9235f655..34b2b9cd 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -79955,11 +79955,26 @@ test_cases: brand: 'OnePlus' model: 'ONE E1003' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM1.171019.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36' + family: 'Pixel' + brand: 'Google' + model: 'Pixel' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36' family: 'Pixel C' brand: 'Google' model: 'Pixel C' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.1.1; Pixel XL Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36' + family: 'Pixel XL' + brand: 'Google' + model: 'Pixel XL' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.125 Mobile Safari/537.36' + family: 'Pixel 2' + brand: 'Google' + model: 'Pixel 2' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0; RCT6773W22B Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85' family: 'RCT6773W22B' brand: 'RCA' From 376fab12fed979753d5ea9ee0679011f27639d85 Mon Sep 17 00:00:00 2001 From: Rogier Slag Date: Mon, 13 Aug 2018 11:28:33 +0200 Subject: [PATCH 183/253] Fix indenting in regexes.yaml The additional spaces may cause IDEs (specifically IntelliJ in my case) to transform this into a tab character. As a result of this, Java can not properly parse the YAML file, and every look up throws the following exception `org.yaml.snakeyaml.scanner.ScannerException`. By placing the comment on the expected level, parsing works as intended --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 78dd2bc3..6d36cdb1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -29,7 +29,7 @@ user_agent_parsers: # Pingdom - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)' family_replacement: 'PingdomBot' - # 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' + # 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'PingdomBot' From d473f6519d7ebb75ebe4e571327a099cb2ba9e76 Mon Sep 17 00:00:00 2001 From: Zach Weglarz Date: Wed, 12 Sep 2018 11:03:17 -0400 Subject: [PATCH 184/253] Add parser for Citrix Chrome app on Chrome OS --- regexes.yaml | 8 ++++++++ tests/test_os.yaml | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 78dd2bc3..ea87ea6f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -886,6 +886,14 @@ os_parsers: - regex: '(Silk-Accelerated=[a-z]{4,5})' os_replacement: 'Android' + # Citrix Chrome App on Chrome OS + # Note, this needs to come before the windows parsers as the app doesn't + # properly identify as Chrome OS + # + # ex: Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp + - regex: '(x86_64|aarch64)\\ (\\d+)+\\.(\\d+)+\\.(\\d+)+.*Chrome.*(?:CitrixChromeApp)$' + os_replacement: 'Chrome OS' + ########## # Windows # http://en.wikipedia.org/wiki/Windows_NT#Releases diff --git a/tests/test_os.yaml b/tests/test_os.yaml index aaee7b48..43bcc212 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2630,3 +2630,24 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp' + family: 'Chrome OS' + major: '10718' + minor: '88' + patch: '2' + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (X11; Windows x86_64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp' + family: 'Chrome OS', + major: '10718' + minor: '88' + patch: '2' + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 CitrixChromeApp' + family: 'Windows' + major: '10' + minor: + patch: + patch_minor: + From d5e76922cbed2dc17eef968f5cd8f286bde841cc Mon Sep 17 00:00:00 2001 From: Zach Weglarz Date: Wed, 12 Sep 2018 12:24:57 -0400 Subject: [PATCH 185/253] Fix tests formatting and regex formatting --- regexes.yaml | 2 +- tests/test_os.yaml | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ea87ea6f..e5a51298 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -891,7 +891,7 @@ os_parsers: # properly identify as Chrome OS # # ex: Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp - - regex: '(x86_64|aarch64)\\ (\\d+)+\\.(\\d+)+\\.(\\d+)+.*Chrome.*(?:CitrixChromeApp)$' + - regex: '(x86_64|aarch64)\ (\d+)+\.(\d+)+\.(\d+)+.*Chrome.*(?:CitrixChromeApp)$' os_replacement: 'Chrome OS' ########## diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 43bcc212..e930b17b 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2638,16 +2638,16 @@ test_cases: patch_minor: - user_agent_string: 'Mozilla/5.0 (X11; Windows x86_64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp' - family: 'Chrome OS', + family: 'Chrome OS' major: '10718' minor: '88' patch: '2' patch_minor: - - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 CitrixChromeApp' - family: 'Windows' - major: '10' - minor: - patch: - patch_minor: + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 CitrixChromeApp' + family: 'Windows' + major: '10' + minor: + patch: + patch_minor: From dc3659814590aa6d53454c4b0c82c95823b8b6cd Mon Sep 17 00:00:00 2001 From: Bruno Roggeri Date: Mon, 17 Sep 2018 18:32:24 +0200 Subject: [PATCH 186/253] Fix #271: add Google user-agent on iOS --- regexes.yaml | 2 ++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ca12277a..6fd3023b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -606,6 +606,8 @@ user_agent_parsers: family_replacement: 'Bon Echo' # @note: iOS / OSX Applications + - regex: '(iPod|iPhone|iPad).+GSA/(\d+)\.(\d+)\.(\d+) Mobile' + family_replacement: 'Google' - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari' family_replacement: 'Mobile Safari' - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.* AppleNews\/\d+\.\d+\.\d+?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a1d4c646..898783eb 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7691,3 +7691,9 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) GSA/36.0.169645775 Mobile/15A421 Safari/604.1' + family: 'Google' + major: '36' + minor: '0' + patch: '169645775' + From 570aa9cf946d407417527c86e19e48d0b143423f Mon Sep 17 00:00:00 2001 From: Zach Weglarz Date: Wed, 19 Sep 2018 17:01:28 -0400 Subject: [PATCH 187/253] Handle useragents that present Windows 10 --- regexes.yaml | 4 ++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 78dd2bc3..f2ad5406 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -946,6 +946,10 @@ os_parsers: os_replacement: 'Windows' os_v1_replacement: '10' + - regex: '(Windows 10)' + os_replacement: 'Windows' + os_v1_replacement: '10' + - regex: '(Windows NT 5\.0)' os_replacement: 'Windows' os_v1_replacement: '2000' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index aaee7b48..6a80d624 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -777,6 +777,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'PAN GlobalProtect/4.1.2-11 (Microsoft Windows 10 Pro , 64-bit)' + family: 'Windows' + major: '10' + minor: + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' family: 'Windows' major: '8.1' From faea7bb2b50fad6770c8647a47083da151ecbed7 Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 21 Sep 2018 12:03:31 +1000 Subject: [PATCH 188/253] Added Snapchat detection --- regexes.yaml | 2 ++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ca12277a..88c7dcd7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -124,6 +124,8 @@ user_agent_parsers: - regex: 'Mozilla.*Mobile.*(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)' # Onefootball app - regex: 'Mozilla.*Mobile.*(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)' + # Snapchat + - regex: '(Snapchat)\/(\d+)\.(\d+)\.(\d+).(\d+)' # Basilisk - regex: '(Firefox)/(\d+)\.(\d+) Basilisk/(\d+)' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a1d4c646..dc1738ce 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7691,3 +7691,9 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Snapchat/10.38.0.25 (iPhone8,1; iOS 11.2.6; gzip)' + family: 'Snapchat' + major: '10' + minor: '38' + patch: '0' + patch_minor: '25' \ No newline at end of file From 0e042fe0321e6e946cbd26e04f4d0c2ea68030fd Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 21 Sep 2018 12:43:36 +1000 Subject: [PATCH 189/253] Detect Facebook without FBAV version Added test --- regexes.yaml | 3 +++ tests/test_ua.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ca12277a..5798ae5e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -113,6 +113,9 @@ user_agent_parsers: # Facebook - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Facebook' + # Sometimes Facebook does not specify a version (FBAV) + - regex: '\[FB.*;' + family_replacement: 'Facebook' # Pinterest - regex: '\[(Pinterest)/[^\]]+\]' - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a1d4c646..c8203129 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6546,6 +6546,12 @@ test_cases: minor: '0' patch: '321' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 [FBAN/FBIOS;FBDV/iPhone10,4;FBMD/iPhone;FBSN/iOS;FBSV/11.4.1;FBSS/2;FBCR/A1;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/122166081]' + family: 'Facebook' + major: + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B350 [Pinterest/iOS]' family: 'Pinterest' major: From a8071d8cfb0a53dc247b8889aa439737ca293c28 Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 21 Sep 2018 12:43:55 +1000 Subject: [PATCH 190/253] Fixed typo --- regexes.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 5798ae5e..045faae1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -121,9 +121,9 @@ user_agent_parsers: - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' # Instagram app - regex: 'Mozilla.*Mobile.*(Instagram).(\d+)\.(\d+)\.(\d+)' - # Flipbaord app + # Flipboard app - regex: 'Mozilla.*Mobile.*(Flipboard).(\d+)\.(\d+)\.(\d+)' - # Flipbaord-briefing app + # Flipboard-briefing app - regex: 'Mozilla.*Mobile.*(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)' # Onefootball app - regex: 'Mozilla.*Mobile.*(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)' From 430f7eadc2833a6d625ee942e942433a966dcb84 Mon Sep 17 00:00:00 2001 From: Long Zheng Date: Fri, 21 Sep 2018 13:03:10 +1000 Subject: [PATCH 191/253] Added support for Facebook Messenger --- regexes.yaml | 3 +++ tests/test_ua.yaml | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 045faae1..d678729b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -110,6 +110,9 @@ user_agent_parsers: - regex: '(Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' # Social Networks + # Facebook Messenger must go before Facebook + - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + family_replacement: 'Facebook Messenger' # Facebook - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Facebook' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index c8203129..58b2aede 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6552,6 +6552,20 @@ test_cases: minor: patch: + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 [FBAN/MessengerForiOS;FBAV/124.0.0.50.70;FBBV/63293619;FBDV/iPhone7,1;FBMD/iPhone;FBSN/iOS;FBSV/10.2.1;FBSS/3;FBCR/Viettel;FBID/phone;FBLC/vi_VN;FBOP/5;FBRV/0]' + family: 'Facebook Messenger' + major: '124' + minor: '0' + patch: '0' + patch_minor: '50' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; SM-A910F Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 [FB_IAB/MESSENGER;FBAV/120.0.0.14.84;]' + family: 'Facebook Messenger' + major: '120' + minor: '0' + patch: '0' + patch_minor: '14' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B350 [Pinterest/iOS]' family: 'Pinterest' major: From 87590ebdfa145fef4399f3116c9abd27f7e7cafa Mon Sep 17 00:00:00 2001 From: Armaan Dandavati Date: Fri, 5 Oct 2018 13:38:01 -0400 Subject: [PATCH 192/253] update salesforce regex handle single digit android versions --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index ca12277a..79665264 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -884,7 +884,7 @@ os_parsers: os_replacement: 'Android' # Salesforce - - regex: '(android)\s(?:mobile\/)(\d+)\.(\d+)\.?(\d+)?' + - regex: '(android)\s(?:mobile\/)(\d+)(?:\.?(\d+))?(?:\.?(\d+))?' os_replacement: 'Android' ########## From 7100e3a76ce13d24d0dd19e6f29da275267ed9a3 Mon Sep 17 00:00:00 2001 From: Armaan Dandavati Date: Fri, 5 Oct 2018 13:38:58 -0400 Subject: [PATCH 193/253] update salesforce tests test single digit android versions --- tests/test_os.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 9d639dec..cbfb74f0 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2636,6 +2636,13 @@ test_cases: minor: '0' patch: patch_minor: + + - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/9 (SM-G955U) Salesforce1/15.2 Native uid_4ec4068eddf27447 ftr_ Cordova/6.2.3' + family: 'Android' + major: '9' + minor: + patch: + patch_minor: - user_agent_string: 'Mozilla/5.0 (Linux; Android 9; Pixel Build/PPP3.180510.008) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.81 Mobile Safari/537.36' family: 'Android' From 73cf97520c0f79072f8eeaa279703b7f69d66d69 Mon Sep 17 00:00:00 2001 From: FlipSs Date: Tue, 9 Oct 2018 12:42:33 +0300 Subject: [PATCH 194/253] split windows 8.1 version --- regexes.yaml | 6 ++++-- tests/test_os.yaml | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ca12277a..02497da2 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -939,11 +939,13 @@ os_parsers: - regex: '(Windows NT 6\.3; ARM;)' os_replacement: 'Windows' - os_v1_replacement: 'RT 8.1' + os_v1_replacement: 'RT 8' + os_v2_replacement: '1' - regex: '(Windows NT 6\.3)' os_replacement: 'Windows' - os_v1_replacement: '8.1' + os_v1_replacement: '8' + os_v2_replacement: '1' - regex: '(Windows NT 6\.4)' os_replacement: 'Windows' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 9d639dec..2863d962 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -786,15 +786,15 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' family: 'Windows' - major: '8.1' - minor: + major: '8' + minor: '1' patch: patch_minor: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; ARM; WOW64; Trident/7.0; rv:11.0) like Gecko' family: 'Windows' - major: 'RT 8.1' - minor: + major: 'RT 8' + minor: '1' patch: patch_minor: @@ -2463,8 +2463,8 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) BoxNotes/1.3.0 Chrome/56.0.2924.87 Electron/1.6.8 Safari/537.36' family: 'Windows' - major: '8.1' - minor: + major: '8' + minor: '1' patch: patch_minor: From 02b7172f6ee33913fb973ce801cf379e961defbd Mon Sep 17 00:00:00 2001 From: Tobie Langel Date: Fri, 7 Dec 2018 22:45:18 +0100 Subject: [PATCH 195/253] Add @commenthol to maintainers --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f6e3801d..18f78a25 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This repo itself does _not_ contain a parser: only the necessary data to build o Maintainers ----------- +* [Com Menthol](https://github.com/commenthol) * [Lindsey Simon](https://github.com/elsigh) ([@elsigh](https://twitter.com/elsigh)) * [Tobie Langel](https://github.com/tobie) ([@tobie](https://twitter.com/tobie)) From 66efa353937e5c1111d4797f15614a5851377a79 Mon Sep 17 00:00:00 2001 From: Mark Penner Date: Sat, 8 Dec 2018 17:45:54 -0800 Subject: [PATCH 196/253] Update regexes.yaml Lots of missing escapes on `.`s; I only did a few of them. --- regexes.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 7a97ab05..91d66f18 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -27,7 +27,7 @@ user_agent_parsers: family_replacement: 'CFNetwork' # Pingdom - - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)' + - regex: '(Pingdom\.com_bot_version_)(\d+)\.(\d+)' family_replacement: 'PingdomBot' # 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' @@ -57,11 +57,11 @@ user_agent_parsers: family_replacement: 'GooglePlusBot' # Gmail - - regex: 'via ggpht.com GoogleImageProxy' + - regex: 'via ggpht\.com GoogleImageProxy' family_replacement: 'GmailImageProxy' # Yahoo - - regex: 'YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' + - regex: 'YahooMailProxy; https://help\.yahoo\.com/kb/yahoo-mail-proxy-SLN28749\.html' family_replacement: 'YahooMailProxy' # Twitter @@ -829,11 +829,11 @@ os_parsers: # Philips : not found any other way than a manual mapping # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60 # Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70 - - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/4' + - regex: 'HbbTV/1\.1\.1 \(; (Philips);.*NETTV/4' os_v1_replacement: '2013' - - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/3' + - regex: 'HbbTV/1\.1\.1 \(; (Philips);.*NETTV/3' os_v1_replacement: '2012' - - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/2' + - regex: 'HbbTV/1\.1\.1 \(; (Philips);.*NETTV/2' os_v1_replacement: '2011' # the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20 From bf80eb25f940f2c2a4672681d753a8034839066c Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 7 Dec 2018 22:24:11 +0100 Subject: [PATCH 197/253] safe regexes --- package.json | 5 +- regexes.yaml | 392 +++++++++++++++++++++++------------------------ tests/regexes.js | 27 ++++ 3 files changed, 226 insertions(+), 198 deletions(-) create mode 100644 tests/regexes.js diff --git a/package.json b/package.json index 0c669386..19219717 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,10 @@ } ], "devDependencies": { - "yamlparser": ">=0.0.2", "mocha": "*", - "uap-ref-impl": "ua-parser/uap-ref-impl" + "safe-regex": "^2.0.1", + "uap-ref-impl": "*", + "yamlparser": ">=0.0.2" }, "scripts": { "test": "mocha -u tdd -R min ./tests/test.js" diff --git a/regexes.yaml b/regexes.yaml index 7a97ab05..a06e8faf 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -7,9 +7,9 @@ user_agent_parsers: family_replacement: 'AntennaPod' - regex: '(TopPodcasts)Pro/(\d+) CFNetwork' - regex: '(MusicDownloader)Lite/(\d+)\.(\d+)\.(\d+) CFNetwork' - - regex: '^(.*)-iPad/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' - - regex: '^(.*)-iPhone/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' - - regex: '^(.*)/(\d+)\.?(\d+)?.?(\d+)?.?(\d+)? CFNetwork' + - regex: '^(.*)-iPad\/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork' + - regex: '^(.*)-iPhone/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork' + - regex: '^(.*)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork' # Podcast catchers - regex: '(espn\.go)' @@ -23,7 +23,7 @@ user_agent_parsers: - regex: ' (Rivo) RHYTHM' # @note: iOS / OSX Applications - - regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?' + - regex: '(CFNetwork)(?:/(\d+)\.(\d+)(?:\.(\d+)|)|)' family_replacement: 'CFNetwork' # Pingdom @@ -69,37 +69,37 @@ user_agent_parsers: family_replacement: 'TwitterBot' # Bots Pattern '/name-0.0' - - regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '/((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # Bots Pattern 'name/0.0' - - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # MSIECrawler - - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler' + - regex: '(MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|);.* MSIECrawler' family_replacement: 'MSIECrawler' # DAVdroid - - regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+)|)' # Downloader ... - - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(Google-HTTP-Java-Client|Apache-HttpClient|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' # Pinterestbot - - regex: '(Pinterest(?:bot)?)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?[;\s\(]+\+https://www.pinterest.com/bot.html' + - regex: '(Pinterest(?:bot|))/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)[;\s(]+\+https://www.pinterest.com/bot.html' family_replacement: 'Pinterestbot' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|BUbiNG|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint(?: bot)?|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile)?|IconSurf|IlTrovatore(?:-Setaccio)?|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)' # AWS S3 Clients # must come before "Bots General matcher" to catch "boto"/"boto3" before "bot" - - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?))|s3fs)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?))|s3fs)/(\d+)\.(\d+)(?:\.(\d+)|)' # Bots General matcher 'name/0.0' - - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '(?:\/[A-Za-z0-9\.]+|) *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' # Bots General matcher 'name 0.0' - - regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 _\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*)) (\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '(?:\/[A-Za-z0-9\.]+|) *([A-Za-z0-9 _\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*)) (\d+)(?:\.(\d+)(?:\.(\d+)|)|)' # Bots containing spider|scrape|bot(but not CUBOT)|Crawl - - regex: '((?:[A-z0-9]+|[A-z\-]+ ?)?(?: the )?(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[A-Za-z0-9-]*(?:[^C][^Uu])[Bb]ot|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]*)(?:(?:[ /]| v)(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '((?:[A-z0-9]+|[A-z\-]+ ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[A-Za-z0-9-]*(?:[^C][^Uu])[Bb]ot|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]*)(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' # HbbTV standard defines what features the browser should understand. # but it's like targeting "HTML5 browsers", effective browser support depends on the model @@ -107,21 +107,21 @@ user_agent_parsers: - regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \(' # must go before Firefox to catch Chimera/SeaMonkey/Camino/Waterfox - - regex: '(Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?' + - regex: '(Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*|)' # Social Networks # Facebook Messenger must go before Facebook - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' family_replacement: 'Facebook Messenger' # Facebook - - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' family_replacement: 'Facebook' # Sometimes Facebook does not specify a version (FBAV) - regex: '\[FB.*;' family_replacement: 'Facebook' # Pinterest - regex: '\[(Pinterest)/[^\]]+\]' - - regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '(Pinterest)(?: for Android(?: Tablet|)|)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # Instagram app - regex: 'Mozilla.*Mobile.*(Instagram).(\d+)\.(\d+)\.(\d+)' # Flipboard app @@ -138,7 +138,7 @@ user_agent_parsers: family_replacement: 'Basilisk' # Pale Moon - - regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(PaleMoon)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Pale Moon' # Firefox @@ -150,22 +150,22 @@ user_agent_parsers: family_replacement: 'Firefox Mobile' - regex: '(?:Mobile|Tablet);.*(Firefox)/(\d+)\.(\d+)' family_replacement: 'Firefox Mobile' - - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)' + - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre|))' family_replacement: 'Firefox ($1)' - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)' family_replacement: 'Firefox Alpha' - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)' family_replacement: 'Firefox Beta' - - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)' + - regex: '(Firefox)-(?:\d+\.\d+|)/(\d+)\.(\d+)(a\d+[a-z]*)' family_replacement: 'Firefox Alpha' - - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)' + - regex: '(Firefox)-(?:\d+\.\d+|)/(\d+)\.(\d+)(b\d+[a-z]*)' family_replacement: 'Firefox Beta' - - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?' + - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*|)' family_replacement: 'Firefox ($1)' - regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)' family_replacement: 'MicroB' - - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?' - - regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+))?(\.(\d+))?' + - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*|)' + - regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+)|)(\.(\d+)|)' family_replacement: 'Firefox iOS' # e.g.: Flock/2.0b2 @@ -181,7 +181,7 @@ user_agent_parsers: - regex: '(Navigator)/(\d+)\.(\d+)([ab]\d+)' family_replacement: 'Netscape' - - regex: '(Netscape6)/(\d+)\.(\d+)\.?([ab]?\d+)?' + - regex: '(Netscape6)/(\d+)\.(\d+)\.?([ab]?\d+|)' family_replacement: 'Netscape' - regex: '(MyIBrow)/(\d+)\.(\d+)' @@ -194,8 +194,8 @@ user_agent_parsers: # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?' - - regex: '(Opera Mini)(?:/att)?/?(\d+)?(?:\.(\d+))?(?:\.(\d+))?' + - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+)|)' + - regex: '(Opera Mini)(?:/att|)/?(\d+|)(?:\.(\d+)|)(?:\.(\d+)|)' - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)' family_replacement: 'Opera Mobile' - regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi' @@ -204,7 +204,7 @@ user_agent_parsers: family_replacement: 'Opera Mobile' - regex: 'Opera Mobi' family_replacement: 'Opera Mobile' - - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+)|)' # Opera 14 for Android uses a WebKit render engine. - regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)' @@ -227,7 +227,7 @@ user_agent_parsers: family_replacement: 'Opera Neon' # Palm WebOS looks a lot like Safari. - - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'webOS Browser' # LuaKit has no version info. @@ -243,20 +243,20 @@ user_agent_parsers: - regex: 'Gecko/\d+ (Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))' # Swiftfox - - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)' + - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre|)) \(Swiftfox\)' family_replacement: 'Swiftfox' - - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)? \(Swiftfox\)' + - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*|) \(Swiftfox\)' family_replacement: 'Swiftfox' # Rekonq - - regex: '(rekonq)/(\d+)\.(\d+)\.?(\d+)? Safari' + - regex: '(rekonq)/(\d+)\.(\d+)(?:\.(\d+)|) Safari' family_replacement: 'Rekonq' - regex: 'rekonq' family_replacement: 'Rekonq' # Conkeror lowercase/uppercase # http://conkeror.org/ - - regex: '(conkeror|Conkeror)/(\d+)\.(\d+)\.?(\d+)?' + - regex: '(conkeror|Conkeror)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Conkeror' # catches lower case konqueror @@ -285,11 +285,11 @@ user_agent_parsers: family_replacement: 'NetFront NX' # Amazon Silk, should go before Safari and Chrome Mobile - - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?' + - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+)|)' family_replacement: 'Amazon Silk' # @ref: http://www.puffinbrowser.com - - regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+)|)' # Edge Mobile - regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)' @@ -300,21 +300,21 @@ user_agent_parsers: family_replacement: 'Samsung Internet' # Seznam.cz browser (based on WebKit) - - regex: '(SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Seznam prohlížeč' # Coc Coc browser, based on Chrome (used in Vietnam) - - regex: '(coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Coc Coc' # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) - - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)|)(?:\.(\d+)|)' family_replacement: 'Baidu Browser' - regex: '(FlyFlow)/(\d+)\.(\d+)' family_replacement: 'Baidu Explorer' # MxBrowser is Maxthon. Must go before Mobile Chrome for Android - - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Maxthon' # Crosswalk must go before Mobile Chrome for Android @@ -347,11 +347,11 @@ user_agent_parsers: family_replacement: 'Sogou Explorer' # QQ Browsers - - regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' family_replacement: 'QQ Browser Mini' - - regex: '(MQQBrowser)(?:/(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(MQQBrowser)(?:/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' family_replacement: 'QQ Browser Mobile' - - regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+))?)?)?' + - regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)' family_replacement: 'QQ Browser' # Rackspace Monitoring @@ -373,7 +373,7 @@ user_agent_parsers: - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)' # Podcast catcher Applications using iTunes - - regex: '(PodCruncher|Downcast)[ /]?(\d+)\.?(\d+)?\.?(\d+)?\.?(\d+)?' + - regex: '(PodCruncher|Downcast)[ /]?(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)' # Box Notes https://www.box.com/resources/downloads # Must be before Electron @@ -397,7 +397,7 @@ user_agent_parsers: # HipChat provides a version on Mac, but not on Windows. # Needs to be before Chrome on Windows, and AppleMail on Mac. - - regex: '(HipChat)/?(\d+)?' + - regex: '(HipChat)/?(\d+|)' family_replacement: 'HipChat Desktop Client' # Browser/major_version.minor_version.beta_version @@ -428,10 +428,10 @@ user_agent_parsers: family_replacement: 'Windows Live Mail' # Apple Air Mail - - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+)|)' # Thunderbird - - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?' + - regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre|))|)' family_replacement: 'Thunderbird' # Postbox @@ -439,18 +439,18 @@ user_agent_parsers: family_replacement: 'Postbox' # Barca - - regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Barca' # Lotus Notes - - regex: '(Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Lotus Notes' # Vivaldi uses "Vivaldi" - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)' # Edge/major_version.minor_version - - regex: '(Edge)/(\d+)(?:\.(\d+))?' + - regex: '(Edge)/(\d+)(?:\.(\d+)|)' # Brave Browser https://brave.com/ - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' @@ -462,23 +462,23 @@ user_agent_parsers: # Dolphin Browser # @ref: http://www.dolphin.com - - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?' + - regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)(?:\.(\d+)|)' # Headless Chrome # https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md - - regex: '(HeadlessChrome)(?:/(\d+)\.(\d+)\.(\d+))?' + - regex: '(HeadlessChrome)(?:/(\d+)\.(\d+)\.(\d+)|)' # Evolution Mail CardDav/CalDav integration - regex: '(Evolution)/(\d+)\.(\d+)\.(\d+\.\d+)' # Roundcube Mail CardDav plugin - - regex: '(RCM CardDAV plugin)/(\d+)\.(\d+)\.(\d+(?:-dev)?)' + - regex: '(RCM CardDAV plugin)/(\d+)\.(\d+)\.(\d+(?:-dev|))' # Browser/major_version.minor_version - - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+)|)' # Chrome/Chromium/major_version.minor_version - - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?(?:\.(\d+))?' + - regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' ########## # IE Mobile needs to happen before Android to catch cases such as: @@ -498,8 +498,8 @@ user_agent_parsers: # Podcast catchers - regex: '^(bPod|Pocket Casts|Player FM)$' - regex: '^(AlexaMediaPlayer|VLC)/(\d+)\.(\d+)\.([^.\s]+)' - - regex: '^(AntennaPod|WMPlayer|Zune|Podkicker|Radio|ExoPlayerDemo|Overcast|PocketTunes|NSPlayer|okhttp|DoggCatcher|QuickNews|QuickTime|Peapod|Podcasts|GoldenPod|VLC|Spotify|Miro|MediaGo|Juice|iPodder|gPodder|Banshee)/(\d+)\.(\d+)\.?(\d+)?\.?(\d+)?' - - regex: '^(Peapod|Liferea)/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + - regex: '^(AntennaPod|WMPlayer|Zune|Podkicker|Radio|ExoPlayerDemo|Overcast|PocketTunes|NSPlayer|okhttp|DoggCatcher|QuickNews|QuickTime|Peapod|Podcasts|GoldenPod|VLC|Spotify|Miro|MediaGo|Juice|iPodder|gPodder|Banshee)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' + - regex: '^(Peapod|Liferea)/([^.\s]+)\.([^.\s]+|)\.?([^.\s]+|)' - regex: '^(bPod|Player FM) BMID/(\S+)' - regex: '^(Podcast ?Addict)/v(\d+) ' - regex: '^(Podcast ?Addict) ' @@ -509,8 +509,8 @@ user_agent_parsers: - regex: '(CITA) RSS Aggregator/(\d+)\.(\d+)' - regex: '(Pocket Casts)$' - regex: '(Player FM)$' - - regex: '(LG Player|Doppler|FancyMusic|MediaMonkey|Clementine) (\d+)\.(\d+)\.?([^.\s]+)?\.?([^.\s]+)?' - - regex: '(philpodder)/(\d+)\.(\d+)\.?([^.\s]+)?\.?([^.\s]+)?' + - regex: '(LG Player|Doppler|FancyMusic|MediaMonkey|Clementine) (\d+)\.(\d+)\.?([^.\s]+|)\.?([^.\s]+|)' + - regex: '(philpodder)/(\d+)\.(\d+)\.?([^.\s]+|)\.?([^.\s]+|)' - regex: '(Player FM|Pocket Casts|DoggCatcher|Spotify|MediaMonkey|MediaGo|BashPodder)' - regex: '(QuickTime)\.(\d+)\.(\d+)\.(\d+)' - regex: '(Kinoma)(\d+)' @@ -518,35 +518,35 @@ user_agent_parsers: family_replacement: 'FancyMusic' - regex: 'EspnDownloadManager' family_replacement: 'ESPN' - - regex: '(ESPN) Radio (\d+)\.(\d+)\.?(\d+)? ?(?:rv:(\d+))? ' - - regex: '(podracer|jPodder) v ?(\d+)\.(\d+)\.?(\d+)?' + - regex: '(ESPN) Radio (\d+)\.(\d+)(?:\.(\d+)|) ?(?:rv:(\d+)|) ' + - regex: '(podracer|jPodder) v ?(\d+)\.(\d+)(?:\.(\d+)|)' - regex: '(ZDM)/(\d+)\.(\d+)[; ]?' - - regex: '(Zune|BeyondPod) (\d+)\.?(\d+)?[\);]' + - regex: '(Zune|BeyondPod) (\d+)(?:\.(\d+)|)[\);]' - regex: '(WMPlayer)/(\d+)\.(\d+)\.(\d+)\.(\d+)' - regex: '^(Lavf)' family_replacement: 'WMPlayer' - - regex: '^(RSSRadio)[ /]?(\d+)?' + - regex: '^(RSSRadio)[ /]?(\d+|)' - regex: '(RSS_Radio) (\d+)\.(\d+)' family_replacement: 'RSSRadio' - regex: '(Podkicker) \S+/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Podkicker' - - regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)\.?(\d+)?' + - regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)(?:\.(\d+)|)' - regex: '^(Stitcher)/iOS' - regex: '^(Stitcher)/Android' - regex: '^(VLC) .*version (\d+)\.(\d+)\.(\d+)' - regex: ' (VLC) for' - regex: '(vlc)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'VLC' - - regex: '^(foobar)\S+/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' - - regex: '^(Clementine)\S+ ([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' - - regex: '(amarok)/([^.\s]+)\.([^.\s]+)?\.?([^.\s]+)?' + - regex: '^(foobar)\S+/([^.\s]+)\.([^.\s]+|)\.?([^.\s]+|)' + - regex: '^(Clementine)\S+ ([^.\s]+)\.([^.\s]+|)\.?([^.\s]+|)' + - regex: '(amarok)/([^.\s]+)\.([^.\s]+|)\.?([^.\s]+|)' family_replacement: 'Amarok' - regex: '(Custom)-Feed Reader' # Browser major_version.minor_version.beta_version (space instead of slash) - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)' # Browser major_version.minor_version (space instead of slash) - - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)\.?(\d+)?' + - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)(?:\.(\d+)|)' # Kindle WebKit - regex: '(Kindle)/(\d+)\.(\d+)' @@ -591,7 +591,7 @@ user_agent_parsers: #### SPECIAL CASES #### - regex: '(Obigo)InternetBrowser' - regex: '(Obigo)\-Browser' - - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?' + - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+)|)' family_replacement: 'Obigo' - regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)' @@ -610,21 +610,21 @@ user_agent_parsers: - regex: '(Embider)/(\d+)\.(\d+)' family_replacement: 'Polaris' - - regex: '(BonEcho)/(\d+)\.(\d+)\.?([ab]?\d+)?' + - regex: '(BonEcho)/(\d+)\.(\d+)\.?([ab]?\d+|)' family_replacement: 'Bon Echo' # @note: iOS / OSX Applications - regex: '(iPod|iPhone|iPad).+GSA/(\d+)\.(\d+)\.(\d+) Mobile' family_replacement: 'Google' - - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari' + - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+)|).*[ +]Safari' family_replacement: 'Mobile Safari' - - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.* AppleNews\/\d+\.\d+\.\d+?' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+)|).* AppleNews\/\d+\.\d+\.\d+?' family_replacement: 'Mobile Safari UI/WKWebView' - - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Mobile Safari UI/WKWebView' - - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile.*[ +]Safari' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+)|).*Mobile.*[ +]Safari' family_replacement: 'Mobile Safari' - - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile' + - regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+)|).*Mobile' family_replacement: 'Mobile Safari UI/WKWebView' - regex: '(iPod|iPhone|iPad).* Safari' family_replacement: 'Mobile Safari' @@ -697,18 +697,18 @@ user_agent_parsers: - regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)' - #- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/' + #- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+)|).*Safari/' # family_replacement: 'iPad' # Phantomjs, should go before Safari - regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)' # WebKit Nightly - - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari' + - regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+ .* Safari' family_replacement: 'WebKit Nightly' # Safari - - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/' + - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|).*Safari/' family_replacement: 'Safari' # Safari didn't provide "Version/d.d.d" prior to 3.0 - regex: '(Safari)/\d+' @@ -743,7 +743,7 @@ user_agent_parsers: v1_replacement: '8' # Espial - - regex: '(Espial)/(\d+)(?:\.(\d+))?(?:\.(\d+))?' + - regex: '(Espial)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # Apple Mail @@ -755,7 +755,7 @@ user_agent_parsers: # AFTER IE11 # BEFORE all other IE - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)' - - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?' + - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*|)' - regex: '([MS]?IE) (\d+)\.(\d+)' family_replacement: 'IE' @@ -764,13 +764,13 @@ user_agent_parsers: family_replacement: 'Python Requests' # headless user-agents - - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?' + - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' - - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*' + - regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)' # Cloud Storage Clients - - regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+)?' - - regex: '^(S3 Browser) (\d+)-(\d+)-(\d+)(?:\s*http://s3browser\.com)?' + - regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+|)' + - regex: '^(S3 Browser) (\d+)-(\d+)-(\d+)(?:\s*http://s3browser\.com|)' # rclone - rsync for cloud storage - https://rclone.org/ - regex: '^(rclone)/v(\d+)\.(\d+)' @@ -854,14 +854,14 @@ os_parsers: - regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)' # Again a MS-special one: iPhone.*Outlook-iOS-Android/x.x is erroneously detected as Android - - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?.*Outlook-iOS-Android' + - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|).*Outlook-iOS-Android' os_replacement: 'iOS' ########## # Android # can actually detect rooted android os. do we care? ########## - - regex: '(Android)[ \-/](\d+)\.?(\d+)?(?:[.\-]([a-z0-9]+))?' + - regex: '(Android)[ \-/](\d+)(?:\.(\d+)|)(?:[.\-]([a-z0-9]+)|)' - regex: '(Android) Donut' os_v1_replacement: '1' @@ -883,18 +883,18 @@ os_parsers: os_v1_replacement: '3' # UCWEB - - regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?;' + - regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+)|);' os_replacement: 'Android' - - regex: '^UCWEB.*; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+))?;' + - regex: '^UCWEB.*; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+)|);' os_replacement: 'iOS' - - regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+))?;' + - regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+)|);' os_replacement: 'Windows Phone' # JUC - - regex: '^(JUC).*; ?U; ?(?:Android)?(\d+)\.(\d+)(?:[\.\-]([a-z0-9]+))?' + - regex: '^(JUC).*; ?U; ?(?:Android|)(\d+)\.(\d+)(?:[\.\-]([a-z0-9]+)|)' os_replacement: 'Android' # Salesforce - - regex: '(android)\s(?:mobile\/)(\d+)(?:\.?(\d+))?(?:\.?(\d+))?' + - regex: '(android)\s(?:mobile\/)(\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'Android' ########## @@ -908,7 +908,7 @@ os_parsers: # properly identify as Chrome OS # # ex: Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp - - regex: '(x86_64|aarch64)\ (\d+)+\.(\d+)+\.(\d+)+.*Chrome.*(?:CitrixChromeApp)$' + - regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+).*Chrome.*(?:CitrixChromeApp)$' os_replacement: 'Chrome OS' ########## @@ -1017,7 +1017,7 @@ os_parsers: # @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions # @ref: http://www.puredarwin.org/curious/versions ########## - - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)' + - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+)|)|Mach-O)' os_replacement: 'Mac OS X' - regex: '(\w+\s+Mac OS X\s+\w+\s+(\d+).(\d+).(\d+).*)' os_replacement: 'Mac OS X' @@ -1062,7 +1062,7 @@ os_parsers: - regex: '(?:PPC|Intel) (Mac OS X)' # Box Drive and Box Sync on Mac OS X use OSX version numbers, not Darwin - - regex: '^Box.*;(Darwin)/(10)\.(1\d)(?:\.(\d+))?' + - regex: '^Box.*;(Darwin)/(10)\.(1\d)(?:\.(\d+)|)' os_replacement: 'Mac OS X' ########## @@ -1070,10 +1070,10 @@ os_parsers: # http://en.wikipedia.org/wiki/IOS_version_history ########## # keep this above generic iOS, since AppleTV UAs contain 'CPU OS' - - regex: '(Apple\s?TV)(?:/(\d+)\.(\d+))?' + - regex: '(Apple\s?TV)(?:/(\d+)\.(\d+)|)' os_replacement: 'ATV OS X' - - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?' + - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)' os_replacement: 'iOS' # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs @@ -1255,7 +1255,7 @@ os_parsers: os_replacement: 'iOS' # iOS Apps - - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?' + - regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+)|)' os_replacement: 'iOS' - regex: '\((iOS);' @@ -1276,7 +1276,7 @@ os_parsers: # http://code.google.com/p/chromium-os/issues/detail?id=11573 # http://code.google.com/p/chromium-os/issues/detail?id=13790 ########## - - regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'Chrome OS' ########## @@ -1284,8 +1284,8 @@ os_parsers: ########## - regex: '([Dd]ebian)' os_replacement: 'Debian' - - regex: '(Linux Mint)(?:/(\d+))?' - - regex: '(Mandriva)(?: Linux)?/(?:[\d.-]+m[a-z]{2}(\d+).(\d))?' + - regex: '(Linux Mint)(?:/(\d+)|)' + - regex: '(Mandriva)(?: Linux|)/(?:[\d.-]+m[a-z]{2}(\d+).(\d)|)' ########## # Symbian + Symbian OS @@ -1314,9 +1314,9 @@ os_parsers: ########## - regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)' os_replacement: 'BlackBerry OS' - - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'BlackBerry OS' - - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'BlackBerry OS' - regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)' os_replacement: 'BlackBerry Tablet OS' @@ -1383,20 +1383,20 @@ os_parsers: ########## # Google TV ########## - - regex: '(GoogleTV)(?: (\d+)\.(\d+)(?:\.(\d+))?|/[\da-z]+)' + - regex: '(GoogleTV)(?: (\d+)\.(\d+)(?:\.(\d+)|)|/[\da-z]+)' - regex: '(WebTV)/(\d+).(\d+)' ########## # Chromecast ########## - - regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+))?)?' + - regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)' os_replacement: 'Chromecast' ########## # Misc mobile ########## - - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?' + - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'webOS' - regex: '(VRE);' @@ -1404,10 +1404,10 @@ os_parsers: # Generic patterns # since the majority of os cases are very specific, these go last ########## - - regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # Gentoo Linux + Kernel Version - - regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+))?.*gentoo' + - regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|).*gentoo' os_replacement: 'Gentoo' # Opera Mini Bada @@ -1417,7 +1417,7 @@ os_parsers: - regex: '(Windows|Android|WeTab|Maemo|Web0S)' - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)' # Linux + Kernel Version - - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?' + - regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+)|)|)' - regex: 'SunOS' os_replacement: 'Solaris' # Wget/x.x.x (linux-gnu) @@ -1464,7 +1464,7 @@ device_parsers: ###################################################################### # Android Application - - regex: 'Android Application[^\-]+ - (Sony) ?(Ericsson)? (.+) \w+ - ' + - regex: 'Android Application[^\-]+ - (Sony) ?(Ericsson|) (.+) \w+ - ' device_replacement: '$1 $2' brand_replacement: '$1$2' model_replacement: '$3' @@ -1495,7 +1495,7 @@ device_parsers: # Acer # @ref: http://us.acer.com/ac/en/US/content/group/tablets ######### - - regex: 'Android [34].*; *(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700(?: Lite| 3G)?|A701|B1-A71|A1-\d{3}|B1-\d{3}|V360|V370|W500|W500P|W501|W501P|W510|W511|W700|Slider SL101|DA22[^;/]+) Build' + - regex: 'Android [34].*; *(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700(?: Lite| 3G|)|A701|B1-A71|A1-\d{3}|B1-\d{3}|V360|V370|W500|W500P|W501|W501P|W510|W511|W700|Slider SL101|DA22[^;/]+) Build' device_replacement: '$1' brand_replacement: 'Acer' model_replacement: '$1' @@ -1518,7 +1518,7 @@ device_parsers: # @note: VegaBean and VegaComb (names derived from jellybean, honeycomb) are # custom ROM builds for Vega ######### - - regex: '; *(Advent )?(Vega(?:Bean|Comb)?).* Build' + - regex: '; *(Advent |)(Vega(?:Bean|Comb|)).* Build' device_replacement: '$1$2' brand_replacement: 'Advent' model_replacement: '$2' @@ -1527,7 +1527,7 @@ device_parsers: # Ainol # @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product ######### - - regex: '; *(Ainol )?((?:NOVO|[Nn]ovo)[^;/]+) Build' + - regex: '; *(Ainol |)((?:NOVO|[Nn]ovo)[^;/]+) Build' device_replacement: '$1$2' brand_replacement: 'Ainol' model_replacement: '$2' @@ -1564,7 +1564,7 @@ device_parsers: device_replacement: 'Alcatel One Touch $2' brand_replacement: 'Alcatel' model_replacement: 'One Touch $2' - - regex: '; *(?:alcatel[ _])?(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]+);? Build' + - regex: '; *(?:alcatel[ _]|)(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]+);? Build' regex_flag: 'i' device_replacement: 'Alcatel One Touch $1' brand_replacement: 'Alcatel' @@ -1604,7 +1604,7 @@ device_parsers: device_replacement: '$1$2' brand_replacement: 'Allview' model_replacement: '$2' - - regex: '; *(ALLVIEW[ _]?|Allview[ _]?)?(AX1_Shine|AX2_Frenzy) Build' + - regex: '; *(ALLVIEW[ _]?|Allview[ _]?|)(AX1_Shine|AX2_Frenzy) Build' device_replacement: '$1$2' brand_replacement: 'Allview' model_replacement: '$2' @@ -1664,7 +1664,7 @@ device_parsers: # @ref: http://www.luckystar.com.cn/en/mobiletel.aspx?page=1 # @note: brand owned by luckystar ######### - - regex: '; *(G7|M1013|M1015G|M11[CG]?|M-?12[B]?|M15|M19[G]?|M30[ACQ]?|M31[GQ]|M32|M33[GQ]|M36|M37|M38|M701T|M710|M712B|M713|M715G|M716G|M71(?:G|GS|T)?|M72[T]?|M73[T]?|M75[GT]?|M77G|M79T|M7L|M7LN|M81|M810|M81T|M82|M92|M92KS|M92S|M717G|M721|M722G|M723|M725G|M739|M785|M791|M92SK|M93D) Build' + - regex: '; *(G7|M1013|M1015G|M11[CG]?|M-?12[B]?|M15|M19[G]?|M30[ACQ]?|M31[GQ]|M32|M33[GQ]|M36|M37|M38|M701T|M710|M712B|M713|M715G|M716G|M71(?:G|GS|T|)|M72[T]?|M73[T]?|M75[GT]?|M77G|M79T|M7L|M7LN|M81|M810|M81T|M82|M92|M92KS|M92S|M717G|M721|M722G|M723|M725G|M739|M785|M791|M92SK|M93D) Build' device_replacement: 'Aoson $1' brand_replacement: 'Aoson' model_replacement: '$1' @@ -1739,7 +1739,7 @@ device_parsers: # Assistant # @ref: http://www.assistant.ua ######### - - regex: '; *(?:ASSISTANT )?(AP)-?([1789]\d{2}[A-Z]{0,2}|80104) Build' + - regex: '; *(?:ASSISTANT |)(AP)-?([1789]\d{2}[A-Z]{0,2}|80104) Build' device_replacement: 'Assistant $1-$2' brand_replacement: 'Assistant' model_replacement: '$1-$2' @@ -1748,7 +1748,7 @@ device_parsers: # Asus # @ref: http://www.asus.com/uk/Tablets_Mobile/ ######### - - regex: '; *(ME17\d[^;/]*|ME3\d{2}[^;/]+|K00[A-Z]|Nexus 10|Nexus 7(?: 2013)?|PadFone[^;/]*|Transformer[^;/]*|TF\d{3}[^;/]*|eeepc) Build' + - regex: '; *(ME17\d[^;/]*|ME3\d{2}[^;/]+|K00[A-Z]|Nexus 10|Nexus 7(?: 2013|)|PadFone[^;/]*|Transformer[^;/]*|TF\d{3}[^;/]*|eeepc) Build' device_replacement: 'Asus $1' brand_replacement: 'Asus' model_replacement: '$1' @@ -2296,7 +2296,7 @@ device_parsers: # Gionee # @ref: http://www.gionee.com/ ######### - - regex: '; *(Gionee)[ _\-]([^;/]+)(?:/[^;/]+)? Build' + - regex: '; *(Gionee)[ _\-]([^;/]+)(?:/[^;/]+|) Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'Gionee' @@ -2460,7 +2460,7 @@ device_parsers: # @ref: http://www.huaweidevice.com # @note: Needs to be before HTC due to Desire HD Build on U8815 ######### - - regex: '; *(HUAWEI |Huawei-)?([UY][^;/]+) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)' + - regex: '; *(HUAWEI |Huawei-|)([UY][^;/]+) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)' device_replacement: '$1$2' brand_replacement: 'Huawei' model_replacement: '$2' @@ -2476,7 +2476,7 @@ device_parsers: device_replacement: '$1$2' brand_replacement: 'Huawei' model_replacement: '$2' - - regex: '; *((?:HUAWEI[ _]?|Huawei[ _])?Ascend[ _])([^;/]+) Build' + - regex: '; *((?:HUAWEI[ _]?|Huawei[ _]|)Ascend[ _])([^;/]+) Build' device_replacement: '$1$2' brand_replacement: 'Huawei' model_replacement: '$2' @@ -2531,33 +2531,33 @@ device_parsers: device_replacement: 'HTC $1' brand_replacement: 'HTC' model_replacement: '$1' - - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+))?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' + - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' device_replacement: 'HTC $1 $2' brand_replacement: 'HTC' model_replacement: '$1 $2' - - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+))?)?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' + - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' device_replacement: 'HTC $1 $2 $3' brand_replacement: 'HTC' model_replacement: '$1 $2 $3' - - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+))?)?)?(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' + - regex: '; *(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: *Build|\))' device_replacement: 'HTC $1 $2 $3 $4' brand_replacement: 'HTC' model_replacement: '$1 $2 $3 $4' # Android HTC without Version Number matcher - - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/;]+)(?: *Build|[;\)]| - )' + - regex: '; *(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/;]+)(?: *Build|[;\)]| - )' device_replacement: 'HTC $1' brand_replacement: 'HTC' model_replacement: '$1' - - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+))?(?: *Build|[;\)]| - )' + - regex: '; *(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+)|)(?: *Build|[;\)]| - )' device_replacement: 'HTC $1 $2' brand_replacement: 'HTC' model_replacement: '$1 $2' - - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+))?)?(?: *Build|[;\)]| - )' + - regex: '; *(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+)|)|)(?: *Build|[;\)]| - )' device_replacement: 'HTC $1 $2 $3' brand_replacement: 'HTC' model_replacement: '$1 $2 $3' - - regex: '; *(?:(?:HTC|htc)(?:_blocked)*[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+))?)?)?(?: *Build|[;\)]| - )' + - regex: '; *(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+)|)|)|)(?: *Build|[;\)]| - )' device_replacement: 'HTC $1 $2 $3 $4' brand_replacement: 'HTC' model_replacement: '$1 $2 $3 $4' @@ -2568,7 +2568,7 @@ device_parsers: brand_replacement: 'HTC' model_replacement: '$1' # general matcher for anything else - - regex: '(?:[;,] *|^)(?:htccn_chs-)?HTC[ _-]?([^;]+?)(?: *Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)' + - regex: '(?:[;,] *|^)(?:htccn_chs-|)HTC[ _-]?([^;]+?)(?: *Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)' regex_flag: 'i' device_replacement: 'HTC $1' brand_replacement: 'HTC' @@ -2607,12 +2607,12 @@ device_parsers: # iBall # @ref: http://www.iball.co.in/Category/Mobiles/22 ######### - - regex: '; *(?:iBall[ _\-])?(Andi)[ _]?(\d[^;/]*) Build' + - regex: '; *(?:iBall[ _\-]|)(Andi)[ _]?(\d[^;/]*) Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'iBall' model_replacement: '$1 $2' - - regex: '; *(IBall)(?:[ _]([^;/]+))? Build' + - regex: '; *(IBall)(?:[ _]([^;/]+)|) Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'iBall' @@ -2622,7 +2622,7 @@ device_parsers: # IconBIT # @ref: http://www.iconbit.com/catalog/tablets/ ######### - - regex: '; *(NT-\d+[^ ;/]*|Net[Tt]AB [^;/]+|Mercury [A-Z]+|iconBIT)(?: S/N:[^;/]+)? Build' + - regex: '; *(NT-\d+[^ ;/]*|Net[Tt]AB [^;/]+|Mercury [A-Z]+|iconBIT)(?: S/N:[^;/]+|) Build' device_replacement: '$1' brand_replacement: 'IconBIT' model_replacement: '$1' @@ -2695,17 +2695,17 @@ device_parsers: # @note: Zync also offers a "Cloud Z5" device ######### # smartphones - - regex: '; *(?:Intex[ _])?(AQUA|Aqua)([ _\.\-])([^;/]+) *(?:Build|;)' + - regex: '; *(?:Intex[ _]|)(AQUA|Aqua)([ _\.\-])([^;/]+) *(?:Build|;)' device_replacement: '$1$2$3' brand_replacement: 'Intex' model_replacement: '$1 $3' # matches "INTEX CLOUD X1" - - regex: '; *(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+))? *(?:Build|;)' + - regex: '; *(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+)|) *(?:Build|;)' device_replacement: '$1 $2' brand_replacement: 'Intex' model_replacement: '$1 $2' # tablets - - regex: '; *([iI]Buddy)[ _]?(Connect)(?:_|\?_| )?([^;/]*) *(?:Build|;)' + - regex: '; *([iI]Buddy)[ _]?(Connect)(?:_|\?_| |)([^;/]*) *(?:Build|;)' device_replacement: '$1 $2 $3' brand_replacement: 'Intex' model_replacement: 'iBuddy $2 $3' @@ -2728,7 +2728,7 @@ device_parsers: # i.onik # @ref: http://www.i-onik.de/ ######### - - regex: '; *(TP\d+(?:\.\d+)?\-\d[^;/]+) Build' + - regex: '; *(TP\d+(?:\.\d+|)\-\d[^;/]+) Build' device_replacement: 'ionik $1' brand_replacement: 'ionik' model_replacement: '$1' @@ -2944,7 +2944,7 @@ device_parsers: # Lava # @ref: http://www.lavamobiles.com/ ######### - - regex: '; *(?:LAVA[ _])?IRIS[ _\-]?([^/;\)]+) *(?:;|\)|Build)' + - regex: '; *(?:LAVA[ _]|)IRIS[ _\-]?([^/;\)]+) *(?:;|\)|Build)' regex_flag: 'i' device_replacement: 'Iris $1' brand_replacement: 'Lava' @@ -2996,15 +2996,15 @@ device_parsers: device_replacement: 'Lenovo $1 $2' brand_replacement: 'Lenovo' model_replacement: '$1 $2' - - regex: '; *(?:LNV-)?(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])+(.+?)(?:Build|[;/\)])' + - regex: '; *(?:LNV-|)(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])(.+?)(?:Build|[;/\)])' device_replacement: 'Lenovo $1' brand_replacement: 'Lenovo' model_replacement: '$1' - - regex: '[;,] (?:Vodafone )?(SmartTab) ?(II) ?(\d+) Build/' + - regex: '[;,] (?:Vodafone |)(SmartTab) ?(II) ?(\d+) Build/' device_replacement: 'Lenovo $1 $2 $3' brand_replacement: 'Lenovo' model_replacement: '$1 $2 $3' - - regex: '; *(?:Ideapad )?K1 Build/' + - regex: '; *(?:Ideapad |)K1 Build/' device_replacement: 'Lenovo Ideapad K1' brand_replacement: 'Lenovo' model_replacement: 'Ideapad K1' @@ -3034,7 +3034,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'LG' model_replacement: '$1' - - regex: '[;:] *(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+)? *(?:Build|[;\)])' + - regex: '[;:] *(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+|) *(?:Build|[;\)])' device_replacement: '$1' brand_replacement: 'LG' model_replacement: '$1' @@ -3117,7 +3117,7 @@ device_parsers: # Medion # @ref: http://www.medion.com/en/ ######### - - regex: '; *(?:MD_)?LIFETAB[ _]([^;/]+) Build' + - regex: '; *(?:MD_|)LIFETAB[ _]([^;/]+) Build' regex_flag: 'i' device_replacement: 'Medion Lifetab $1' brand_replacement: 'Medion' @@ -3195,7 +3195,7 @@ device_parsers: # Modecom # @ref: http://www.modecom.eu/tablets/portal/ ######### - - regex: '; *(MODECOM )?(FreeTab) ?([^;/]+) Build' + - regex: '; *(MODECOM |)(FreeTab) ?([^;/]+) Build' regex_flag: 'i' device_replacement: '$1$2 $3' brand_replacement: 'Modecom' @@ -3253,7 +3253,7 @@ device_parsers: # MSI # @ref: http://www.msi.com/product/windpad/ ######### - - regex: '; *(?:MSI[ _])?(Primo\d+|Enjoy[ _\-][^;/]+) Build' + - regex: '; *(?:MSI[ _]|)(Primo\d+|Enjoy[ _\-][^;/]+) Build' regex_flag: 'i' device_replacement: '$1' brand_replacement: 'Msi' @@ -3280,7 +3280,7 @@ device_parsers: device_replacement: '$1$2 $3' brand_replacement: 'MyPhone' model_replacement: '$3' - - regex: '; *(A\d+)[ _](Duo)? Build' + - regex: '; *(A\d+)[ _](Duo|) Build' regex_flag: 'i' device_replacement: '$1 $2' brand_replacement: 'MyPhone' @@ -3349,7 +3349,7 @@ device_parsers: device_replacement: '$1$2' brand_replacement: 'Nook' model_replacement: '$2' - - regex: '; *(NOOK )?(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2) Build' + - regex: '; *(NOOK |)(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2) Build' device_replacement: '$1$2' brand_replacement: 'Nook' model_replacement: '$2' @@ -3484,11 +3484,11 @@ device_parsers: # @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA # @models: ADR8995, ADR910L, ADR930VW, C790, CDM8992, CDM8999, IS06, IS11PT, P2000, P2020, P2030, P4100, P5000, P6010, P6020, P6030, P7000, P7040, P8000, P8010, P9020, P9050, P9060, P9070, P9090, PT001, PT002, PT003, TXT8040, TXT8045, VEGA PTL21 ######### - - regex: '; *(SKY[ _])?(IM\-[AT]\d{3}[^;/]+).* Build/' + - regex: '; *(SKY[ _]|)(IM\-[AT]\d{3}[^;/]+).* Build/' device_replacement: 'Pantech $1$2' brand_replacement: 'Pantech' model_replacement: '$1$2' - - regex: '; *((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G)?) Build/' + - regex: '; *((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G|)) Build/' device_replacement: '$1' brand_replacement: 'Pantech' model_replacement: '$1' @@ -3571,7 +3571,7 @@ device_parsers: # Polaroid/ Acho # @ref: http://polaroidstore.com/store/start.asp?category_id=382&category_id2=0&order=title&filter1=&filter2=&filter3=&view=all ######### - - regex: '; *(?:Polaroid[ _])?((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]*)(\/[^;/]*)? Build/' + - regex: '; *(?:Polaroid[ _]|)((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]*)(\/[^;/]*|) Build/' device_replacement: '$1' brand_replacement: 'Polaroid' model_replacement: '$1' @@ -3598,7 +3598,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Positivo' model_replacement: '$1' - - regex: '; *(?:Positivo )?((?:YPY|Ypy)[^;/]+) Build/' + - regex: '; *(?:Positivo |)((?:YPY|Ypy)[^;/]+) Build/' device_replacement: '$1' brand_replacement: 'Positivo' model_replacement: '$1' @@ -3626,7 +3626,7 @@ device_parsers: # @ref: http://www.prestigio.com/catalogue/MultiPhones # @ref: http://www.prestigio.com/catalogue/MultiPads ######### - - regex: '; *(?:Prestigio )?((?:PAP|PMP)\d[^;/]+) Build/' + - regex: '; *(?:Prestigio |)((?:PAP|PMP)\d[^;/]+) Build/' device_replacement: 'Prestigio $1' brand_replacement: 'Prestigio' model_replacement: '$1' @@ -3644,7 +3644,7 @@ device_parsers: # QMobile # @ref: http://www.qmobile.com.pk/ ######### - - regex: '; *(A2|A5|A8|A900)_?(Classic)? Build' + - regex: '; *(A2|A5|A8|A900)_?(Classic|) Build' device_replacement: '$1 $2' brand_replacement: 'Qmobile' model_replacement: '$1 $2' @@ -3710,11 +3710,11 @@ device_parsers: # Samsung Android Devices # @ref: http://www.samsung.com/us/mobile/cell-phones/all-products ######### - - regex: '; *(SAMSUNG |Samsung )?((?:Galaxy (?:Note II|S\d)|GT-I9082|GT-I9205|GT-N7\d{3}|SM-N9005)[^;/]*)\/?[^;/]* Build/' + - regex: '; *(SAMSUNG |Samsung |)((?:Galaxy (?:Note II|S\d)|GT-I9082|GT-I9205|GT-N7\d{3}|SM-N9005)[^;/]*)\/?[^;/]* Build/' device_replacement: 'Samsung $1$2' brand_replacement: 'Samsung' model_replacement: '$2' - - regex: '; *(Google )?(Nexus [Ss](?: 4G)?) Build/' + - regex: '; *(Google |)(Nexus [Ss](?: 4G|)) Build/' device_replacement: 'Samsung $1$2' brand_replacement: 'Samsung' model_replacement: '$2' @@ -3722,15 +3722,15 @@ device_parsers: device_replacement: 'Samsung $2' brand_replacement: 'Samsung' model_replacement: '$2' - - regex: '; *(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G)?) Build/' + - regex: '; *(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G|)) Build/' device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' - - regex: '; *(SAMSUNG[ _\-] *)+([^;/]+) Build' + - regex: '; *(SAMSUNG[ _\-]|)(?:SAMSUNG[ _\-])([^;/]+) Build' device_replacement: 'Samsung $2' brand_replacement: 'Samsung' model_replacement: '$2' - - regex: '; *(SAMSUNG-)?(GT\-[BINPS]\d{4}[^\/]*)(\/[^ ]*) Build' + - regex: '; *(SAMSUNG-|)(GT\-[BINPS]\d{4}[^\/]*)(\/[^ ]*) Build' device_replacement: 'Samsung $1$2$3' brand_replacement: 'Samsung' model_replacement: '$2' @@ -3742,11 +3742,11 @@ device_parsers: device_replacement: 'Samsung $1$2' brand_replacement: 'Samsung' model_replacement: '$2' - - regex: '; *((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]+)(/?[^ ]*)? Build' + - regex: '; *((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]+)(/?[^ ]*|) Build' device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' - - regex: ' ((?:SCH)\-[A-Za-z0-9 ]+)(/?[^ ]*)? Build' + - regex: ' ((?:SCH)\-[A-Za-z0-9 ]+)(/?[^ ]*|) Build' device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' @@ -3883,7 +3883,7 @@ device_parsers: device_replacement: '$1$2' brand_replacement: 'SonyEricsson' model_replacement: '$2' - - regex: '; *((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o)?|R800i|U20i) Build' + - regex: '; *((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o|)|R800i|U20i) Build' device_replacement: '$1' brand_replacement: 'SonyEricsson' model_replacement: '$1' @@ -3947,7 +3947,7 @@ device_parsers: # Spice # @ref: http://www.spicemobilephones.co.in/ ######### - - regex: '; *((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?)?([Mm][Ii])([ _\-])?(\d{3}[^;/]*) Build/' + - regex: '; *((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?|)([Mm][Ii])([ _\-]|)(\d{3}[^;/]*) Build/' device_replacement: '$1$2$3$4' brand_replacement: 'Spice' model_replacement: 'Mi$4' @@ -4086,7 +4086,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'HTC' model_replacement: 'Dream' - - regex: '\b(T-Mobile ?)?(myTouch)[ _]?([34]G)[ _]?([^\/]*) (?:Mozilla|Build)' + - regex: '\b(T-Mobile ?|)(myTouch)[ _]?([34]G)[ _]?([^\/]*) (?:Mozilla|Build)' device_replacement: '$1$2 $3 $4' brand_replacement: 'HTC' model_replacement: '$2 $3 $4' @@ -4131,7 +4131,7 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Toshiba' model_replacement: 'Folio 100' - - regex: '; *(AT[0-9]{2,3}(?:\-A|LE\-A|PE\-A|SE|a)?|AT7-A|AT1S0|Hikari-iFrame/WDPF-[^;/]+|THRiVE|Thrive) Build/' + - regex: '; *(AT[0-9]{2,3}(?:\-A|LE\-A|PE\-A|SE|a|)|AT7-A|AT1S0|Hikari-iFrame/WDPF-[^;/]+|THRiVE|Thrive) Build/' device_replacement: 'Toshiba $1' brand_replacement: 'Toshiba' model_replacement: '$1' @@ -4251,7 +4251,7 @@ device_parsers: # Walton # @ref: http://www.waltonbd.com/ ######### - - regex: '; *(?:Walton[ _\-])?(Primo[ _\-][^;/]+) Build' + - regex: '; *(?:Walton[ _\-]|)(Primo[ _\-][^;/]+) Build' regex_flag: 'i' device_replacement: 'Walton $1' brand_replacement: 'Walton' @@ -4261,7 +4261,7 @@ device_parsers: # Wiko # @ref: http://fr.wikomobile.com/collection.php?s=Smartphones ######### - - regex: '; *(?:WIKO[ \-])?(CINK\+?|BARRY|BLOOM|DARKFULL|DARKMOON|DARKNIGHT|DARKSIDE|FIZZ|HIGHWAY|IGGY|OZZY|RAINBOW|STAIRWAY|SUBLIM|WAX|CINK [^;/]+) Build/' + - regex: '; *(?:WIKO[ \-]|)(CINK\+?|BARRY|BLOOM|DARKFULL|DARKMOON|DARKNIGHT|DARKSIDE|FIZZ|HIGHWAY|IGGY|OZZY|RAINBOW|STAIRWAY|SUBLIM|WAX|CINK [^;/]+) Build/' regex_flag: 'i' device_replacement: 'Wiko $1' brand_replacement: 'Wiko' @@ -4307,7 +4307,7 @@ device_parsers: # Yarvik Zania # @ref: http://yarvik.com ######### - - regex: '; *(?:Xenta |Luna )?(TAB[234][0-9]{2}|TAB0[78]-\d{3}|TAB0?9-\d{3}|TAB1[03]-\d{3}|SMP\d{2}-\d{3}) Build/' + - regex: '; *(?:Xenta |Luna |)(TAB[234][0-9]{2}|TAB0[78]-\d{3}|TAB0?9-\d{3}|TAB1[03]-\d{3}|SMP\d{2}-\d{3}) Build/' device_replacement: 'Yarvik $1' brand_replacement: 'Yarvik' model_replacement: '$1' @@ -4330,7 +4330,7 @@ device_parsers: # XiaoMi # @ref: http://www.xiaomi.com/event/buyphone ######### - - regex: '; *((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/' + - regex: '; *((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/]*) (Build|MIUI)/' device_replacement: 'XiaoMi $1' brand_replacement: 'XiaoMi' model_replacement: '$1' @@ -4496,7 +4496,7 @@ device_parsers: device_replacement: 'Kindle' brand_replacement: 'Amazon' model_replacement: 'Kindle' - - regex: '; ?(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))? Build\b' + - regex: '; ?(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+)|) Build\b' device_replacement: 'Kindle Fire' brand_replacement: 'Amazon' model_replacement: 'Kindle Fire$2' @@ -4548,7 +4548,7 @@ device_parsers: ######### # Alcatel Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:ALCATEL)[^;]*; *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:ALCATEL)[^;]*; *([^;,\)]+)' device_replacement: 'Alcatel $1' brand_replacement: 'Alcatel' model_replacement: '$1' @@ -4556,8 +4556,8 @@ device_parsers: ######### # Asus Windows Phones ######### - #~ - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:ASUS|Asus)[^;]*; *([^;,\)]+)' - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:ASUS|Asus)[^;]*; *([^;,\)]+)' + #~ - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]*; *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]*; *([^;,\)]+)' device_replacement: 'Asus $1' brand_replacement: 'Asus' model_replacement: '$1' @@ -4565,7 +4565,7 @@ device_parsers: ######### # Dell Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:DELL|Dell)[^;]*; *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:DELL|Dell)[^;]*; *([^;,\)]+)' device_replacement: 'Dell $1' brand_replacement: 'Dell' model_replacement: '$1' @@ -4573,7 +4573,7 @@ device_parsers: ######### # HTC Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:HTC|Htc|HTC_blocked[^;]*)[^;]*; *(?:HTC)?([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:HTC|Htc|HTC_blocked[^;]*)[^;]*; *(?:HTC|)([^;,\)]+)' device_replacement: 'HTC $1' brand_replacement: 'HTC' model_replacement: '$1' @@ -4581,7 +4581,7 @@ device_parsers: ######### # Huawei Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:HUAWEI)[^;]*; *(?:HUAWEI )?([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:HUAWEI)[^;]*; *(?:HUAWEI |)([^;,\)]+)' device_replacement: 'Huawei $1' brand_replacement: 'Huawei' model_replacement: '$1' @@ -4589,7 +4589,7 @@ device_parsers: ######### # LG Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:LG|Lg)[^;]*; *(?:LG[ \-])?([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:LG|Lg)[^;]*; *(?:LG[ \-]|)([^;,\)]+)' device_replacement: 'LG $1' brand_replacement: 'LG' model_replacement: '$1' @@ -4597,15 +4597,15 @@ device_parsers: ######### # Noka Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:rv:11; )?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*(\d{3,}[^;\)]*)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:rv:11; |)(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)(\d{3,10}[^;\)]*)' device_replacement: 'Lumia $1' brand_replacement: 'Nokia' model_replacement: 'Lumia $1' - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:NOKIA|Nokia)[^;]*; *(RM-\d{3,})' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]*; *(RM-\d{3,})' device_replacement: 'Nokia $1' brand_replacement: 'Nokia' model_replacement: '$1' - - regex: '(?:Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?)?(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?)*([^;\)]+)' + - regex: '(?:Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]*; *(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)([^;\)]+)' device_replacement: 'Nokia $1' brand_replacement: 'Nokia' model_replacement: '$1' @@ -4613,7 +4613,7 @@ device_parsers: ######### # Microsoft Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?)?(?:Microsoft(?: Corporation)?)[^;]*; *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:Microsoft(?: Corporation|))[^;]*; *([^;,\)]+)' device_replacement: 'Microsoft $1' brand_replacement: 'Microsoft' model_replacement: '$1' @@ -4621,7 +4621,7 @@ device_parsers: ######### # Samsung Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:SAMSUNG)[^;]*; *(?:SAMSUNG )?([^;,\.\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:SAMSUNG)[^;]*; *(?:SAMSUNG |)([^;,\.\)]+)' device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' @@ -4629,7 +4629,7 @@ device_parsers: ######### # Toshiba Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]*; *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]*; *([^;,\)]+)' device_replacement: 'Toshiba $1' brand_replacement: 'Toshiba' model_replacement: '$1' @@ -4637,7 +4637,7 @@ device_parsers: ######### # Generic Windows Phones ######### - - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?)?([^;]+); *([^;,\)]+)' + - regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)([^;]+); *([^;,\)]+)' device_replacement: '$1 $2' brand_replacement: '$1' model_replacement: '$2' @@ -4657,7 +4657,7 @@ device_parsers: ######### # Firefox OS ######### - - regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]+)(?:/[^;]+)?; rv:[^\)]+\) Gecko/[^\/]+ Firefox/' + - regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]+)(?:/[^;]+|); rv:[^\)]+\) Gecko/[^\/]+ Firefox/' device_replacement: 'Alcatel $1 $2 $3' brand_replacement: 'Alcatel' model_replacement: 'One Touch $3' @@ -4688,7 +4688,7 @@ device_parsers: brand_replacement: '$1' model_replacement: '$2' # Nokia Symbian - - regex: '\(Symbian(?:/3)?; U; ([^;]+);' + - regex: '\(Symbian(?:/3|); U; ([^;]+);' device_replacement: 'Nokia $1' brand_replacement: 'Nokia' model_replacement: '$1' @@ -4733,7 +4733,7 @@ device_parsers: device_replacement: 'Palm Treo $1' brand_replacement: 'Palm' model_replacement: 'Treo $1' - - regex: 'webOS.*(P160U(?:NA)?)/(\d+).(\d+)' + - regex: 'webOS.*(P160U(?:NA|))/(\d+).(\d+)' device_replacement: 'HP Veer' brand_replacement: 'HP' model_replacement: 'Veer' @@ -4860,7 +4860,7 @@ device_parsers: device_replacement: 'Asus $1' brand_replacement: 'Asus' model_replacement: '$1' - - regex: '(?:asus.*?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _])?[A-Za-z0-9]+)' + - regex: '(?:asus.*?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _]|)[A-Za-z0-9]+)' device_replacement: 'Asus $1' brand_replacement: 'Asus' model_replacement: '$1' @@ -4901,7 +4901,7 @@ device_parsers: ########## # htc ########## - - regex: '\b(?:HTC/|HTC/[a-z0-9]+/)?HTC[ _\-;]? *(.*?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)' + - regex: '\b(?:HTC/|HTC/[a-z0-9]+/|)HTC[ _\-;]? *(.*?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)' device_replacement: 'HTC $1' brand_replacement: 'HTC' model_replacement: '$1' @@ -4958,11 +4958,11 @@ device_parsers: device_replacement: '$1' brand_replacement: '$2' model_replacement: '$3' - - regex: '(HbbTV)/1\.1\.1.*CE-HTML/1\.\d;(Vendor/)*(THOM[^;]*?)[;\s](?:.*SW-Version/.*)*(LF[^;]+);?' + - regex: '(HbbTV)/1\.1\.1.*CE-HTML/1\.\d;(Vendor/|)(THOM[^;]*?)[;\s].{0,30}(LF[^;]+);?' device_replacement: '$1' brand_replacement: 'Thomson' model_replacement: '$4' - - regex: '(HbbTV)(?:/1\.1\.1)?(?: ?\(;;;;;\))?; *CE-HTML(?:/1\.\d)?; *([^ ]+) ([^;]+);' + - regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|); *CE-HTML(?:/1\.\d|); *([^ ]+) ([^;]+);' device_replacement: '$1' brand_replacement: '$2' model_replacement: '$3' @@ -4979,7 +4979,7 @@ device_parsers: ########## # LGE NetCast TV ########## - - regex: 'LGE; (?:Media\/)?([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media)?-\d+' + - regex: 'LGE; (?:Media\/|)([^;]*);[^;]*;[^;]*;?\); "?LG NetCast(\.TV|\.Media|)-\d+' device_replacement: 'NetCast$2' brand_replacement: 'LG' model_replacement: '$1' @@ -5008,7 +5008,7 @@ device_parsers: brand_replacement: '$1' model_replacement: '$2' # other LG phones - - regex: '\b(?:LGE[ \-]LG\-(?:AX)?|LGE |LGE?-LG|LGE?[ \-]|LG[ /\-]|lg[\-])([A-Za-z0-9]+)\b' + - regex: '\b(?:LGE[ \-]LG\-(?:AX|)|LGE |LGE?-LG|LGE?[ \-]|LG[ /\-]|lg[\-])([A-Za-z0-9]+)\b' device_replacement: 'LG $1' brand_replacement: 'LG' model_replacement: '$1' @@ -5153,7 +5153,7 @@ device_parsers: device_replacement: '$2 $1' brand_replacement: '$2' model_replacement: '$1' - - regex: '(Sony)(?:BDP\/|\/)?([^ /;\)]+)[ /;\)]' + - regex: '(Sony)(?:BDP\/|\/|)([^ /;\)]+)[ /;\)]' device_replacement: '$1 $2' brand_replacement: '$1' model_replacement: '$2' @@ -5189,21 +5189,21 @@ device_parsers: - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' # No build info at all - "Build" follows locale immediately - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]' device_replacement: 'Generic Smartphone' brand_replacement: 'Generic' model_replacement: 'Smartphone' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *\-?[A-Za-z]{2}; *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|)(?:;.*|); *(.+?) Build[/ ]' brand_replacement: 'Generic_Android' model_replacement: '$1' diff --git a/tests/regexes.js b/tests/regexes.js new file mode 100644 index 00000000..6e1e4468 --- /dev/null +++ b/tests/regexes.js @@ -0,0 +1,27 @@ +'use strict' + +var assert = require('assert') +var path = require('path') +var fs = require('fs') +var yaml = require('yamlparser') +var regexes = readYAML('../regexes.yaml') +var safe = require('safe-regex') + +function readYAML (fileName) { + var file = path.join(__dirname, fileName) + var data = fs.readFileSync(file, 'utf8') + return yaml.eval(data) +} + +describe('regexes', function () { + Object.keys(regexes).forEach(function (parser) { + describe(parser, function () { + regexes[parser].forEach(function(item) { + it(item.regex, function () { + // console.log(item.regex) + assert.ok(safe(item.regex)) + }) + }) + }) + }) +}) From 625b278cdfa8f21004ab94e873a87ccaa6c9790f Mon Sep 17 00:00:00 2001 From: "Luc Gommans (X41)" Date: Wed, 12 Dec 2018 23:38:37 +0100 Subject: [PATCH 198/253] Ask users to test for ReDoS in CONTRIBUTING.md --- CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30bcf3b6..5fbfb416 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,9 +10,10 @@ Contributing to the project, especially `regexes.yaml`, is both welcomed and enc * `tests/test_device.yaml` * `tests/test_os.yaml` * `tests/test_ua.yaml` -5. Push your branch to GitHub and submit a pull request -6. Monitor the pull request to make sure the Travis build succeeds. If it fails simply make the necessary changes to your branch and push it. Travis will re-test the changes. +5. Check that your regex is not vulnerable to [ReDoS](https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS) using the test in `tests/regexes.js` +6. Push your branch to GitHub and submit a pull request +7. Monitor the pull request to make sure the Travis build succeeds. If it fails simply make the necessary changes to your branch and push it. Travis will re-test the changes. That's it. If you don't feel comfortable forking the project or modifying the YAML you can also [submit an issue](https://github.com/ua-parser/uap-core/issues) that includes the appropriate user agent string and the expected results of parsing. -Thanks! \ No newline at end of file +Thanks! From 386b235a258831f79085ada854bfc72dab9808b7 Mon Sep 17 00:00:00 2001 From: "Luc Gommans (X41)" Date: Wed, 12 Dec 2018 23:51:20 +0100 Subject: [PATCH 199/253] Safeify FB_IAB --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index a06e8faf..4306363d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -111,7 +111,7 @@ user_agent_parsers: # Social Networks # Facebook Messenger must go before Facebook - - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+))?)?' + - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' family_replacement: 'Facebook Messenger' # Facebook - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' From 227ab71d04c4b488e21dcbb92d2fc6772631787d Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 13 Dec 2018 08:50:21 +0100 Subject: [PATCH 200/253] fix os for salesforce agent --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 4306363d..54acb349 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -894,7 +894,7 @@ os_parsers: os_replacement: 'Android' # Salesforce - - regex: '(android)\s(?:mobile\/)(\d+)\.(\d+)(?:\.(\d+)|)' + - regex: '(android)\s(?:mobile\/)(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' os_replacement: 'Android' ########## From 703fbc92a774553c1c40b7fb35908d36846d3248 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 13 Dec 2018 09:09:28 +0100 Subject: [PATCH 201/253] add regexes tests to npm test --- package.json | 2 +- tests/mocha.opts | 3 +++ tests/regexes.js | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 tests/mocha.opts diff --git a/package.json b/package.json index 19219717..df721074 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,6 @@ "yamlparser": ">=0.0.2" }, "scripts": { - "test": "mocha -u tdd -R min ./tests/test.js" + "test": "mocha --opts ./tests/mocha.opts ./tests" } } diff --git a/tests/mocha.opts b/tests/mocha.opts new file mode 100644 index 00000000..700bbc48 --- /dev/null +++ b/tests/mocha.opts @@ -0,0 +1,3 @@ +--ui tdd +--reporter min +--check-leaks diff --git a/tests/regexes.js b/tests/regexes.js index 6e1e4468..fb2635cf 100644 --- a/tests/regexes.js +++ b/tests/regexes.js @@ -13,11 +13,11 @@ function readYAML (fileName) { return yaml.eval(data) } -describe('regexes', function () { +suite('regexes', function () { Object.keys(regexes).forEach(function (parser) { - describe(parser, function () { + suite(parser, function () { regexes[parser].forEach(function(item) { - it(item.regex, function () { + test(item.regex, function () { // console.log(item.regex) assert.ok(safe(item.regex)) }) From 17d15063287b21fb6b5b7519bbccf1402f9e9e5b Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 14 Dec 2018 07:45:10 +0100 Subject: [PATCH 202/253] uap-ref-impl needs a new version published on npm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df721074..b2e86166 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "mocha": "*", "safe-regex": "^2.0.1", - "uap-ref-impl": "*", + "uap-ref-impl": "git+https://github.com/ua-parser/uap-ref-impl#master", "yamlparser": ">=0.0.2" }, "scripts": { From 2fcf9dff818120b37ed6ba82a7e6be0b884b2d9c Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 14 Dec 2018 07:57:03 +0100 Subject: [PATCH 203/253] remove unnecessary group --- regexes.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 54acb349..7a147980 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1019,11 +1019,11 @@ os_parsers: ########## - regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+)|)|Mach-O)' os_replacement: 'Mac OS X' - - regex: '(\w+\s+Mac OS X\s+\w+\s+(\d+).(\d+).(\d+).*)' + - regex: '\w+\s+Mac OS X\s+\w+\s+(\d+).(\d+).(\d+).*' os_replacement: 'Mac OS X' - os_v1_replacement: '$2' - os_v2_replacement: '$3' - os_v3_replacement: '$4' + os_v1_replacement: '$1' + os_v2_replacement: '$2' + os_v3_replacement: '$3' # Leopard - regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)' os_replacement: 'Mac OS X' From 5290cd11644d5e1069ac7cf52c3c3b7defdfb80d Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 14 Dec 2018 08:04:31 +0100 Subject: [PATCH 204/253] remove node v4+v6, adding v10 incompatible module dependencies --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba58f19f..b7017f1c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,13 @@ sudo: false language: node_js node_js: - - 4 - - 6 - 8 + - 10 - node script: - "npm test" - + notifications: irc: "chat.freenode.net#ua-parser" From 764947f552c6fc9ac80759acb5165a83ee746678 Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 14 Dec 2018 08:19:33 +0100 Subject: [PATCH 205/253] npmignore --- .npmignore | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .npmignore diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..07ba3f9c --- /dev/null +++ b/.npmignore @@ -0,0 +1,8 @@ +node_modules/ +test_resources/ +tests/ +tmp/ +*.bak +*.tgz +*.log +.* From 010ccdc7303546cd22b9da687c29f4a996990014 Mon Sep 17 00:00:00 2001 From: commenthol Date: Fri, 14 Dec 2018 08:19:47 +0100 Subject: [PATCH 206/253] 0.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b2e86166..f755375a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.5.0", + "version": "0.6.0", "maintainers": [ { "name": "Tobie Langel", From 8f247bee2cebad8b8e075767465639c875b3e6b1 Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Tue, 18 Dec 2018 23:12:05 +1100 Subject: [PATCH 207/253] Adding tests and rules for PTST Webpagetest.org spiders --- regexes.yaml | 5 +++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 7a147980..e476f6a9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -33,6 +33,11 @@ user_agent_parsers: - regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'PingdomBot' + # PTST / WebPageTest.org crawlers + - regex: ' PTST/\d+\.\d+$' + family_replacement: 'WebPageTest.org bot' + device_replacement: 'Spider' + # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' family_replacement: 'NewRelicPingerBot' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4e31145f..b3455c72 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1797,6 +1797,24 @@ test_cases: minor: '0' patch: '1' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko PTST/1.0' + family: 'WebPageTest.org bot' + major: '11' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.0 Safari/537.36 PTST/1.0' + family: 'WebPageTest.org bot' + major: '64' + minor: '0' + patch: '3282' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36 PTST/180521.140508' + family: 'WebPageTest.org bot' + major: '65' + minor: '0' + patch: '3325' + - user_agent_string: 'CazoodleBot/CazoodleBot-0.1 (CazoodleBot Crawler; http://www.cazoodle.com/cazoodlebot; cazoodlebot@cazoodle.com)' family: 'CazoodleBot' major: '0' From 0d86eeea5832c95e34559d916c71e0762adb0b74 Mon Sep 17 00:00:00 2001 From: Ueda Satoshi Date: Tue, 25 Dec 2018 10:57:39 +0900 Subject: [PATCH 208/253] Add LINE Browser --- regexes.yaml | 5 +++++ tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 7a147980..1560fa4c 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -320,6 +320,11 @@ user_agent_parsers: # Crosswalk must go before Mobile Chrome for Android - regex: '(Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)' + # LINE https://line.me/en/ + # Must go before Mobile Chrome for Android + - regex: '(Line)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'LINE' + # Chrome Mobile - regex: 'Version/.+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile WebView' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4e31145f..4e564752 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6908,6 +6908,18 @@ test_cases: minor: '45' patch: '2454' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A372 Safari Line/7.12.0' + family: 'LINE' + major: '7' + minor: '12' + patch: '0' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.1; FTJ152B Build/LMY47D; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.81 Mobile Safari/537.36 Line/6.4.1' + family: 'LINE' + major: '6' + minor: '4' + patch: '1' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.2; GT-S7710 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile' family: 'Chrome Mobile' major: '18' From 17c70c582d40d5a6bcb96f3befd2278e759fdb5c Mon Sep 17 00:00:00 2001 From: Patrick Cording Date: Tue, 25 Dec 2018 21:53:33 +0100 Subject: [PATCH 209/253] User agent detection: ViaFree app --- regexes.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 7a147980..58cb2af9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -784,6 +784,10 @@ user_agent_parsers: # Box Drive and Box Sync https://www.box.com/resources/downloads - regex: '^(Box(?: Sync)?)/(\d+)\.(\d+)\.(\d+)' + # ViaFree streaming app https://www.viafree.{dk|se|no} + - regex: '^(ViaFree|Viafree)-(?:tvOS-)?[A-Z]{2}/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'ViaFree' + os_parsers: ########## # HbbTV vendors From eeec9fe5ab7a7d184403292574e52dc2905074c9 Mon Sep 17 00:00:00 2001 From: Patrick Cording Date: Tue, 25 Dec 2018 21:59:03 +0100 Subject: [PATCH 210/253] OS detection: tvOS in apps --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 58cb2af9..6d7e279b 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1271,7 +1271,7 @@ os_parsers: ########## # Apple TV ########## - - regex: '(tvOS)/(\d+).(\d+)' + - regex: '(tvOS)(?:/| )(\d+).(\d+)(?:\.(\d+))?' os_replacement: 'tvOS' ########## From 981beb1e9c730a19d2b45f38d5b3861ed3895095 Mon Sep 17 00:00:00 2001 From: Patrick Cording Date: Tue, 25 Dec 2018 22:26:02 +0100 Subject: [PATCH 211/253] Test cases --- tests/test_os.yaml | 13 +++++++++++++ tests/test_ua.yaml | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 2577ad38..1c482e26 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2679,3 +2679,16 @@ test_cases: patch: patch_minor: + - user_agent_string: 'ViaFree-DK/3.8.3 (com.MTGx.ViaFree.dk; build:7383; iOS 12.1.0) Alamofire/4.7.0' + family: 'iOS' + major: '12' + minor: '1' + patch: '0' + patch_minor: + + - user_agent_string: 'Viafree-tvOS-DK/3.7.1 (com.MTGx.ViaFree.dk; build:7341; tvOS 12.1.0) Alamofire/4.7.0' + family: 'tvOS' + major: '12' + minor: '1' + patch: '0' + patch_minor: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4e31145f..51e4a896 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7724,3 +7724,14 @@ test_cases: minor: '0' patch: '169645775' + - user_agent_string: 'ViaFree-DK/3.8.3 (com.MTGx.ViaFree.dk; build:7383; iOS 12.1.0) Alamofire/4.7.0' + family: 'ViaFree' + major: '3' + minor: '8' + patch: '3' + + - user_agent_string: 'Viafree-tvOS-DK/3.7.1 (com.MTGx.ViaFree.dk; build:7341; tvOS 12.1.0) Alamofire/4.7.0' + family: 'ViaFree' + major: '3' + minor: '7' + patch: '1' From 24f0d5cfd36d7fc036e639fdb9772efa698ad273 Mon Sep 17 00:00:00 2001 From: Patrick Cording Date: Tue, 25 Dec 2018 22:31:14 +0100 Subject: [PATCH 212/253] Fix ReDoS vulnerability --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 6d7e279b..aebbdbfc 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1271,7 +1271,7 @@ os_parsers: ########## # Apple TV ########## - - regex: '(tvOS)(?:/| )(\d+).(\d+)(?:\.(\d+))?' + - regex: '(tvOS)(?:/| )(\d+).(\d+)(?:\.(\d+)|)' os_replacement: 'tvOS' ########## From 41b648e7d611d67e3d0d21bba8ad7b9b681773b9 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 26 Dec 2018 09:41:29 +0100 Subject: [PATCH 213/253] 0.6.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f755375a..1c31d86b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.0", + "version": "0.6.1", "maintainers": [ { "name": "Tobie Langel", From c1d55e9bcb0b66a7c12e3ba732e975394d121d31 Mon Sep 17 00:00:00 2001 From: Patrick Cording Date: Wed, 26 Dec 2018 09:46:13 +0100 Subject: [PATCH 214/253] Fix tvOS regex --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index aebbdbfc..d2df4685 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1271,7 +1271,7 @@ os_parsers: ########## # Apple TV ########## - - regex: '(tvOS)(?:/| )(\d+).(\d+)(?:\.(\d+)|)' + - regex: '(tvOS)[/ ](\d+)\.(\d+)(?:\.(\d+)|)' os_replacement: 'tvOS' ########## From 87aed4387159dbbfbbebc4d5cd7f8d7c4b3ac0a6 Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 26 Dec 2018 10:36:09 +0100 Subject: [PATCH 215/253] 0.6.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c31d86b..8f40a4f4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.1", + "version": "0.6.2", "maintainers": [ { "name": "Tobie Langel", From 43db37e31a00bd0454b7cbd5f4426b2ac64b373e Mon Sep 17 00:00:00 2001 From: commenthol Date: Wed, 26 Dec 2018 23:40:50 +0100 Subject: [PATCH 216/253] fix: prevent backtracking in crawler, bot regexes --- .gitignore | 2 ++ .npmrc | 1 + regexes.yaml | 12 ++++++------ test_resources/pgts_browser_list.yaml | 8 ++++---- tests/regexes.js | 11 ++++++++++- tests/test_ua.yaml | 2 +- 6 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 .npmrc diff --git a/.gitignore b/.gitignore index e617da44..0682a384 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .DS_Store node_modules/ package-lock.json +*.tgz +*.log diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..43c97e71 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/regexes.yaml b/regexes.yaml index 0a320bd9..b68e3950 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -88,18 +88,18 @@ user_agent_parsers: family_replacement: 'Pinterestbot' # Bots - - regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)' + - regex: '(CSimpleSpider|Cityreview Robot|CrawlDaddy|CrawlFire|Finderbots|Index crawler|Job Roboter|KiwiStatus Spider|Lijit Crawler|QuerySeekerSpider|ScollSpider|Trends Crawler|USyd-NLP-Spider|SiteCat Webbot|BotName\/\$BotVersion|123metaspider-Bot|1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)' # AWS S3 Clients # must come before "Bots General matcher" to catch "boto"/"boto3" before "bot" - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?))|s3fs)/(\d+)\.(\d+)(?:\.(\d+)|)' # Bots General matcher 'name/0.0' - - regex: '(?:\/[A-Za-z0-9\.]+|) *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' - # Bots General matcher 'name 0.0' - - regex: '(?:\/[A-Za-z0-9\.]+|) *([A-Za-z0-9 _\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*)) (\d+)(?:\.(\d+)(?:\.(\d+)|)|)' - # Bots containing spider|scrape|bot(but not CUBOT)|Crawl - - regex: '((?:[A-z0-9]+|[A-z\-]+ ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[A-Za-z0-9-]*(?:[^C][^Uu])[Bb]ot|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]*)(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' + - regex: '(?:\/[A-Za-z0-9\.]+|) {0,5}([A-Za-z0-9 \-_\!\[\]:]{0,50}(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]{0,50}))[/ ](\d+)(?:\.(\d+)(?:\.(\d+)|)|)' + # Bots containing bot(but not CUBOT) + - regex: '((?:[A-Za-z][A-Za-z0-9 -]{0,50}|)[^C][^Uu][Bb]ot)\b(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' + # Bots containing spider|scrape|Crawl + - regex: '((?:[A-z0-9]{1,50}|[A-z\-]{1,50} ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]{0,50})(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)' # HbbTV standard defines what features the browser should understand. # but it's like targeting "HTML5 browsers", effective browser support depends on the model diff --git a/test_resources/pgts_browser_list.yaml b/test_resources/pgts_browser_list.yaml index fd376d2f..c0532e0f 100755 --- a/test_resources/pgts_browser_list.yaml +++ b/test_resources/pgts_browser_list.yaml @@ -39415,9 +39415,9 @@ test_cases: patch: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; 3COM U.S. Robotics)' - family: 'Robotics' - major: - minor: + family: 'IE' + major: '6' + minor: '0' patch: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; ABN AMRO)' @@ -63409,7 +63409,7 @@ test_cases: patch: - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows XP Professional Bot v.5.)' - family: 'XP Professional Bot' + family: 'Windows XP Professional Bot' major: minor: patch: diff --git a/tests/regexes.js b/tests/regexes.js index fb2635cf..79ab0c71 100644 --- a/tests/regexes.js +++ b/tests/regexes.js @@ -6,6 +6,7 @@ var fs = require('fs') var yaml = require('yamlparser') var regexes = readYAML('../regexes.yaml') var safe = require('safe-regex') +var refImpl = require('uap-ref-impl') function readYAML (fileName) { var file = path.join(__dirname, fileName) @@ -18,10 +19,18 @@ suite('regexes', function () { suite(parser, function () { regexes[parser].forEach(function(item) { test(item.regex, function () { - // console.log(item.regex) assert.ok(safe(item.regex)) }) }) }) }) + + test('should not backtrack', function () { + var parse = refImpl(regexes).parse + var ua = Array(3200).fill('a').join('') + var start = Date.now() + parse(ua) + var diff = Date.now() - start + assert.ok(diff < 500, diff) + }) }) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 4b014bcb..0421765b 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -4741,7 +4741,7 @@ test_cases: patch: - user_agent_string: 'FAST-mSEARCH Crawler 0.1 (bergum@fast.no)' - family: 'mSEARCH Crawler' + family: 'FAST-mSEARCH Crawler' major: '0' minor: '1' patch: From 9bc8d580132c5de0f550f980dfd5412d44485db4 Mon Sep 17 00:00:00 2001 From: commenthol Date: Thu, 3 Jan 2019 06:39:09 +0100 Subject: [PATCH 217/253] 0.6.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f40a4f4..55b7b258 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.2", + "version": "0.6.3", "maintainers": [ { "name": "Tobie Langel", From a099d93adeda881616b42b096ac91519696a6d63 Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Mon, 7 Jan 2019 22:24:04 +1100 Subject: [PATCH 218/253] Formatting regex for proper extraction and tests --- regexes.yaml | 7 ++++++- tests/test_device.yaml | 15 +++++++++++++++ tests/test_ua.yaml | 12 ++++++------ 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index e476f6a9..bf1c760c 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -34,7 +34,7 @@ user_agent_parsers: family_replacement: 'PingdomBot' # PTST / WebPageTest.org crawlers - - regex: ' PTST/\d+\.\d+$' + - regex: ' (PTST)/(\d+)\.(\d+)$' family_replacement: 'WebPageTest.org bot' device_replacement: 'Spider' @@ -1453,6 +1453,11 @@ device_parsers: brand_replacement: 'Spider' model_replacement: 'Feature Phone' + # PTST / WebPageTest.org crawlers + - regex: ' PTST/\d+\.\d+$' + device_replacement: 'Spider' + brand_replacement: 'Spider' + ######### # WebBrowser for SmartWatch # @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 34b2b9cd..a5b148f2 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -650,6 +650,21 @@ test_cases: brand: 'Spider' model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko PTST/1.0' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.0 Safari/537.36 PTST/1.0' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36 PTST/180521.140508' + family: 'Spider' + brand: 'Spider' + model: 'Desktop' + - user_agent_string: 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' family: 'Spider' brand: 'Spider' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b3455c72..844a5e8a 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1799,21 +1799,21 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko PTST/1.0' family: 'WebPageTest.org bot' - major: '11' + major: '1' minor: '0' patch: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.0 Safari/537.36 PTST/1.0' family: 'WebPageTest.org bot' - major: '64' + major: '1' minor: '0' - patch: '3282' + patch: - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36 PTST/180521.140508' family: 'WebPageTest.org bot' - major: '65' - minor: '0' - patch: '3325' + major: '180521' + minor: '140508' + patch: - user_agent_string: 'CazoodleBot/CazoodleBot-0.1 (CazoodleBot Crawler; http://www.cazoodle.com/cazoodlebot; cazoodlebot@cazoodle.com)' family: 'CazoodleBot' From 2e7381225a09dd85321e32181963d8e2b5329f8c Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Mon, 7 Jan 2019 22:33:02 +1100 Subject: [PATCH 219/253] Setting expected value for device model properly --- tests/test_device.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_device.yaml b/tests/test_device.yaml index a5b148f2..cfc925e9 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -653,17 +653,17 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko PTST/1.0' family: 'Spider' brand: 'Spider' - model: 'Desktop' + model: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.0 Safari/537.36 PTST/1.0' family: 'Spider' brand: 'Spider' - model: 'Desktop' + model: - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36 PTST/180521.140508' family: 'Spider' brand: 'Spider' - model: 'Desktop' + model: - user_agent_string: 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' family: 'Spider' From cf1fe13fb2e91fad5668bc842128ca67edcd7b00 Mon Sep 17 00:00:00 2001 From: Zach Weglarz Date: Thu, 10 Jan 2019 14:31:00 -0500 Subject: [PATCH 220/253] Parse iPhone, iPad, and iPod as iOS devices There is already a parser that uses this same regex for detecting Mobile Safari Webviews, which we should also identify as iOS devices. --- regexes.yaml | 6 ++++++ tests/test_os.yaml | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index b68e3950..4a2a4c90 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1273,6 +1273,12 @@ os_parsers: ########################## - regex: 'Outlook-(iOS)/\d+\.\d+\.prod\.iphone' + ########################## + # iOS devices, the same regex matches mobile safari webviews + ########################## + - regex: '(iPod|iPhone|iPad)' + os_replacement: 'iOS' + ########## # Apple TV ########## diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 1c482e26..9b1fc568 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -2419,6 +2419,13 @@ test_cases: patch: '4' patch_minor: + - user_agent_string: 'Zendesk for iPhone 1.2.1 (4395)' + family: 'iOS' + major: + minor: + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_11_6)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/52.0.2743.116+Safari/537.36' family: 'Mac OS X' major: '10' From 9b43799a2b9041ff9c9e367b8fd6e24dce244716 Mon Sep 17 00:00:00 2001 From: Rocco Zanni Date: Fri, 11 Jan 2019 09:52:53 +0100 Subject: [PATCH 221/253] Fixed regexes matching some user agent on windows in order avoid embedding the version number into the family string --- regexes.yaml | 4 +- tests/test_os.yaml | 102 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 87 insertions(+), 19 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index b68e3950..16ca45d9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -954,8 +954,6 @@ os_parsers: os_replacement: 'Windows' os_v1_replacement: 'ME' - - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)' - - regex: '(Windows NT 6\.2; ARM;)' os_replacement: 'Windows' os_v1_replacement: 'RT' @@ -998,7 +996,7 @@ os_parsers: os_replacement: 'Windows' os_v1_replacement: 'CE' - - regex: 'Win ?(95|98|3.1|NT|ME|2000)' + - regex: 'Win(?:dows)? ?(95|98|3.1|NT|ME|2000|XP|Vista|7|CE)' os_replacement: 'Windows' os_v1_replacement: '$1' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 1c482e26..566c81d6 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -736,15 +736,15 @@ test_cases: patch_minor: - user_agent_string: 'ICE Browser/5.05 (Java 1.4.0; Windows 2000 5.0 x86)' - family: 'Windows 2000' - major: + family: 'Windows' + major: '2000' minor: patch: patch_minor: - user_agent_string: 'NCSA_Mosaic/2.0 (Windows 3.1)' - family: 'Windows 3.1' - major: + family: 'Windows' + major: '3.1' minor: patch: patch_minor: @@ -2580,21 +2580,21 @@ test_cases: minor: '2' patch: '5' patch_minor: - + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 Flipboard/4.2.2' family: 'iOS' major: '11' minor: '2' patch: '6' patch_minor: - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 Flipboard/4.1.9/4323,4.1.9.4323' family: 'Android' major: '7' minor: '0' patch: patch_minor: - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Onefootball/Android/9.10.6' family: 'Android' major: '7' @@ -2608,7 +2608,7 @@ test_cases: minor: '0' patch: patch_minor: - + - user_agent_string: 'Wget/1.18 (linux-gnu)' family: 'Linux' major: @@ -2635,28 +2635,28 @@ test_cases: major: '8' minor: '0' patch: '0' - patch_minor: + patch_minor: - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/7.0 (SM-G955U) Salesforce1/15.2 Native uid_4ec4068eddf27447 ftr_ Cordova/6.2.3' family: 'Android' major: '7' minor: '0' - patch: - patch_minor: - + patch: + patch_minor: + - user_agent_string: 'SalesforceMobileSDK/5.3.0 android mobile/9 (SM-G955U) Salesforce1/15.2 Native uid_4ec4068eddf27447 ftr_ Cordova/6.2.3' family: 'Android' major: '9' minor: - patch: - patch_minor: + patch: + patch_minor: - user_agent_string: 'Mozilla/5.0 (Linux; Android 9; Pixel Build/PPP3.180510.008) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.81 Mobile Safari/537.36' family: 'Android' major: '9' minor: - patch: - patch_minor: + patch: + patch_minor: - user_agent_string: 'Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp' family: 'Chrome OS' @@ -2692,3 +2692,73 @@ test_cases: minor: '1' patch: '0' patch_minor: + + - user_agent_string: 'iTunes/12.7.1 (Windows; Microsoft Windows 7 Ultimate Edition Service Pack 1 (Build 7601)) AppleWebKit/7604.3005.2001.1' + family: 'Windows' + major: '7' + minor: + patch: + patch_minor: + + - user_agent_string: 'iTunes/12.1.3 (Windows; Microsoft Windows XP Professional Service Pack 3 (Build 2600)) AppleWebKit/7600.1017.9000.3' + family: 'Windows' + major: 'XP' + minor: + patch: + patch_minor: + + - user_agent_string: 'iTunes/12.1.3 (Windows; Microsoft Windows Vista Business Edition Service Pack 2 (Build 6002)) AppleWebKit/7600.1017.9000.3 ' + family: 'Windows' + major: 'Vista' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; Linux 3.3.8-3.3) [Netgem; 7.7.01-51; i-Player; netbox; sezmi_totalgem]' + family: 'Windows' + major: '98' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/2.0 (compatible; MSIE 3.0; Windows 3.1)' + family: 'Windows' + major: '3.1' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows NT 4.0; rv:52.0) Gecko/20100101 Firefox/52.0' + family: 'Windows' + major: 'NT' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [de]' + family: 'Windows' + major: 'ME' + minor: + patch: + patch_minor: + + - user_agent_string: 'Microsoft Internet Explorer/1.0 (Windows 95)' + family: 'Windows' + major: '95' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows CE,BrailleNote; IEMobile 7.11)' + family: 'Windows' + major: 'CE' + minor: + patch: + patch_minor: + + - user_agent_string: 'Mozilla/5.0 (Windows 2000; U) Opera 7.0 [en]' + family: 'Windows' + major: '2000' + minor: + patch: + patch_minor: From 6cfb915779a6b707b4f622cc1ebb70c15000bfb2 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 12 Jan 2019 09:34:48 +0100 Subject: [PATCH 222/253] 0.6.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55b7b258..2c7f7ffd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.3", + "version": "0.6.4", "maintainers": [ { "name": "Tobie Langel", From 72089e0458f66f48ff895e8245ba308abd2ffae3 Mon Sep 17 00:00:00 2001 From: "matthew.woolf@mailonline.co.uk" Date: Mon, 14 Jan 2019 15:42:59 +0000 Subject: [PATCH 223/253] Add UA for GSA ("Google Search App") on Android, plus tests --- regexes.yaml | 8 ++++++++ tests/test_ua.yaml | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 388034a6..7300ce13 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -330,6 +330,14 @@ user_agent_parsers: - regex: '(Line)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'LINE' + # Google Search App on Android, eg: + # Mozilla/5.0 (Linux; Android 8.1.0; TA-1024 Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 + # Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 + # Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181205.006; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 + + - regex: 'Mozilla.+Android.+(GSA)/(\d+)\.(\d+)\.(\d+).*' + family_replacement: 'Google' + # Chrome Mobile - regex: 'Version/.+(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)' family_replacement: 'Chrome Mobile WebView' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a20eb0b3..ab860c27 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7765,3 +7765,21 @@ test_cases: major: '3' minor: '7' patch: '1' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.1.0; TA-1024 Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64' + family: 'Google' + major: '8' + minor: '65' + patch: '5' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64' + family: 'Google' + major: '8' + minor: '65' + patch: '5' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181205.006; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64' + family: 'Google' + major: '8' + minor: '65' + patch: '5' From f4dc6f9953079075d55daad3910fbd5ad7c2d8a4 Mon Sep 17 00:00:00 2001 From: "matthew.woolf@mailonline.co.uk" Date: Wed, 16 Jan 2019 11:18:45 +0000 Subject: [PATCH 224/253] Fixes as per https://github.com/ua-parser/uap-core/pull/372#discussion_r248151287 Also removed the example UA strings as they are in the tests --- regexes.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 7300ce13..f841fba7 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -331,11 +331,7 @@ user_agent_parsers: family_replacement: 'LINE' # Google Search App on Android, eg: - # Mozilla/5.0 (Linux; Android 8.1.0; TA-1024 Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 - # Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 - # Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181205.006; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 GSA/8.65.5.21.arm64 - - - regex: 'Mozilla.+Android.+(GSA)/(\d+)\.(\d+)\.(\d+).*' + - regex: 'Mozilla.+Android.+(GSA)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Google' # Chrome Mobile From 0a55a2c719bd6730e6517fdb6b10864a8bf2f00d Mon Sep 17 00:00:00 2001 From: Oskar Risberg Date: Mon, 21 Jan 2019 16:59:19 +0100 Subject: [PATCH 225/253] Added Skype for Business detection --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 388034a6..669d5a70 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -596,6 +596,10 @@ user_agent_parsers: - regex: '(ownCloud-android)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Owncloud' + # Skype for Business + - regex: '(OC)/(\d+)\.(\d+)\.(\d+)\.(\d+) \(Skype for Business\)' + family_replacement: 'Skype' + #### END MAIN CASES #### #### SPECIAL CASES #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a20eb0b3..0b4fb717 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7765,3 +7765,10 @@ test_cases: major: '3' minor: '7' patch: '1' + + - user_agent_string: 'OC/15.0.5071.1000 (Skype for Business)' + family: 'Skype' + major: '15' + minor: '0' + patch: '5071' + patch_minor: '1000' From f7bdd27f315505ee7300af1030882b7b53910671 Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Fri, 1 Feb 2019 23:04:17 +1100 Subject: [PATCH 226/253] Adding Datanyze UA and tests --- regexes.yaml | 12 ++++++++++++ tests/test_device.yaml | 5 +++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 23 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 388034a6..11d97846 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -38,6 +38,12 @@ user_agent_parsers: family_replacement: 'WebPageTest.org bot' device_replacement: 'Spider' + # Datanyze.com spider + # Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 + - regex: 'X11; Datanyze; Linux' + family_replacement: 'Datanyze' + device_replacement: 'Spider' + # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' family_replacement: 'NewRelicPingerBot' @@ -1471,6 +1477,12 @@ device_parsers: device_replacement: 'Spider' brand_replacement: 'Spider' + # Datanyze.com spider + # Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 + - regex: 'X11; Datanyze; Linux' + device_replacement: 'Spider' + brand_replacement: 'Spider' + ######### # WebBrowser for SmartWatch # @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en diff --git a/tests/test_device.yaml b/tests/test_device.yaml index cfc925e9..a8783169 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -665,6 +665,11 @@ test_cases: brand: 'Spider' model: + - user_agent_string: 'Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' + family: 'Spider' + brand: 'Spider' + model: + - user_agent_string: 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34' family: 'Spider' brand: 'Spider' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index a20eb0b3..a42b8df6 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1815,6 +1815,12 @@ test_cases: minor: '140508' patch: + - user_agent_string: 'Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' + family: 'Datanyze' + major: + minor: + patch: + - user_agent_string: 'CazoodleBot/CazoodleBot-0.1 (CazoodleBot Crawler; http://www.cazoodle.com/cazoodlebot; cazoodlebot@cazoodle.com)' family: 'CazoodleBot' major: '0' From 090723be0a6460bf982e1cf92331709701616022 Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Fri, 1 Feb 2019 23:19:54 +1100 Subject: [PATCH 227/253] Removing device_replacement from UA parser --- regexes.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 11d97846..72c22072 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -42,7 +42,6 @@ user_agent_parsers: # Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - regex: 'X11; Datanyze; Linux' family_replacement: 'Datanyze' - device_replacement: 'Spider' # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' From f930a7566a4e5208e2e8464eb5fefefed915df6c Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Sat, 2 Feb 2019 16:34:01 +1100 Subject: [PATCH 228/253] Tidying up UA parser and adding test for OS --- regexes.yaml | 5 +---- tests/test_os.yaml | 7 +++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 72c22072..fa9e74a0 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -39,9 +39,7 @@ user_agent_parsers: device_replacement: 'Spider' # Datanyze.com spider - # Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - - regex: 'X11; Datanyze; Linux' - family_replacement: 'Datanyze' + - regex: 'X11; (Datanyze); Linux' # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' @@ -1477,7 +1475,6 @@ device_parsers: brand_replacement: 'Spider' # Datanyze.com spider - # Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - regex: 'X11; Datanyze; Linux' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 687f9a15..f7bb923a 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -427,6 +427,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' + family: 'Linux' + major: + minor: + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0 .1453 Safari/537.36.' family: 'Linux' major: From a61a02ed05eb961b4b696f5c3894f78b91ba2e8f Mon Sep 17 00:00:00 2001 From: Robert Kingston Date: Sat, 2 Feb 2019 17:03:10 +1100 Subject: [PATCH 229/253] Fixing user_agent_parsers replacements --- regexes.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 388034a6..740ce382 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -36,7 +36,6 @@ user_agent_parsers: # PTST / WebPageTest.org crawlers - regex: ' (PTST)/(\d+)\.(\d+)$' family_replacement: 'WebPageTest.org bot' - device_replacement: 'Spider' # New Relic Pinger - regex: '(NewRelicPinger)/(\d+)\.(\d+)' From 735c6e91317c2a903a7c164d1cb79ea79ab1ca70 Mon Sep 17 00:00:00 2001 From: Sergey Polischouck Date: Tue, 15 Jan 2019 12:49:47 +0300 Subject: [PATCH 230/253] add MiuiBrowser and Mint Browser regexes --- regexes.yaml | 8 ++++++++ tests/test_ua.yaml | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index a403ffd1..1d3c2705 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -332,6 +332,14 @@ user_agent_parsers: - regex: '(Line)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'LINE' + # MiuiBrowser should got before Mobile Chrome for Android + - regex: '(MiuiBrowser)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'MiuiBrowser' + + # Mint Browser should got before Mobile Chrome for Android + - regex: '(Mint Browser)/(\d+)\.(\d+)\.(\d+)' + family_replacement: 'Mint Browser' + # Google Search App on Android, eg: - regex: 'Mozilla.+Android.+(GSA)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Google' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cb1bbd9b..e3873147 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6965,6 +6965,18 @@ test_cases: patch: '0' patch_minor: '0' + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 6.0.1; ru-ru; Redmi 4 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.3.6-g' + family: 'MiuiBrowser' + major: '10' + minor: '3' + patch: '6' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 7.1.2; ru-ru; Redmi 4A Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/Mint Browser/1.3.3' + family: 'Mint Browser' + major: '1' + minor: '3' + patch: '3' + - user_agent_string: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen WebAppManager Safari/537.41' family: 'Safari' major: From bb1a20ea89e58614711afe5582ca57f16736d89b Mon Sep 17 00:00:00 2001 From: commenthol Date: Mon, 11 Feb 2019 20:43:13 +0100 Subject: [PATCH 231/253] 0.6.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2c7f7ffd..05de75d4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.4", + "version": "0.6.5", "maintainers": [ { "name": "Tobie Langel", From 14cd47b48749060689b5c362259a2016e785e088 Mon Sep 17 00:00:00 2001 From: Oskar Risberg Date: Tue, 12 Feb 2019 09:44:48 +0100 Subject: [PATCH 232/253] Add Microsoft Office --- regexes.yaml | 3 +++ tests/test_ua.yaml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index 33c21a79..fe50bf71 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -447,6 +447,9 @@ user_agent_parsers: family_replacement: 'Outlook' v1_replacement: '2016' + # Word 2014 + - regex: 'Microsoft Office (Word) 2014' + # Windows Live Mail - regex: 'Outlook-Express\/7\.0.*' family_replacement: 'Windows Live Mail' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index b9abed53..41a5b7e0 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7809,3 +7809,8 @@ test_cases: minor: '65' patch: '5' + - user_agent_string: 'Microsoft Office Word 2014' + family: 'Word' + major: + minor: + patch: From b636b7152d4980fb56cb3712d7ca7026c5eb6090 Mon Sep 17 00:00:00 2001 From: Tim Birkett Date: Thu, 31 Jan 2019 12:17:10 +0000 Subject: [PATCH 233/253] Add Ghost User-Agent String and tests --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 30 +++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index fe50bf71..d0a2685a 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -410,6 +410,10 @@ user_agent_parsers: - regex: '(Whale)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Whale' + # Ghost + # @ref: http://www.ghost.org + - regex: '(Ghost)/(\d+)\.(\d+)\.(\d+)' + #### END SPECIAL CASES TOP #### #### MAIN CASES - this catches > 50% of all browsers #### diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 41a5b7e0..98aac77b 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1801,7 +1801,7 @@ test_cases: family: 'WebPageTest.org bot' major: '1' minor: '0' - patch: + patch: - user_agent_string: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.0 Safari/537.36 PTST/1.0' family: 'WebPageTest.org bot' @@ -7534,7 +7534,7 @@ test_cases: major: '33' minor: '0' patch: '0' - + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D60 Instagram 33.0.0.11.96 (iPhone9,3; iOS 11_2_5; en_AU; en-AU; scale=2.00; gamut=wide; 750x1334)' family: 'Instagram' major: '33' @@ -7546,26 +7546,26 @@ test_cases: major: '4' minor: '2' patch: '2' - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 Flipboard/4.1.9/4323,4.1.9.4323' family: 'Flipboard' major: '4' minor: '1' patch: '9' - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-G930F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 Onefootball/Android/9.10.6' family: 'Onefootball' major: '9' minor: '10' patch: '6' - + - user_agent_string: 'Mozilla/5.0 (Linux; Android 7.0; SM-A520F Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/58.0.3029.83 Mobile Safari/537.36 Flipboard-Briefing/2.7.28' family: 'Flipboard-Briefing' major: '2' minor: '7' patch: '28' - - + + - user_agent_string: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)' family: 'IE' major: '11' @@ -7596,7 +7596,7 @@ test_cases: major: '4' minor: '0' patch: - + - user_agent_string: 'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.2.2 Waterfox/55.2.2' family: 'Waterfox' major: '55' @@ -7751,7 +7751,7 @@ test_cases: family: 'Salesforce' major: '15' minor: '2' - patch: + patch: - user_agent_string: 'YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html' family: 'YahooMailProxy' @@ -7814,3 +7814,15 @@ test_cases: major: minor: patch: + + - user_agent_string: 'Ghost/2.13.1+moya (https://github.com/TryGhost/Ghost)' + family: 'Ghost' + major: '2' + minor: '13' + patch: '1' + + - user_agent_string: 'Ghost/2.10.8 (https://github.com/TryGhost/Ghost)' + family: 'Ghost' + major: '2' + minor: '10' + patch: '8' From 7beb5db17270f4f3a8f69c0c38c6b19c96313456 Mon Sep 17 00:00:00 2001 From: Michal Sankot Date: Mon, 25 Feb 2019 11:52:43 +0100 Subject: [PATCH 234/253] Handling of cases where PTST doesn't have minor version --- regexes.yaml | 4 ++-- tests/test_device.yaml | 5 +++++ tests/test_ua.yaml | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index fe50bf71..c5855402 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -34,7 +34,7 @@ user_agent_parsers: family_replacement: 'PingdomBot' # PTST / WebPageTest.org crawlers - - regex: ' (PTST)/(\d+)\.(\d+)$' + - regex: ' (PTST)/(\d+)(?:\.(\d+)|)$' family_replacement: 'WebPageTest.org bot' # Datanyze.com spider @@ -1488,7 +1488,7 @@ device_parsers: model_replacement: 'Feature Phone' # PTST / WebPageTest.org crawlers - - regex: ' PTST/\d+\.\d+$' + - regex: ' PTST/\d+(?:\.|)\d+$' device_replacement: 'Spider' brand_replacement: 'Spider' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index a8783169..07739d06 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -665,6 +665,11 @@ test_cases: brand: 'Spider' model: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Mobile Safari/537.36 PTST/391' + family: 'Spider' + brand: 'Spider' + model: + - user_agent_string: 'Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' family: 'Spider' brand: 'Spider' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 41a5b7e0..05d3e588 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1815,6 +1815,12 @@ test_cases: minor: '140508' patch: + - user_agent_string: 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4) Build/MPJ24.139-64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Mobile Safari/537.36 PTST/391' + family: 'WebPageTest.org bot' + major: '391' + minor: + patch: + - user_agent_string: 'Mozilla/5.0 (X11; Datanyze; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' family: 'Datanyze' major: From 7e24d05f5f9df2efad7a3633ce4a3ab493c5f8c7 Mon Sep 17 00:00:00 2001 From: Michal Sankot Date: Mon, 25 Feb 2019 16:02:31 +0100 Subject: [PATCH 235/253] device regexp simplification --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index c5855402..c2347933 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -1488,7 +1488,7 @@ device_parsers: model_replacement: 'Feature Phone' # PTST / WebPageTest.org crawlers - - regex: ' PTST/\d+(?:\.|)\d+$' + - regex: ' PTST/\d+(?:\.)?\d+$' device_replacement: 'Spider' brand_replacement: 'Spider' From 8794bab1463c70db0c7b9e9cd60a4060a3258729 Mon Sep 17 00:00:00 2001 From: Raine Makelainen Date: Mon, 4 Mar 2019 15:16:22 +0200 Subject: [PATCH 236/253] Add Sailfish OS and Sailfish Browser (#391) --- regexes.yaml | 6 +++++- tests/test_os.yaml | 7 +++++++ tests/test_ua.yaml | 12 ++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index fe50bf71..40b1d372 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -116,6 +116,10 @@ user_agent_parsers: # must go before Firefox to catch Chimera/SeaMonkey/Camino/Waterfox - regex: '(Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*|)' + # must be before Firefox / Gecko to catch SailfishBrowser properly + - regex: '(SailfishBrowser)/(\d+)\.(\d+)(?:\.(\d+)|)' + family_replacement: 'Sailfish Browser' + # Social Networks # Facebook Messenger must go before Facebook - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' @@ -1443,7 +1447,7 @@ os_parsers: # Generic patterns # since the majority of os cases are very specific, these go last ########## - - regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' + - regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Sailfish|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' # Gentoo Linux + Kernel Version - regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|).*gentoo' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index f7bb923a..bad11b91 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -1015,6 +1015,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'Mozilla/5.0 (Linux; U; Sailfish 3.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0 SailfishBrowser/1.0' + family: 'Sailfish' + major: '3' + minor: '0' + patch: + patch_minor: + # up market model - user_agent_string: 'HbbTV/1.1.1 (;Samsung;SmartTV2013;T-FXPDEUC-1102.2;;) WebKit' family: 'Samsung' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 41a5b7e0..0f8f97a3 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -3984,6 +3984,18 @@ test_cases: minor: '7' patch: + - user_agent_string: 'Mozilla/5.0 (Linux; U; Sailfish 3.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0 SailfishBrowser/1.0' + family: 'Sailfish Browser' + major: '1' + minor: '0' + patch: + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Sailfish 3.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0 SailfishBrowser/1.2.3' + family: 'Sailfish Browser' + major: '1' + minor: '2' + patch: '3' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 5.0.1; SAMSUNG GT-I9506-ORANGE Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36' family: 'Samsung Internet' major: '2' From 56206d1bbe3babd5dcbe5cfafb922fc2e3fbd7e2 Mon Sep 17 00:00:00 2001 From: Kevin Johnson Date: Tue, 5 Mar 2019 10:52:40 -0500 Subject: [PATCH 237/253] Fixes case where Palo Alto identifies with multiple versions of Windows. --- regexes.yaml | 8 ++++---- tests/test_os.yaml | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index fe50bf71..ce180fbf 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -964,6 +964,10 @@ os_parsers: - regex: '(Windows ?Mobile)' os_replacement: 'Windows Mobile' + - regex: '(Windows 10)' + os_replacement: 'Windows' + os_v1_replacement: '10' + - regex: '(Windows (?:NT 5\.2|NT 5\.1))' os_replacement: 'Windows' os_v1_replacement: 'XP' @@ -1006,10 +1010,6 @@ os_parsers: os_replacement: 'Windows' os_v1_replacement: '10' - - regex: '(Windows 10)' - os_replacement: 'Windows' - os_v1_replacement: '10' - - regex: '(Windows NT 5\.0)' os_replacement: 'Windows' os_v1_replacement: '2000' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index f7bb923a..61727a09 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -798,6 +798,13 @@ test_cases: patch: patch_minor: + - user_agent_string: 'PAN GlobalProtect/5.0.0-87 (Microsoft Windows 10 Pro , 64-bit) Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko' + family: 'Windows' + major: '10' + minor: + patch: + patch_minor: + - user_agent_string: 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' family: 'Windows' major: '8' From b4a50d040ad03b163b675d468d7ee011e9ad5436 Mon Sep 17 00:00:00 2001 From: commenthol Date: Sat, 9 Mar 2019 06:45:05 +0100 Subject: [PATCH 238/253] 0.6.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 05de75d4..76d3c30a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.5", + "version": "0.6.6", "maintainers": [ { "name": "Tobie Langel", From 71ec72cd37a940683cd40af3f7ab738ecbdcc45b Mon Sep 17 00:00:00 2001 From: commenthol Date: Tue, 19 Mar 2019 05:56:45 +0100 Subject: [PATCH 239/253] 0.6.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76d3c30a..55957f73 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.6", + "version": "0.6.7", "maintainers": [ { "name": "Tobie Langel", From a8fa97d0d07b5ea9353ce9428a12d10523355d74 Mon Sep 17 00:00:00 2001 From: Jess Date: Sun, 24 Mar 2019 12:56:58 -0700 Subject: [PATCH 240/253] Added backers and sponsors on the README --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 18f78a25..00cce4cc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -uap-core [![Build Status](https://secure.travis-ci.org/ua-parser/uap-core.svg?branch=master)](https://travis-ci.org/ua-parser/uap-core) +uap-core [![Build Status](https://secure.travis-ci.org/ua-parser/uap-core.svg?branch=master)](https://travis-ci.org/ua-parser/uap-core) [![Backers on Open Collective](https://opencollective.com/ua-parser/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/ua-parser/sponsors/badge.svg)](#sponsors) ======== This repository contains the core of [BrowserScope][2]'s original [user agent string parser][3]: data collected over the years by [Steve Souders][4] and numerous other contributors, extracted into a separate [YAML file][5] so as to be reusable _as is_ by implementations in any programming language. @@ -23,6 +23,28 @@ Contributing Changes to regexes.yaml Please read the [contributors' guide](CONTRIBUTING.md) +## Credits +### Contributors + +This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. + + + +### Backers + +Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/ua-parser#backer)] + + + + +### Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/ua-parser#sponsor)] + + + + + License ------- From 18733a716ab3ea312846045ec755bede59f00fce Mon Sep 17 00:00:00 2001 From: Ikuo Matsumura Date: Tue, 9 Apr 2019 16:29:00 +0900 Subject: [PATCH 241/253] Add Sumsung SC-01F --- regexes.yaml | 4 ++++ tests/test_device.yaml | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index d719bb68..ee11343e 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3803,6 +3803,10 @@ device_parsers: device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' + - regex: '; *((?:SC)\-[A-Za-z0-9 ]+)(/?[^ ]*|)\)' + device_replacement: 'Samsung $1' + brand_replacement: 'Samsung' + model_replacement: '$1' - regex: ' ((?:SCH)\-[A-Za-z0-9 ]+)(/?[^ ]*|) Build' device_replacement: 'Samsung $1' brand_replacement: 'Samsung' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 07739d06..4fa96ff7 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -80010,6 +80010,11 @@ test_cases: brand: 'RCA' model: 'G1' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.4.2; SC-01F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.105 Mobile Safari/537.36' + family: 'Samsung SC-01F' + brand: 'Samsung' + model: 'SC-01F' + - user_agent_string: 'WhatsApp/2.17.70 W' family: 'Spider' brand: 'Spider' From 0dd610af75a4eadd3e019640661af75a213d2447 Mon Sep 17 00:00:00 2001 From: Iurii Skorniakov Date: Tue, 16 Apr 2019 14:10:51 +0300 Subject: [PATCH 242/253] New browser versions remove OS build info from user agent https://www.chromestatus.com/feature/4558585463832576 --- regexes.yaml | 14 ++++++------ tests/test_device.yaml | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ee11343e..49839f8d 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -5244,27 +5244,27 @@ device_parsers: ######### # Android General Device Matching (far from perfect) ######### - - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build[/ ]' + - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[A-Za-z]{0,2}\- *; *(.+?)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' # No build info at all - "Build" follows locale immediately - - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};?( Build[/ ]|\))' device_replacement: 'Generic Smartphone' brand_replacement: 'Generic' model_replacement: 'Smartphone' - - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *\-?[A-Za-z]{2}; *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); *\-?[A-Za-z]{2}; *(.+?)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' - - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|)(?:;.*|); *(.+?) Build[/ ]' + - regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|)(?:;.*|); *(.+?)( Build[/ ]|\))' brand_replacement: 'Generic_Android' model_replacement: '$1' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 4fa96ff7..6aaae031 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -11470,6 +11470,56 @@ test_cases: brand: 'Generic_Android' model: 'S300' + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.1-update1; Ar-kw; EQ U8110) AppleWebKit/530.17 (KHTML, Like Gecko) Version/4.0 Mobile Safari/530.17' + family: 'EQ U8110' + brand: 'Generic_Android' + model: 'EQ U8110' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.1-update1; Cs-cz; Zt180) AppleWebKit/530.17 (KHTML, Like Gecko) Version/4.0 Mobile Safari/530.17' + family: 'Zt180' + brand: 'Generic_Android' + model: 'Zt180' + + - user_agent_string: 'Mozilla 5.0 (Linux; U; Android 2.2.1; zh-cn; 3GC101) UC AppleWebKit 534.31 (KHTML, like Gecko) Mobile Safari 534.31' + family: '3GC101' + brand: 'Generic_Android' + model: '3GC101' + + - user_agent_string: 'Mozilla 5.0 (Linux; U; Android 2.3.1; zh-cn; Newpad-K97) UC AppleWebKit 534.31 (KHTML, like Gecko) Mobile Safari 534.31' + family: 'Newpad-K97' + brand: 'Generic_Android' + model: 'Newpad-K97' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.0.3; -; PP4MT-7) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' + family: 'PP4MT-7' + brand: 'Generic_Android' + model: 'PP4MT-7' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 4.0.3; -; PP4MT-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' + family: 'PP4MT-9' + brand: 'Generic_Android' + model: 'PP4MT-9' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.2.1; id; AD350) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 UCBrowser/8.7.0.315 Ponsel' + family: 'AD350' + brand: 'Generic_Android' + model: 'AD350' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 2.2.1; -us; Ally) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' + family: 'Ally' + brand: 'Generic_Android' + model: 'Ally' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 2.3.4; A9100) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31 OPR/14.0.1074.57768' + family: 'A9100' + brand: 'Generic_Android' + model: 'A9100' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 2.3.3; S300) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22 OPR/14.0.1025.53005' + family: 'S300' + brand: 'Generic_Android' + model: 'S300' + - user_agent_string: 'Mozilla/5.0 (DTV) NetFront/3.4 InettvBrowser/2.2 (08001F;DTV03VSFC;0002;0001)' family: 'Inettv' brand: 'Generic_Inettv' From 918b555603a7d051b13ef98710ba974e6687a885 Mon Sep 17 00:00:00 2001 From: alexrez Date: Mon, 22 Apr 2019 22:22:53 -0700 Subject: [PATCH 243/253] added Edge with Chromium UA and test --- regexes.yaml | 4 ++++ tests/test_ua.yaml | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ee11343e..26d93dc9 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -487,6 +487,10 @@ user_agent_parsers: # Edge/major_version.minor_version - regex: '(Edge)/(\d+)(?:\.(\d+)|)' + # Edge with chromium Edg/major_version.minor_version + - regex: '(Edg)/(\d+)(?:\.(\d+)|)' + family_replacement: 'Edge' + # Brave Browser https://brave.com/ - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome' family_replacement: 'Brave' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cbadd892..dfcd7223 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7844,3 +7844,8 @@ test_cases: major: '2' minor: '10' patch: '8' + + - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3763.0 Safari/537.36 Edg/75.0.131.0' + family: 'Edge' + major: '75' + minor: '0' \ No newline at end of file From 3b43bd6dea760106399de83f6b7725aac5052ec4 Mon Sep 17 00:00:00 2001 From: alexrez Date: Mon, 22 Apr 2019 22:28:05 -0700 Subject: [PATCH 244/253] fix test --- tests/test_ua.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index dfcd7223..eee71bb2 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7848,4 +7848,5 @@ test_cases: - user_agent_string: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3763.0 Safari/537.36 Edg/75.0.131.0' family: 'Edge' major: '75' - minor: '0' \ No newline at end of file + minor: '0' + patch: \ No newline at end of file From eb95ca51f176a053ed63fa6bce0bbc5627dbb0a5 Mon Sep 17 00:00:00 2001 From: josealvarezmuguerza Date: Wed, 24 Apr 2019 22:29:05 -0300 Subject: [PATCH 245/253] support Apple Watch devices --- regexes.yaml | 12 ++++++++++++ tests/test_device.yaml | 15 +++++++++++++++ tests/test_os.yaml | 21 +++++++++++++++++++++ tests/test_ua.yaml | 12 ++++++++++++ 4 files changed, 60 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ee11343e..a228c5b1 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -669,6 +669,8 @@ user_agent_parsers: family_replacement: 'Mobile Safari' - regex: '(iPod|iPhone|iPad)' family_replacement: 'Mobile Safari UI/WKWebView' + - regex: '(Watch)(\d+),(\d+)' + family_replacement: 'Apple $1 App' ########################## # Outlook on iOS >= 2.62.0 @@ -1300,6 +1302,12 @@ os_parsers: os_replacement: 'iOS' - regex: '\((iOS);' + ########## + # Apple Watch + ########## + - regex: '(watchOS)/(\d+)\.(\d+)(?:\.(\d+)|)' + os_replacement: 'WatchOS' + ########################## # Outlook on iOS >= 2.62.0 ########################## @@ -4853,6 +4861,10 @@ device_parsers: device_replacement: '$1' brand_replacement: 'Apple' model_replacement: '$1' + - regex: '(Watch)(\d+,\d+)' + device_replacement: 'Apple $1' + brand_replacement: 'Apple' + model_replacement: 'Apple $1 $2' - regex: '(Apple Watch)(?:;| Simulator;)' device_replacement: '$1' brand_replacement: 'Apple' diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 4fa96ff7..c6971983 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -1,5 +1,20 @@ test_cases: + - user_agent_string: 'atc/1.0 watchOS/5.1.3 model/Watch3,4 hwp/t8004 build/16S535 (6; dt:156)' + family: 'Apple Watch' + brand: 'Apple' + model: 'Apple Watch 3,4' + + - user_agent_string: 'atc/1.0 watchOS/5.2 model/Watch4,4 hwp/t8006 build/16T225 (6; dt:193)' + family: 'Apple Watch' + brand: 'Apple' + model: 'Apple Watch 4,4' + + - user_agent_string: '(null)/(null) watchOS/5.1.1 model/Watch3,3 hwp/t8004 build/16R600 (6; dt:155)' + family: 'Apple Watch' + brand: 'Apple' + model: 'Apple Watch 3,3' + - user_agent_string: 'ALCATEL-OT510A/382 ObigoInternetBrowser/Q05A' family: 'Alcatel OT510A' brand: 'Alcatel' diff --git a/tests/test_os.yaml b/tests/test_os.yaml index 9d217945..047737e4 100644 --- a/tests/test_os.yaml +++ b/tests/test_os.yaml @@ -1,5 +1,26 @@ test_cases: + - user_agent_string: 'atc/1.0 watchOS/5.1.3 model/Watch3,4 hwp/t8004 build/16S535 (6; dt:156)' + family: 'WatchOS' + major: '5' + minor: '1' + patch: '3' + patch_minor: + + - user_agent_string: 'atc/1.0 watchOS/5.2 model/Watch4,4 hwp/t8006 build/16T225 (6; dt:193)' + family: 'WatchOS' + major: '5' + minor: '2' + patch: + patch_minor: + + - user_agent_string: '(null)/(null) watchOS/5.1.1 model/Watch3,3 hwp/t8004 build/16R600 (6; dt:155)' + family: 'WatchOS' + major: '5' + minor: '1' + patch: '1' + patch_minor: + - user_agent_string: 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true' family: 'Android' major: diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cbadd892..704ed68b 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -1,4 +1,16 @@ test_cases: + + - user_agent_string: 'atc/1.0 watchOS/5.1.3 model/Watch3,4 hwp/t8004 build/16S535 (6; dt:156)' + family: 'Apple Watch App' + major: '3' + minor: '4' + patch: + + - user_agent_string: 'atc/1.0 watchOS/5.2 model/Watch4,4 hwp/t8006 build/16T225 (6; dt:193)' + family: 'Apple Watch App' + major: '4' + minor: '4' + patch: - user_agent_string: 'Mozilla/5.0 (Windows; U; en-US) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.5.1' family: 'AdobeAIR' From f3bf550306fd2f9ca2f457a192f035e1920e4485 Mon Sep 17 00:00:00 2001 From: penghui Date: Fri, 26 Apr 2019 17:21:02 +0800 Subject: [PATCH 246/253] Add regex for Xiaomi MIX, MIX 2 and MIX 2S. http://www.fynas.com/ua/search?d=&b=MIUI%E6%B5%8F%E8%A7%88%E5%99%A8&k=MIX&page=1 --- regexes.yaml | 8 ++++++++ tests/test_device.yaml | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index ee11343e..fc0f802f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -4395,6 +4395,14 @@ device_parsers: device_replacement: 'XiaoMi $1' brand_replacement: 'XiaoMi' model_replacement: '$1' + - regex: '; *(MIX) (Build|MIUI)/' + device_replacement: 'XiaoMi $1' + brand_replacement: 'XiaoMi' + model_replacement: '$1' + - regex: '; *((MIX) ([^;/]*)) (Build|MIUI)/' + device_replacement: 'XiaoMi $1' + brand_replacement: 'XiaoMi' + model_replacement: '$1' ######### # Xolo diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 4fa96ff7..1d65ffed 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -77450,6 +77450,21 @@ test_cases: brand: 'XiaoMi' model: 'Redmi Note 2' + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; MIX Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.1.1' + family: 'XiaoMi MIX' + brand: 'XiaoMi' + model: 'MIX' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 9; MIX 2S Build/PKQ1.180729.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.7.3' + family: 'XiaoMi MIX 2S' + brand: 'XiaoMi' + model: 'MIX 2S' + + - user_agent_string: 'Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; MIX 2 Build/OPR1.170623.027) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.1.1' + family: 'XiaoMi MIX 2' + brand: 'XiaoMi' + model: 'MIX 2' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 4.1.1; XOLO A1000 Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' family: 'Xolo A1000' brand: 'Xolo' From 54b4ea0099a93dc13021a0594c849a3895da511e Mon Sep 17 00:00:00 2001 From: alexrez Date: Wed, 8 May 2019 13:58:20 -0700 Subject: [PATCH 247/253] adding patch and minor patch to edge. instead of adding a regex for edge with crome modifued the existing one --- regexes.yaml | 6 ++---- tests/test_ua.yaml | 3 ++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index 26d93dc9..4fa79104 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -485,10 +485,8 @@ user_agent_parsers: - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)' # Edge/major_version.minor_version - - regex: '(Edge)/(\d+)(?:\.(\d+)|)' - - # Edge with chromium Edg/major_version.minor_version - - regex: '(Edg)/(\d+)(?:\.(\d+)|)' + # Edge with chromium Edg/major_version.minor_version.patch.minor_patch + - regex: '(Edge?)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' family_replacement: 'Edge' # Brave Browser https://brave.com/ diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index eee71bb2..7397e01d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7849,4 +7849,5 @@ test_cases: family: 'Edge' major: '75' minor: '0' - patch: \ No newline at end of file + patch: '131' + patch_minor: '0' \ No newline at end of file From 4fb72efb78960e1acd96bc9ec85056c03c1a5f77 Mon Sep 17 00:00:00 2001 From: alexrez Date: Wed, 8 May 2019 14:08:38 -0700 Subject: [PATCH 248/253] fixing tests --- regexes.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regexes.yaml b/regexes.yaml index 4fa79104..5eb078c4 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -486,7 +486,7 @@ user_agent_parsers: # Edge/major_version.minor_version # Edge with chromium Edg/major_version.minor_version.patch.minor_patch - - regex: '(Edge?)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' + - regex: '(Edge?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)' family_replacement: 'Edge' # Brave Browser https://brave.com/ From 9b156fe1e1c2f9489092a709bc70dbf084eea705 Mon Sep 17 00:00:00 2001 From: alexrez Date: Wed, 8 May 2019 15:16:52 -0700 Subject: [PATCH 249/253] formatting --- tests/test_ua.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index 7397e01d..a5ff5a9d 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -7850,4 +7850,4 @@ test_cases: major: '75' minor: '0' patch: '131' - patch_minor: '0' \ No newline at end of file + patch_minor: '0' From 5e100c3bd9f49a4dfe974a5b0710863cc3181766 Mon Sep 17 00:00:00 2001 From: penghui Date: Tue, 14 May 2019 18:28:17 +0800 Subject: [PATCH 250/253] Add regex for chrome browser in Samsung Android phones. native browser in Samsung device is always ok. Mozilla/5.0 (Linux; Android 8.0.0; SAMSUNG SM-G9500 Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.3 Chrome/67.0.3396.87 Mobile Safari/537.36 But chrome browser was parsed to Generic SmartPhone, here's the UA: Mozilla/5.0 (Linux; Android 8.0.0; SM-G9500) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36 --- regexes.yaml | 4 ++++ tests/test_device.yaml | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/regexes.yaml b/regexes.yaml index fc0f802f..f76d1c3f 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -3815,6 +3815,10 @@ device_parsers: device_replacement: 'Samsung $1' brand_replacement: 'Samsung' model_replacement: '$1' + - regex: '; *((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9]{5})[\)]' + device_replacement: 'Samsung $1' + brand_replacement: 'Samsung' + model_replacement: '$1' ######### # Sharp diff --git a/tests/test_device.yaml b/tests/test_device.yaml index 1d65ffed..5dc08117 100644 --- a/tests/test_device.yaml +++ b/tests/test_device.yaml @@ -58070,6 +58070,16 @@ test_cases: brand: 'Samsung' model: 'GT-S8600-ORANGE' + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G9500) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36' + family: 'Samsung SM-G9500' + brand: 'Samsung' + model: 'SM-G9500' + + - user_agent_string: 'Mozilla/5.0 (Linux; Android 8.0.0; SAMSUNG SM-G9500 Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.3 Chrome/67.0.3396.87 Mobile Safari/537.36' + family: 'Samsung SM-G9500' + brand: 'Samsung' + model: 'SM-G9500' + - user_agent_string: 'UCWEB/2.0 (Symbian; U; S60 V5; Pt-BR; SamsungI8910) U2/1.0.0 UCBrowser/8.9.0.277 U2/1.0.0 Mobile' family: 'Samsung I8910' brand: 'Samsung' From 4bf90b6b531f625c4440a66494d4738a8afbd7d8 Mon Sep 17 00:00:00 2001 From: James Hartig Date: Thu, 15 Nov 2018 12:08:29 -0500 Subject: [PATCH 251/253] Moved Facebook rules before "Bot general matcher" We noticed UAs from Orange that contained OrangeBotswana that were caught by the bot filter. --- regexes.yaml | 25 ++++++++++++++----------- tests/test_ua.yaml | 7 +++++++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/regexes.yaml b/regexes.yaml index ee11343e..455071d3 100644 --- a/regexes.yaml +++ b/regexes.yaml @@ -101,6 +101,18 @@ user_agent_parsers: # must come before "Bots General matcher" to catch "boto"/"boto3" before "bot" - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?))|s3fs)/(\d+)\.(\d+)(?:\.(\d+)|)' + # Facebook + # Must come before "Bots General matcher" to catch OrangeBotswana + # Facebook Messenger must go before Facebook + - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' + family_replacement: 'Facebook Messenger' + # Facebook + - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' + family_replacement: 'Facebook' + # Sometimes Facebook does not specify a version (FBAV) + - regex: '\[FB.*;' + family_replacement: 'Facebook' + # Bots General matcher 'name/0.0' - regex: '(?:\/[A-Za-z0-9\.]+|) {0,5}([A-Za-z0-9 \-_\!\[\]:]{0,50}(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]{0,50}))[/ ](\d+)(?:\.(\d+)(?:\.(\d+)|)|)' # Bots containing bot(but not CUBOT) @@ -120,16 +132,7 @@ user_agent_parsers: - regex: '(SailfishBrowser)/(\d+)\.(\d+)(?:\.(\d+)|)' family_replacement: 'Sailfish Browser' - # Social Networks - # Facebook Messenger must go before Facebook - - regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)' - family_replacement: 'Facebook Messenger' - # Facebook - - regex: '\[FB.*;(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' - family_replacement: 'Facebook' - # Sometimes Facebook does not specify a version (FBAV) - - regex: '\[FB.*;' - family_replacement: 'Facebook' + # Social Networks (non-Facebook) # Pinterest - regex: '\[(Pinterest)/[^\]]+\]' - regex: '(Pinterest)(?: for Android(?: Tablet|)|)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)' @@ -339,7 +342,7 @@ user_agent_parsers: # MiuiBrowser should got before Mobile Chrome for Android - regex: '(MiuiBrowser)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'MiuiBrowser' - + # Mint Browser should got before Mobile Chrome for Android - regex: '(Mint Browser)/(\d+)\.(\d+)\.(\d+)' family_replacement: 'Mint Browser' diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cbadd892..8a2a4937 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -6608,6 +6608,13 @@ test_cases: patch: '0' patch_minor: '14' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 [FBAN/FBIOS;FBAV/194.0.0.38.99;FBBV/127868476;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iOS;FBSV/11.4.1;FBSS/2;FBCR/OrangeBotswana;FBID/phone;FBLC/en_GB;FBOP/5;FBRV/128807018]' + family: 'Facebook' + major: '194' + minor: '0' + patch: '0' + patch_minor: '38' + - user_agent_string: 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B350 [Pinterest/iOS]' family: 'Pinterest' major: From 856da9d0effa969a877f9da930124fb5ed323cc3 Mon Sep 17 00:00:00 2001 From: Alexander Clouter Date: Sat, 8 Jun 2019 00:41:15 +0100 Subject: [PATCH 252/253] remove prepended 'User agent:' from User-Agent in test_ua.yaml --- tests/test_ua.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ua.yaml b/tests/test_ua.yaml index cbadd892..3516d74f 100644 --- a/tests/test_ua.yaml +++ b/tests/test_ua.yaml @@ -756,7 +756,7 @@ test_cases: minor: '53' patch: - - user_agent_string: 'User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36 OPR/15.0.1147.18 (Edition Next)' + - user_agent_string: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36 OPR/15.0.1147.18 (Edition Next)' family: 'Opera' major: '15' minor: '0' From 05c84268374886f27a1650f97809955b50cba77c Mon Sep 17 00:00:00 2001 From: commenthol Date: Mon, 10 Jun 2019 09:16:22 +0200 Subject: [PATCH 253/253] 0.6.8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55957f73..28f706f5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uap-core", "description": "The regex file necessary to build language ports of Browserscope's user agent parser.", - "version": "0.6.7", + "version": "0.6.8", "maintainers": [ { "name": "Tobie Langel",