diff --git a/bower.json b/bower.json index 378efdc..5cec8ff 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "express-useragent", "description": "Fast User-Agent exposing", - "version": "1.0.9", + "version": "1.0.11", "homepage": "https://github.com/biggora/express-useragent/", "repository": { "type": "git", diff --git a/lib/express-useragent.js b/lib/express-useragent.js index bdf0dd4..716a90b 100644 --- a/lib/express-useragent.js +++ b/lib/express-useragent.js @@ -1,5 +1,5 @@ /*! - * express-useragent.js v1.0.10 (https://github.com/biggora/express-useragent/) + * express-useragent.js v1.0.11 (https://github.com/biggora/express-useragent/) * Copyright 2011-2018 Alexey Gordeyev * Licensed under MIT (https://github.com/biggora/express-useragent/blob/master/README.md#license) */ @@ -87,7 +87,7 @@ var IS_BOT_REGEXP = new RegExp('^.*(' + BOTS.join('|') + ').*$'); var UserAgent = function () { - this.version = '1.0.10'; + this.version = '1.0.11'; this._Versions = { Edge: /(?:edge|edga|edgios)\/([\d\w\.\-]+)/i, Firefox: /(?:firefox|fxios)\/([\d\w\.\-]+)/i, @@ -105,6 +105,7 @@ Epiphany: /epiphany\/([\d\w\.\-]+)/i, WinJs: /msapphost\/([\d\w\.\-]+)/i, PhantomJS: /phantomjs\/([\d\w\.\-]+)/i, + AlamoFire: /alamofire\/([\d\w\.\-]+)/i, UC: /ucbrowser\/([\d\w\.]+)/i, Facebook: /FBAV\/([\d\w\.]+)/i }; @@ -126,6 +127,7 @@ Firefox: /firefox|fxios/i, WinJs: /msapphost/i, PhantomJS: /phantomjs/i, + AlamoFire: /alamofire/i, UC: /UCBrowser/i, Facebook: /FBA[NV]/ }; @@ -164,6 +166,7 @@ PSP: /playstation portable/i, iPad: /\(iPad.*os (\d+)[._](\d+)/i, iPhone: /\(iPhone.*os (\d+)[._](\d+)/i, + iOS: /ios/i, Bada: /Bada\/(\d+)\.(\d+)/i, Curl: /curl\/(\d+)\.(\d+)\.(\d+)/i }; @@ -180,7 +183,8 @@ Android: /android/i, Blackberry: /blackberry/i, Samsung: /samsung/i, - Curl: /curl/i + Curl: /curl/i, + iOS: /^ios\-/i }; this.DefaultAgent = { @@ -226,6 +230,7 @@ isSmartTV: false, isUC : false, isFacebook : false, + isAlamoFire: false, silkAccelerated: false, browser: 'unknown', version: 'unknown', @@ -239,6 +244,9 @@ this.getBrowser = function (string) { switch (true) { + case this._Browsers.AlamoFire.test(string): + this.Agent.isAlamoFire = true; + return 'AlamoFire'; case this._Browsers.Edge.test(string): this.Agent.isEdge = true; return 'Edge'; @@ -512,6 +520,9 @@ case this._OS.Curl.test(string): this.Agent.isCurl = true; return 'Curl'; + case this._OS.iOS.test(string): + this.Agent.isiPhone = true; + return 'iOS'; default: return 'unknown'; } @@ -552,6 +563,8 @@ case this._Platform.Samsung.test(string): this.Agent.isiSamsung = true; return 'Samsung'; + case this._Platform.iOS.test(string): + return 'Apple iOS'; default: return 'unknown'; } @@ -685,7 +698,7 @@ break; default: } - if (/mobile/i.test(ua.Agent.source)) { + if (/mobile|^ios\-/i.test(ua.Agent.source)) { ua.Agent.isMobile = true; ua.Agent.isDesktop = false; } diff --git a/lib/express-useragent.min.js b/lib/express-useragent.min.js index 44dff30..d345a60 100644 --- a/lib/express-useragent.min.js +++ b/lib/express-useragent.min.js @@ -1,6 +1,6 @@ /*! - * express-useragent.js v1.0.10 (https://github.com/biggora/express-useragent/) + * express-useragent.js v1.0.11 (https://github.com/biggora/express-useragent/) * Copyright 2011-2018 Alexey Gordeyev * Licensed under MIT (https://github.com/biggora/express-useragent/blob/master/README.md#license) */ -!function(a){"use strict";var b=["\\+https:\\/\\/developers.google.com\\/\\+\\/web\\/snippet\\/","ad\\smonitoring","adsbot","apex","applebot","archive.org_bot","baiduspider","bingbot","cloudflare","cloudinary","crawler","curl","discordbot","duckduckbot","embedly","exabot","facebookexternalhit","facebot","flipboard","google","googlebot","gsa-crawler","gurujibot","guzzlehttp","heritrix","ia_archiver","insights","linkedinbot","ltx71","mediapartners","msnbot","odklbot","phantom\\.js","phantomjs","pingdom","pinterest","python","rtlnieuws","skypeuripreview","slackbot","slurp","spbot","telegrambot","test\\scertificate","testing","tiabot","tumblr ","twitterbot","vkshare","web\\sscraper","wget","yandexbot","apex","applebot","duckduckbot","facebot","flipboard","gsa-crawler","ia_archiver","pinterest","skypeuripreview","odklbot","archive.org_bot","ltx71","guzzlehttp","vkshare","discordbot","whatsapp","orangebot","smtbot","qwantify","mj12bot","ahrefsbot","ltx71","seznambot","panscient.com"],c=new RegExp("^.*("+b.join("|")+").*$"),d=function(){return this.version="1.0.10",this._Versions={Edge:/(?:edge|edga|edgios)\/([\d\w\.\-]+)/i,Firefox:/(?:firefox|fxios)\/([\d\w\.\-]+)/i,IE:/msie\s([\d\.]+[\d])|trident\/\d+\.\d+;.*[rv:]+(\d+\.\d)/i,Chrome:/(?:chrome|crios)\/([\d\w\.\-]+)/i,Chromium:/chromium\/([\d\w\.\-]+)/i,Safari:/version\/([\d\w\.\-]+)/i,Opera:/version\/([\d\w\.\-]+)|OPR\/([\d\w\.\-]+)/i,Ps3:/([\d\w\.\-]+)\)\s*$/i,Psp:/([\d\w\.\-]+)\)?\s*$/i,Amaya:/amaya\/([\d\w\.\-]+)/i,SeaMonkey:/seamonkey\/([\d\w\.\-]+)/i,OmniWeb:/omniweb\/v([\d\w\.\-]+)/i,Flock:/flock\/([\d\w\.\-]+)/i,Epiphany:/epiphany\/([\d\w\.\-]+)/i,WinJs:/msapphost\/([\d\w\.\-]+)/i,PhantomJS:/phantomjs\/([\d\w\.\-]+)/i,UC:/ucbrowser\/([\d\w\.]+)/i,Facebook:/FBAV\/([\d\w\.]+)/i},this._Browsers={Edge:/edge|edga|edgios/i,Amaya:/amaya/i,Konqueror:/konqueror/i,Epiphany:/epiphany/i,SeaMonkey:/seamonkey/i,Flock:/flock/i,OmniWeb:/omniweb/i,Chromium:/chromium/i,Chrome:/chrome|crios/i,Safari:/safari/i,IE:/msie|trident/i,Opera:/opera|OPR\//i,PS3:/playstation 3/i,PSP:/playstation portable/i,Firefox:/firefox|fxios/i,WinJs:/msapphost/i,PhantomJS:/phantomjs/i,UC:/UCBrowser/i,Facebook:/FBA[NV]/},this._OS={Windows10:/windows nt 10\.0/i,Windows81:/windows nt 6\.3/i,Windows8:/windows nt 6\.2/i,Windows7:/windows nt 6\.1/i,UnknownWindows:/windows nt 6\.\d+/i,WindowsVista:/windows nt 6\.0/i,Windows2003:/windows nt 5\.2/i,WindowsXP:/windows nt 5\.1/i,Windows2000:/windows nt 5\.0/i,WindowsPhone81:/windows phone 8\.1/i,WindowsPhone80:/windows phone 8\.0/i,OSXCheetah:/os x 10[._]0/i,OSXPuma:/os x 10[._]1(\D|$)/i,OSXJaguar:/os x 10[._]2/i,OSXPanther:/os x 10[._]3/i,OSXTiger:/os x 10[._]4/i,OSXLeopard:/os x 10[._]5/i,OSXSnowLeopard:/os x 10[._]6/i,OSXLion:/os x 10[._]7/i,OSXMountainLion:/os x 10[._]8/i,OSXMavericks:/os x 10[._]9/i,OSXYosemite:/os x 10[._]10/i,OSXElCapitan:/os x 10[._]11/i,MacOSSierra:/os x 10[._]12/i,MacOSHighSierra:/os x 10[._]13/i,Mac:/os x/i,Linux:/linux/i,Linux64:/linux x86\_64/i,ChromeOS:/cros/i,Wii:/wii/i,PS3:/playstation 3/i,PSP:/playstation portable/i,iPad:/\(iPad.*os (\d+)[._](\d+)/i,iPhone:/\(iPhone.*os (\d+)[._](\d+)/i,Bada:/Bada\/(\d+)\.(\d+)/i,Curl:/curl\/(\d+)\.(\d+)\.(\d+)/i},this._Platform={Windows:/windows nt/i,WindowsPhone:/windows phone/i,Mac:/macintosh/i,Linux:/linux/i,Wii:/wii/i,Playstation:/playstation/i,iPad:/ipad/i,iPod:/ipod/i,iPhone:/iphone/i,Android:/android/i,Blackberry:/blackberry/i,Samsung:/samsung/i,Curl:/curl/i},this.DefaultAgent={isAuthoritative:!0,isMobile:!1,isTablet:!1,isiPad:!1,isiPod:!1,isiPhone:!1,isAndroid:!1,isBlackberry:!1,isOpera:!1,isIE:!1,isEdge:!1,isIECompatibilityMode:!1,isSafari:!1,isFirefox:!1,isWebkit:!1,isChrome:!1,isKonqueror:!1,isOmniWeb:!1,isSeaMonkey:!1,isFlock:!1,isAmaya:!1,isPhantomJS:!1,isEpiphany:!1,isDesktop:!1,isWindows:!1,isLinux:!1,isLinux64:!1,isMac:!1,isChromeOS:!1,isBada:!1,isSamsung:!1,isRaspberry:!1,isBot:!1,isCurl:!1,isAndroidTablet:!1,isWinJs:!1,isKindleFire:!1,isSilk:!1,isCaptive:!1,isSmartTV:!1,isUC:!1,isFacebook:!1,silkAccelerated:!1,browser:"unknown",version:"unknown",os:"unknown",platform:"unknown",geoIp:{},source:""},this.Agent={},this.getBrowser=function(a){switch(!0){case this._Browsers.Edge.test(a):return this.Agent.isEdge=!0,"Edge";case this._Browsers.PhantomJS.test(a):return this.Agent.isPhantomJS=!0,"PhantomJS";case this._Browsers.Konqueror.test(a):return this.Agent.isKonqueror=!0,"Konqueror";case this._Browsers.Amaya.test(a):return this.Agent.isAmaya=!0,"Amaya";case this._Browsers.Epiphany.test(a):return this.Agent.isEpiphany=!0,"Epiphany";case this._Browsers.SeaMonkey.test(a):return this.Agent.isSeaMonkey=!0,"SeaMonkey";case this._Browsers.Flock.test(a):return this.Agent.isFlock=!0,"Flock";case this._Browsers.OmniWeb.test(a):return this.Agent.isOmniWeb=!0,"OmniWeb";case this._Browsers.Opera.test(a):return this.Agent.isOpera=!0,"Opera";case this._Browsers.Chromium.test(a):return this.Agent.isChrome=!0,"Chromium";case this._Browsers.Facebook.test(a):return this.Agent.isFacebook=!0,"Facebook";case this._Browsers.Chrome.test(a):return this.Agent.isChrome=!0,"Chrome";case this._Browsers.WinJs.test(a):return this.Agent.isWinJs=!0,"WinJs";case this._Browsers.IE.test(a):return this.Agent.isIE=!0,"IE";case this._Browsers.Firefox.test(a):return this.Agent.isFirefox=!0,"Firefox";case this._Browsers.Safari.test(a):return this.Agent.isSafari=!0,"Safari";case this._Browsers.PS3.test(a):return"ps3";case this._Browsers.PSP.test(a):return"psp";case this._Browsers.UC.test(a):return this.Agent.isUC=!0,"UCBrowser";default:return 0!==a.indexOf("Mozilla")&&/^([\d\w\-\.]+)\/[\d\w\.\-]+/i.test(a)?(this.Agent.isAuthoritative=!1,RegExp.$1):"unknown"}},this.getBrowserVersion=function(a){var b;switch(this.Agent.browser){case"Edge":if(this._Versions.Edge.test(a))return RegExp.$1;break;case"PhantomJS":if(this._Versions.PhantomJS.test(a))return RegExp.$1;break;case"Chrome":if(this._Versions.Chrome.test(a))return RegExp.$1;break;case"Chromium":if(this._Versions.Chromium.test(a))return RegExp.$1;break;case"Safari":if(this._Versions.Safari.test(a))return RegExp.$1;break;case"Opera":if(this._Versions.Opera.test(a))return RegExp.$1?RegExp.$1:RegExp.$2;break;case"Firefox":if(this._Versions.Firefox.test(a))return RegExp.$1;break;case"WinJs":if(this._Versions.WinJs.test(a))return RegExp.$1;break;case"IE":if(this._Versions.IE.test(a))return RegExp.$2?RegExp.$2:RegExp.$1;break;case"ps3":if(this._Versions.Ps3.test(a))return RegExp.$1;break;case"psp":if(this._Versions.Psp.test(a))return RegExp.$1;break;case"Amaya":if(this._Versions.Amaya.test(a))return RegExp.$1;break;case"Epiphany":if(this._Versions.Epiphany.test(a))return RegExp.$1;break;case"SeaMonkey":if(this._Versions.SeaMonkey.test(a))return RegExp.$1;break;case"Flock":if(this._Versions.Flock.test(a))return RegExp.$1;break;case"OmniWeb":if(this._Versions.OmniWeb.test(a))return RegExp.$1;break;case"UCBrowser":if(this._Versions.UC.test(a))return RegExp.$1;break;case"Facebook":if(this._Versions.Facebook.test(a))return RegExp.$1;break;default:if("unknown"!==this.Agent.browser&&(b=new RegExp(this.Agent.browser+"[\\/ ]([\\d\\w\\.\\-]+)","i"),b.test(a)))return RegExp.$1}},this.getOS=function(a){switch(!0){case this._OS.WindowsVista.test(a):return this.Agent.isWindows=!0,"Windows Vista";case this._OS.Windows7.test(a):return this.Agent.isWindows=!0,"Windows 7";case this._OS.Windows8.test(a):return this.Agent.isWindows=!0,"Windows 8";case this._OS.Windows81.test(a):return this.Agent.isWindows=!0,"Windows 8.1";case this._OS.Windows10.test(a):return this.Agent.isWindows=!0,"Windows 10.0";case this._OS.Windows2003.test(a):return this.Agent.isWindows=!0,"Windows 2003";case this._OS.WindowsXP.test(a):return this.Agent.isWindows=!0,"Windows XP";case this._OS.Windows2000.test(a):return this.Agent.isWindows=!0,"Windows 2000";case this._OS.WindowsPhone81.test(a):return this.Agent.isWindowsPhone=!0,"Windows Phone 8.1";case this._OS.WindowsPhone80.test(a):return this.Agent.isWindowsPhone=!0,"Windows Phone 8.0";case this._OS.Linux64.test(a):return this.Agent.isLinux=!0,this.Agent.isLinux64=!0,"Linux 64";case this._OS.Linux.test(a):return this.Agent.isLinux=!0,"Linux";case this._OS.ChromeOS.test(a):return this.Agent.isChromeOS=!0,"Chrome OS";case this._OS.Wii.test(a):return"Wii";case this._OS.PS3.test(a):return"Playstation";case this._OS.PSP.test(a):return"Playstation";case this._OS.OSXCheetah.test(a):return this.Agent.isMac=!0,"OS X Cheetah";case this._OS.OSXPuma.test(a):return this.Agent.isMac=!0,"OS X Puma";case this._OS.OSXJaguar.test(a):return this.Agent.isMac=!0,"OS X Jaguar";case this._OS.OSXPanther.test(a):return this.Agent.isMac=!0,"OS X Panther";case this._OS.OSXTiger.test(a):return this.Agent.isMac=!0,"OS X Tiger";case this._OS.OSXLeopard.test(a):return this.Agent.isMac=!0,"OS X Leopard";case this._OS.OSXSnowLeopard.test(a):return this.Agent.isMac=!0,"OS X Snow Leopard";case this._OS.OSXLion.test(a):return this.Agent.isMac=!0,"OS X Lion";case this._OS.OSXMountainLion.test(a):return this.Agent.isMac=!0,"OS X Mountain Lion";case this._OS.OSXMavericks.test(a):return this.Agent.isMac=!0,"OS X Mavericks";case this._OS.OSXYosemite.test(a):return this.Agent.isMac=!0,"OS X Yosemite";case this._OS.OSXElCapitan.test(a):return this.Agent.isMac=!0,"OS X El Capitan";case this._OS.MacOSSierra.test(a):return this.Agent.isMac=!0,"macOS Sierra";case this._OS.MacOSHighSierra.test(a):return this.Agent.isMac=!0,"macOS High Sierra";case this._OS.Mac.test(a):return this.Agent.isMac=!0,"OS X";case this._OS.iPad.test(a):return this.Agent.isiPad=!0,a.match(this._OS.iPad)[0].replace("_",".");case this._OS.iPhone.test(a):return this.Agent.isiPhone=!0,a.match(this._OS.iPhone)[0].replace("_",".");case this._OS.Bada.test(a):return this.Agent.isBada=!0,"Bada";case this._OS.Curl.test(a):return this.Agent.isCurl=!0,"Curl";default:return"unknown"}},this.getPlatform=function(a){switch(!0){case this._Platform.Windows.test(a):return"Microsoft Windows";case this._Platform.WindowsPhone.test(a):return this.Agent.isWindowsPhone=!0,"Microsoft Windows Phone";case this._Platform.Mac.test(a):return"Apple Mac";case this._Platform.Curl.test(a):return"Curl";case this._Platform.Android.test(a):return this.Agent.isAndroid=!0,"Android";case this._Platform.Blackberry.test(a):return this.Agent.isBlackberry=!0,"Blackberry";case this._Platform.Linux.test(a):return"Linux";case this._Platform.Wii.test(a):return"Wii";case this._Platform.Playstation.test(a):return"Playstation";case this._Platform.iPad.test(a):return this.Agent.isiPad=!0,"iPad";case this._Platform.iPod.test(a):return this.Agent.isiPod=!0,"iPod";case this._Platform.iPhone.test(a):return this.Agent.isiPhone=!0,"iPhone";case this._Platform.Samsung.test(a):return this.Agent.isiSamsung=!0,"Samsung";default:return"unknown"}},this.testCompatibilityMode=function(){var a=this;if(this.Agent.isIE&&/Trident\/(\d)\.0/i.test(a.Agent.source)){var b=parseInt(RegExp.$1,10),c=parseInt(a.Agent.version,10);7===c&&7===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=11),7===c&&6===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=10),7===c&&5===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=9),7===c&&4===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=8)}},this.testSilk=function(){var a=this;switch(!0){case new RegExp("silk","gi").test(a.Agent.source):this.Agent.isSilk=!0}return/Silk-Accelerated=true/gi.test(a.Agent.source)&&(this.Agent.SilkAccelerated=!0),!!this.Agent.isSilk&&"Silk"},this.testKindleFire=function(){var a=this;switch(!0){case/KFOT/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire";case/KFTT/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD";case/KFJWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 8.9";case/KFJWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 8.9 4G";case/KFSOWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 7";case/KFTHWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 7";case/KFTHWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 7 4G";case/KFAPWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 8.9";case/KFAPWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 8.9 4G";default:return!1}},this.testCaptiveNetwork=function(){var a=this;switch(!0){case/CaptiveNetwork/gi.test(a.Agent.source):return a.Agent.isCaptive=!0,a.Agent.isMac=!0,a.Agent.platform="Apple Mac","CaptiveNetwork";default:return!1}},this.reset=function(){var a=this;for(var b in a.DefaultAgent)a.Agent[b]=a.DefaultAgent[b];return a},this.testMobile=function(){var a=this;switch(!0){case a.Agent.isWindows:case a.Agent.isLinux:case a.Agent.isMac:case a.Agent.isChromeOS:a.Agent.isDesktop=!0;break;case a.Agent.isAndroid:case a.Agent.isSamsung:a.Agent.isMobile=!0}switch(!0){case a.Agent.isiPad:case a.Agent.isiPod:case a.Agent.isiPhone:case a.Agent.isBada:case a.Agent.isBlackberry:case a.Agent.isAndroid:case a.Agent.isWindowsPhone:a.Agent.isMobile=!0,a.Agent.isDesktop=!1}/mobile/i.test(a.Agent.source)&&(a.Agent.isMobile=!0,a.Agent.isDesktop=!1)},this.testTablet=function(){var a=this;switch(!0){case a.Agent.isiPad:case a.Agent.isAndroidTablet:case a.Agent.isKindleFire:a.Agent.isTablet=!0}/tablet/i.test(a.Agent.source)&&(a.Agent.isTablet=!0)},this.testNginxGeoIP=function(a){var b=this;Object.keys(a).forEach(function(c){/^GEOIP/i.test(c)&&(b.Agent.geoIp[c]=a[c])})},this.testBot=function(){var a=this,b=c.exec(a.Agent.source.toLowerCase());b?a.Agent.isBot=b[1]:a.Agent.isAuthoritative||(a.Agent.isBot=/bot/i.test(a.Agent.source))},this.testSmartTV=function(){var a=this,b=new RegExp("smart-tv|smarttv|googletv|appletv|hbbtv|pov_tv|netcast.tv","gi").exec(a.Agent.source.toLowerCase());b&&(a.Agent.isSmartTV=b[1])},this.testAndroidTablet=function(){var a=this;a.Agent.isAndroid&&!/mobile/i.test(a.Agent.source)&&(a.Agent.isAndroidTablet=!0)},this.parse=function(a){var b=new d;return b.Agent.source=a.replace(/^\s*/,"").replace(/\s*$/,""),b.Agent.os=b.getOS(b.Agent.source),b.Agent.platform=b.getPlatform(b.Agent.source),b.Agent.browser=b.getBrowser(b.Agent.source),b.Agent.version=b.getBrowserVersion(b.Agent.source),b.testBot(),b.testSmartTV(),b.testMobile(),b.testAndroidTablet(),b.testTablet(),b.testCompatibilityMode(),b.testSilk(),b.testKindleFire(),b.testCaptiveNetwork(),b.Agent},this.Agent=this.DefaultAgent,this};return a.UserAgent=d,new d}(this); \ No newline at end of file +!function(a){"use strict";var b=["\\+https:\\/\\/developers.google.com\\/\\+\\/web\\/snippet\\/","ad\\smonitoring","adsbot","apex","applebot","archive.org_bot","baiduspider","bingbot","cloudflare","cloudinary","crawler","curl","discordbot","duckduckbot","embedly","exabot","facebookexternalhit","facebot","flipboard","google","googlebot","gsa-crawler","gurujibot","guzzlehttp","heritrix","ia_archiver","insights","linkedinbot","ltx71","mediapartners","msnbot","odklbot","phantom\\.js","phantomjs","pingdom","pinterest","python","rtlnieuws","skypeuripreview","slackbot","slurp","spbot","telegrambot","test\\scertificate","testing","tiabot","tumblr ","twitterbot","vkshare","web\\sscraper","wget","yandexbot","apex","applebot","duckduckbot","facebot","flipboard","gsa-crawler","ia_archiver","pinterest","skypeuripreview","odklbot","archive.org_bot","ltx71","guzzlehttp","vkshare","discordbot","whatsapp","orangebot","smtbot","qwantify","mj12bot","ahrefsbot","ltx71","seznambot","panscient.com"],c=new RegExp("^.*("+b.join("|")+").*$"),d=function(){return this.version="1.0.10",this._Versions={Edge:/(?:edge|edga|edgios)\/([\d\w\.\-]+)/i,Firefox:/(?:firefox|fxios)\/([\d\w\.\-]+)/i,IE:/msie\s([\d\.]+[\d])|trident\/\d+\.\d+;.*[rv:]+(\d+\.\d)/i,Chrome:/(?:chrome|crios)\/([\d\w\.\-]+)/i,Chromium:/chromium\/([\d\w\.\-]+)/i,Safari:/version\/([\d\w\.\-]+)/i,Opera:/version\/([\d\w\.\-]+)|OPR\/([\d\w\.\-]+)/i,Ps3:/([\d\w\.\-]+)\)\s*$/i,Psp:/([\d\w\.\-]+)\)?\s*$/i,Amaya:/amaya\/([\d\w\.\-]+)/i,SeaMonkey:/seamonkey\/([\d\w\.\-]+)/i,OmniWeb:/omniweb\/v([\d\w\.\-]+)/i,Flock:/flock\/([\d\w\.\-]+)/i,Epiphany:/epiphany\/([\d\w\.\-]+)/i,WinJs:/msapphost\/([\d\w\.\-]+)/i,PhantomJS:/phantomjs\/([\d\w\.\-]+)/i,AlamoFire:/alamofire\/([\d\w\.\-]+)/i,UC:/ucbrowser\/([\d\w\.]+)/i,Facebook:/FBAV\/([\d\w\.]+)/i},this._Browsers={Edge:/edge|edga|edgios/i,Amaya:/amaya/i,Konqueror:/konqueror/i,Epiphany:/epiphany/i,SeaMonkey:/seamonkey/i,Flock:/flock/i,OmniWeb:/omniweb/i,Chromium:/chromium/i,Chrome:/chrome|crios/i,Safari:/safari/i,IE:/msie|trident/i,Opera:/opera|OPR\//i,PS3:/playstation 3/i,PSP:/playstation portable/i,Firefox:/firefox|fxios/i,WinJs:/msapphost/i,PhantomJS:/phantomjs/i,AlamoFire:/alamofire/i,UC:/UCBrowser/i,Facebook:/FBA[NV]/},this._OS={Windows10:/windows nt 10\.0/i,Windows81:/windows nt 6\.3/i,Windows8:/windows nt 6\.2/i,Windows7:/windows nt 6\.1/i,UnknownWindows:/windows nt 6\.\d+/i,WindowsVista:/windows nt 6\.0/i,Windows2003:/windows nt 5\.2/i,WindowsXP:/windows nt 5\.1/i,Windows2000:/windows nt 5\.0/i,WindowsPhone81:/windows phone 8\.1/i,WindowsPhone80:/windows phone 8\.0/i,OSXCheetah:/os x 10[._]0/i,OSXPuma:/os x 10[._]1(\D|$)/i,OSXJaguar:/os x 10[._]2/i,OSXPanther:/os x 10[._]3/i,OSXTiger:/os x 10[._]4/i,OSXLeopard:/os x 10[._]5/i,OSXSnowLeopard:/os x 10[._]6/i,OSXLion:/os x 10[._]7/i,OSXMountainLion:/os x 10[._]8/i,OSXMavericks:/os x 10[._]9/i,OSXYosemite:/os x 10[._]10/i,OSXElCapitan:/os x 10[._]11/i,MacOSSierra:/os x 10[._]12/i,MacOSHighSierra:/os x 10[._]13/i,Mac:/os x/i,Linux:/linux/i,Linux64:/linux x86\_64/i,ChromeOS:/cros/i,Wii:/wii/i,PS3:/playstation 3/i,PSP:/playstation portable/i,iPad:/\(iPad.*os (\d+)[._](\d+)/i,iPhone:/\(iPhone.*os (\d+)[._](\d+)/i,iOS:/ios/i,Bada:/Bada\/(\d+)\.(\d+)/i,Curl:/curl\/(\d+)\.(\d+)\.(\d+)/i},this._Platform={Windows:/windows nt/i,WindowsPhone:/windows phone/i,Mac:/macintosh/i,Linux:/linux/i,Wii:/wii/i,Playstation:/playstation/i,iPad:/ipad/i,iPod:/ipod/i,iPhone:/iphone/i,Android:/android/i,Blackberry:/blackberry/i,Samsung:/samsung/i,Curl:/curl/i,iOS:/^ios\-/i},this.DefaultAgent={isAuthoritative:!0,isMobile:!1,isTablet:!1,isiPad:!1,isiPod:!1,isiPhone:!1,isAndroid:!1,isBlackberry:!1,isOpera:!1,isIE:!1,isEdge:!1,isIECompatibilityMode:!1,isSafari:!1,isFirefox:!1,isWebkit:!1,isChrome:!1,isKonqueror:!1,isOmniWeb:!1,isSeaMonkey:!1,isFlock:!1,isAmaya:!1,isPhantomJS:!1,isEpiphany:!1,isDesktop:!1,isWindows:!1,isLinux:!1,isLinux64:!1,isMac:!1,isChromeOS:!1,isBada:!1,isSamsung:!1,isRaspberry:!1,isBot:!1,isCurl:!1,isAndroidTablet:!1,isWinJs:!1,isKindleFire:!1,isSilk:!1,isCaptive:!1,isSmartTV:!1,isUC:!1,isFacebook:!1,isAlamoFire:!1,silkAccelerated:!1,browser:"unknown",version:"unknown",os:"unknown",platform:"unknown",geoIp:{},source:""},this.Agent={},this.getBrowser=function(a){switch(!0){case this._Browsers.AlamoFire.test(a):return this.Agent.isAlamoFire=!0,"AlamoFire";case this._Browsers.Edge.test(a):return this.Agent.isEdge=!0,"Edge";case this._Browsers.PhantomJS.test(a):return this.Agent.isPhantomJS=!0,"PhantomJS";case this._Browsers.Konqueror.test(a):return this.Agent.isKonqueror=!0,"Konqueror";case this._Browsers.Amaya.test(a):return this.Agent.isAmaya=!0,"Amaya";case this._Browsers.Epiphany.test(a):return this.Agent.isEpiphany=!0,"Epiphany";case this._Browsers.SeaMonkey.test(a):return this.Agent.isSeaMonkey=!0,"SeaMonkey";case this._Browsers.Flock.test(a):return this.Agent.isFlock=!0,"Flock";case this._Browsers.OmniWeb.test(a):return this.Agent.isOmniWeb=!0,"OmniWeb";case this._Browsers.Opera.test(a):return this.Agent.isOpera=!0,"Opera";case this._Browsers.Chromium.test(a):return this.Agent.isChrome=!0,"Chromium";case this._Browsers.Facebook.test(a):return this.Agent.isFacebook=!0,"Facebook";case this._Browsers.Chrome.test(a):return this.Agent.isChrome=!0,"Chrome";case this._Browsers.WinJs.test(a):return this.Agent.isWinJs=!0,"WinJs";case this._Browsers.IE.test(a):return this.Agent.isIE=!0,"IE";case this._Browsers.Firefox.test(a):return this.Agent.isFirefox=!0,"Firefox";case this._Browsers.Safari.test(a):return this.Agent.isSafari=!0,"Safari";case this._Browsers.PS3.test(a):return"ps3";case this._Browsers.PSP.test(a):return"psp";case this._Browsers.UC.test(a):return this.Agent.isUC=!0,"UCBrowser";default:return 0!==a.indexOf("Mozilla")&&/^([\d\w\-\.]+)\/[\d\w\.\-]+/i.test(a)?(this.Agent.isAuthoritative=!1,RegExp.$1):"unknown"}},this.getBrowserVersion=function(a){var b;switch(this.Agent.browser){case"Edge":if(this._Versions.Edge.test(a))return RegExp.$1;break;case"PhantomJS":if(this._Versions.PhantomJS.test(a))return RegExp.$1;break;case"Chrome":if(this._Versions.Chrome.test(a))return RegExp.$1;break;case"Chromium":if(this._Versions.Chromium.test(a))return RegExp.$1;break;case"Safari":if(this._Versions.Safari.test(a))return RegExp.$1;break;case"Opera":if(this._Versions.Opera.test(a))return RegExp.$1?RegExp.$1:RegExp.$2;break;case"Firefox":if(this._Versions.Firefox.test(a))return RegExp.$1;break;case"WinJs":if(this._Versions.WinJs.test(a))return RegExp.$1;break;case"IE":if(this._Versions.IE.test(a))return RegExp.$2?RegExp.$2:RegExp.$1;break;case"ps3":if(this._Versions.Ps3.test(a))return RegExp.$1;break;case"psp":if(this._Versions.Psp.test(a))return RegExp.$1;break;case"Amaya":if(this._Versions.Amaya.test(a))return RegExp.$1;break;case"Epiphany":if(this._Versions.Epiphany.test(a))return RegExp.$1;break;case"SeaMonkey":if(this._Versions.SeaMonkey.test(a))return RegExp.$1;break;case"Flock":if(this._Versions.Flock.test(a))return RegExp.$1;break;case"OmniWeb":if(this._Versions.OmniWeb.test(a))return RegExp.$1;break;case"UCBrowser":if(this._Versions.UC.test(a))return RegExp.$1;break;case"Facebook":if(this._Versions.Facebook.test(a))return RegExp.$1;break;default:if("unknown"!==this.Agent.browser&&(b=new RegExp(this.Agent.browser+"[\\/ ]([\\d\\w\\.\\-]+)","i"),b.test(a)))return RegExp.$1}},this.getOS=function(a){switch(!0){case this._OS.WindowsVista.test(a):return this.Agent.isWindows=!0,"Windows Vista";case this._OS.Windows7.test(a):return this.Agent.isWindows=!0,"Windows 7";case this._OS.Windows8.test(a):return this.Agent.isWindows=!0,"Windows 8";case this._OS.Windows81.test(a):return this.Agent.isWindows=!0,"Windows 8.1";case this._OS.Windows10.test(a):return this.Agent.isWindows=!0,"Windows 10.0";case this._OS.Windows2003.test(a):return this.Agent.isWindows=!0,"Windows 2003";case this._OS.WindowsXP.test(a):return this.Agent.isWindows=!0,"Windows XP";case this._OS.Windows2000.test(a):return this.Agent.isWindows=!0,"Windows 2000";case this._OS.WindowsPhone81.test(a):return this.Agent.isWindowsPhone=!0,"Windows Phone 8.1";case this._OS.WindowsPhone80.test(a):return this.Agent.isWindowsPhone=!0,"Windows Phone 8.0";case this._OS.Linux64.test(a):return this.Agent.isLinux=!0,this.Agent.isLinux64=!0,"Linux 64";case this._OS.Linux.test(a):return this.Agent.isLinux=!0,"Linux";case this._OS.ChromeOS.test(a):return this.Agent.isChromeOS=!0,"Chrome OS";case this._OS.Wii.test(a):return"Wii";case this._OS.PS3.test(a):return"Playstation";case this._OS.PSP.test(a):return"Playstation";case this._OS.OSXCheetah.test(a):return this.Agent.isMac=!0,"OS X Cheetah";case this._OS.OSXPuma.test(a):return this.Agent.isMac=!0,"OS X Puma";case this._OS.OSXJaguar.test(a):return this.Agent.isMac=!0,"OS X Jaguar";case this._OS.OSXPanther.test(a):return this.Agent.isMac=!0,"OS X Panther";case this._OS.OSXTiger.test(a):return this.Agent.isMac=!0,"OS X Tiger";case this._OS.OSXLeopard.test(a):return this.Agent.isMac=!0,"OS X Leopard";case this._OS.OSXSnowLeopard.test(a):return this.Agent.isMac=!0,"OS X Snow Leopard";case this._OS.OSXLion.test(a):return this.Agent.isMac=!0,"OS X Lion";case this._OS.OSXMountainLion.test(a):return this.Agent.isMac=!0,"OS X Mountain Lion";case this._OS.OSXMavericks.test(a):return this.Agent.isMac=!0,"OS X Mavericks";case this._OS.OSXYosemite.test(a):return this.Agent.isMac=!0,"OS X Yosemite";case this._OS.OSXElCapitan.test(a):return this.Agent.isMac=!0,"OS X El Capitan";case this._OS.MacOSSierra.test(a):return this.Agent.isMac=!0,"macOS Sierra";case this._OS.MacOSHighSierra.test(a):return this.Agent.isMac=!0,"macOS High Sierra";case this._OS.Mac.test(a):return this.Agent.isMac=!0,"OS X";case this._OS.iPad.test(a):return this.Agent.isiPad=!0,a.match(this._OS.iPad)[0].replace("_",".");case this._OS.iPhone.test(a):return this.Agent.isiPhone=!0,a.match(this._OS.iPhone)[0].replace("_",".");case this._OS.Bada.test(a):return this.Agent.isBada=!0,"Bada";case this._OS.Curl.test(a):return this.Agent.isCurl=!0,"Curl";case this._OS.iOS.test(a):return this.Agent.isiPhone=!0,"iOS";default:return"unknown"}},this.getPlatform=function(a){switch(!0){case this._Platform.Windows.test(a):return"Microsoft Windows";case this._Platform.WindowsPhone.test(a):return this.Agent.isWindowsPhone=!0,"Microsoft Windows Phone";case this._Platform.Mac.test(a):return"Apple Mac";case this._Platform.Curl.test(a):return"Curl";case this._Platform.Android.test(a):return this.Agent.isAndroid=!0,"Android";case this._Platform.Blackberry.test(a):return this.Agent.isBlackberry=!0,"Blackberry";case this._Platform.Linux.test(a):return"Linux";case this._Platform.Wii.test(a):return"Wii";case this._Platform.Playstation.test(a):return"Playstation";case this._Platform.iPad.test(a):return this.Agent.isiPad=!0,"iPad";case this._Platform.iPod.test(a):return this.Agent.isiPod=!0,"iPod";case this._Platform.iPhone.test(a):return this.Agent.isiPhone=!0,"iPhone";case this._Platform.Samsung.test(a):return this.Agent.isiSamsung=!0,"Samsung";case this._Platform.iOS.test(a):return"Apple iOS";default:return"unknown"}},this.testCompatibilityMode=function(){var a=this;if(this.Agent.isIE&&/Trident\/(\d)\.0/i.test(a.Agent.source)){var b=parseInt(RegExp.$1,10),c=parseInt(a.Agent.version,10);7===c&&7===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=11),7===c&&6===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=10),7===c&&5===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=9),7===c&&4===b&&(a.Agent.isIECompatibilityMode=!0,a.Agent.version=8)}},this.testSilk=function(){var a=this;switch(!0){case new RegExp("silk","gi").test(a.Agent.source):this.Agent.isSilk=!0}return/Silk-Accelerated=true/gi.test(a.Agent.source)&&(this.Agent.SilkAccelerated=!0),!!this.Agent.isSilk&&"Silk"},this.testKindleFire=function(){var a=this;switch(!0){case/KFOT/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire";case/KFTT/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD";case/KFJWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 8.9";case/KFJWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 8.9 4G";case/KFSOWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HD 7";case/KFTHWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 7";case/KFTHWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 7 4G";case/KFAPWI/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 8.9";case/KFAPWA/gi.test(a.Agent.source):return this.Agent.isKindleFire=!0,"Kindle Fire HDX 8.9 4G";default:return!1}},this.testCaptiveNetwork=function(){var a=this;switch(!0){case/CaptiveNetwork/gi.test(a.Agent.source):return a.Agent.isCaptive=!0,a.Agent.isMac=!0,a.Agent.platform="Apple Mac","CaptiveNetwork";default:return!1}},this.reset=function(){var a=this;for(var b in a.DefaultAgent)a.Agent[b]=a.DefaultAgent[b];return a},this.testMobile=function(){var a=this;switch(!0){case a.Agent.isWindows:case a.Agent.isLinux:case a.Agent.isMac:case a.Agent.isChromeOS:a.Agent.isDesktop=!0;break;case a.Agent.isAndroid:case a.Agent.isSamsung:a.Agent.isMobile=!0}switch(!0){case a.Agent.isiPad:case a.Agent.isiPod:case a.Agent.isiPhone:case a.Agent.isBada:case a.Agent.isBlackberry:case a.Agent.isAndroid:case a.Agent.isWindowsPhone:a.Agent.isMobile=!0,a.Agent.isDesktop=!1}/mobile|^ios\-/i.test(a.Agent.source)&&(a.Agent.isMobile=!0,a.Agent.isDesktop=!1)},this.testTablet=function(){var a=this;switch(!0){case a.Agent.isiPad:case a.Agent.isAndroidTablet:case a.Agent.isKindleFire:a.Agent.isTablet=!0}/tablet/i.test(a.Agent.source)&&(a.Agent.isTablet=!0)},this.testNginxGeoIP=function(a){var b=this;Object.keys(a).forEach(function(c){/^GEOIP/i.test(c)&&(b.Agent.geoIp[c]=a[c])})},this.testBot=function(){var a=this,b=c.exec(a.Agent.source.toLowerCase());b?a.Agent.isBot=b[1]:a.Agent.isAuthoritative||(a.Agent.isBot=/bot/i.test(a.Agent.source))},this.testSmartTV=function(){var a=this,b=new RegExp("smart-tv|smarttv|googletv|appletv|hbbtv|pov_tv|netcast.tv","gi").exec(a.Agent.source.toLowerCase());b&&(a.Agent.isSmartTV=b[1])},this.testAndroidTablet=function(){var a=this;a.Agent.isAndroid&&!/mobile/i.test(a.Agent.source)&&(a.Agent.isAndroidTablet=!0)},this.parse=function(a){var b=new d;return b.Agent.source=a.replace(/^\s*/,"").replace(/\s*$/,""),b.Agent.os=b.getOS(b.Agent.source),b.Agent.platform=b.getPlatform(b.Agent.source),b.Agent.browser=b.getBrowser(b.Agent.source),b.Agent.version=b.getBrowserVersion(b.Agent.source),b.testBot(),b.testSmartTV(),b.testMobile(),b.testAndroidTablet(),b.testTablet(),b.testCompatibilityMode(),b.testSilk(),b.testKindleFire(),b.testCaptiveNetwork(),b.Agent},this.Agent=this.DefaultAgent,this};return a.UserAgent=d,new d}(this); \ No newline at end of file diff --git a/package.json b/package.json index ed4514f..9869ee9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "express-useragent", "description": "ExpressJS/Connect/TrinteJS user-agent middleware exposing", - "version": "1.0.10", + "version": "1.0.11", "homepage": "https://github.com/biggora/express-useragent/", "repository": { "type": "git", @@ -54,7 +54,7 @@ ], "main": "./index.js", "scripts": { - "test": "nodeunit test/browsers.js test/bots_test.js", + "test": "nodeunit test/browsers.js test/ios.js test/android_phone.js test/android_tablet.js test/bots_test.js", "express": "node test/express.js", "http": "node test/http.js", "build": "grunt build", diff --git a/test/android_phone.js b/test/android_phone.js index 4a983bc..b95fcfe 100644 --- a/test/android_phone.js +++ b/test/android_phone.js @@ -44,11 +44,79 @@ exports['Andriod Phone'] = function (test) { test.ok(!userAgent.isBot, 'Bot'); test.ok(!userAgent.isAndroidTablet, 'AndroidTablet'); - test.equal(userAgent.Browser, 'Safari'); - test.equal(userAgent.OS, 'Linux'); - test.equal(userAgent.Platform, 'Android'); - test.equal(0, Object.keys(userAgent.GeoIP).length); - test.equal(userAgent.Version, '4.0'); + test.equal(userAgent.browser, 'Safari'); + test.equal(userAgent.os, 'Linux'); + test.equal(userAgent.platform, 'Android'); + test.equal(userAgent.version, '4.0'); test.done(); }; + +// Source: +// http://www.gtrifonov.com/2011/04/15/google-android-user-agent-strings-2/ + +exports['Android Samsung'] = function (test) { + + var s = 'Mozilla/5.0 (Linux; U; Android 2.2; en-ca; SGH-T959D Build/FROYO) AppleWebKit/533.1' + + ' (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'; + + var a = ua.parse(s); + + test.ok(a.isAuthoritative, 'Authoritative'); + test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(!a.isiPhone, 'iPhone'); + test.ok(a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(!a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(a.isLinux, 'Linux'); + test.ok(!a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.equal(a.version, '4.0'); + + test.done(); +}; + +// Source: +// Chrome UA Spoofer + +exports['Android Xoom'] = function (test) { + + var s = 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13' + + ' (KHTML, like Gecko) Version/4.0 Safari/534.13'; + + var a = ua.parse(s); + + test.ok(a.isAuthoritative, 'Authoritative'); + test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(!a.isiPhone, 'iPhone'); + test.ok(a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(!a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(a.isLinux, 'Linux'); + test.ok(!a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.ok(!a.isFacebook, 'Facebook'); + test.equal(a.version, '4.0'); + + test.done(); +}; \ No newline at end of file diff --git a/test/android_tablet.js b/test/android_tablet.js index 82faa5c..f83c3b5 100644 --- a/test/android_tablet.js +++ b/test/android_tablet.js @@ -44,11 +44,10 @@ exports['Andriod Tablet'] = function (test) { test.ok(!userAgent.isBot, 'Bot'); test.ok(userAgent.isAndroidTablet, 'AndroidTablet'); - test.equal(userAgent.Browser, 'Safari'); - test.equal(userAgent.OS, 'Linux'); - test.equal(userAgent.Platform, 'Android'); - test.equal(0, Object.keys(userAgent.GeoIP).length); - test.equal(userAgent.Version, '4.0'); + test.equal(userAgent.browser, 'Safari'); + test.equal(userAgent.os, 'Linux'); + test.equal(userAgent.platform, 'Android'); + test.equal(userAgent.version, '4.0'); test.done(); }; diff --git a/test/browsers.js b/test/browsers.js index 09219f2..38d4941 100644 --- a/test/browsers.js +++ b/test/browsers.js @@ -4,37 +4,7 @@ var ua = require('../'); -exports['iPad 2'] = function (test) { - - var s = 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46' - + ' (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3'; - - var a = ua.parse(s); - - test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); - test.ok(a.isiPad, 'iPad'); - test.ok(!a.isiPod, 'iPod'); - test.ok(!a.isiPhone, 'iPhone'); - test.ok(!a.isAndroid, 'Android'); - test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(a.isSafari, 'Safari'); - test.ok(!a.isFirefox, 'Firefox'); - test.ok(!a.isWebkit, 'Webkit'); - test.ok(!a.isChrome, 'Chrome'); - test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); - test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '5.1'); - - test.done(); -}; - +/** Linux **/ exports['Linux Iceweasel'] = function (test) { var s = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16)' @@ -222,6 +192,7 @@ exports['Linux Ephiphany 2.30'] = function (test) { test.done(); }; +/** Win **/ exports['Windows 8 Chrome 28'] = function (test) { var s = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36'; @@ -561,14 +532,12 @@ exports['Windows Phone 8.1'] = function (test) { test.done(); }; -exports['OS X OmniWeb 622'] = function (test) { +exports['Windows 7 IE 10.6'] = function (test) { - var s = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16' - + '(KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941'; + var s = 'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0'; var a = ua.parse(s); - test.ok(a.isAuthoritative, 'Authoritative'); test.ok(!a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); @@ -576,27 +545,25 @@ exports['OS X OmniWeb 622'] = function (test) { test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); + test.ok(a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); - test.ok(a.isOmniWeb, 'OmniWeb'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); + test.ok(a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); + test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '622.8.0.112941'); + test.equal(a.version, '10.6'); test.done(); }; -exports['OS X Safari 530'] = function (test) { +exports['Windows 7 IE 11.0'] = function (test) { - var s = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)' - + ' AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19'; + var s = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'; var a = ua.parse(s); @@ -608,229 +575,115 @@ exports['OS X Safari 530'] = function (test) { test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(a.isSafari, 'Safari'); + test.ok(a.isIE, 'IE'); + test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); - test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '4.0.2'); - - test.done(); -}; - -exports['OS X Chromium'] = function (test) { - - var s = 'Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/32.0.1700.20 Mobile/11B554a Safari/9537.53'; - - var a = ua.parse(s); - - test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); - test.ok(a.isiPad, 'iPad'); - test.ok(!a.isiPod, 'iPod'); - test.ok(!a.isiPhone, 'iPhone'); - test.ok(!a.isAndroid, 'Android'); - test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(!a.isSafari, 'Safari'); - test.ok(!a.isFirefox, 'Firefox'); - test.ok(!a.isWebkit, 'Webkit'); - test.ok(a.isChrome, 'Chromium'); - test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); + test.ok(a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); - test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '32.0.1700.20'); - test.ok(!a.isIECompatibilityMode); - - test.done(); -}; - -// Source: -// https://www.handsetdetection.com/properties/devices/Google/Pixel - -exports['Google Pixel'] = function (test) { - - var s = 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR6.170623.011) AppleWebKit/537.36' - + ' (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36'; - - var a = ua.parse(s); - - test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); - test.ok(!a.isiPad, 'iPad'); - test.ok(!a.isiPod, 'iPod'); - test.ok(!a.isiPhone, 'iPhone'); - test.ok(a.isAndroid, 'Android'); - test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(!a.isSafari, 'Safari'); - test.ok(!a.isFirefox, 'Firefox'); - test.ok(!a.isWebkit, 'Webkit'); - test.ok(a.isChrome, 'Chrome'); - test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '60.0.3112.116'); + test.equal(a.version, '11.0'); test.done(); }; -// Source: -// http://www.gtrifonov.com/2011/04/15/google-android-user-agent-strings-2/ - -exports['Android Samsung'] = function (test) { - - var s = 'Mozilla/5.0 (Linux; U; Android 2.2; en-ca; SGH-T959D Build/FROYO) AppleWebKit/533.1' - + ' (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'; +exports['Windows 8.1 IE 11 Touch'] = function (test) { + var s = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko' var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); - test.ok(a.isAndroid, 'Android'); + test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(a.isSafari, 'Safari'); + test.ok(a.isIE, 'IE'); + test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(a.isLinux, 'Linux'); + test.ok(a.isDesktop, 'Desktop'); + test.ok(a.isWindows, 'Windows'); + test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '4.0'); + test.equal(a.version, '11.0'); test.done(); }; -// Source: -// Chrome UA Spoofer - -exports['Android Xoom'] = function (test) { +exports['Windows XP IE 8.0'] = function (test) { - var s = 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13' + - ' (KHTML, like Gecko) Version/4.0 Safari/534.13'; + var s = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'; var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); - test.ok(a.isAndroid, 'Android'); - test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(a.isSafari, 'Safari'); - test.ok(!a.isFirefox, 'Firefox'); - test.ok(!a.isWebkit, 'Webkit'); - test.ok(!a.isChrome, 'Chrome'); - test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(a.isLinux, 'Linux'); - test.ok(!a.isMac, 'Mac'); - test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.ok(!a.isFacebook, 'Facebook'); - test.equal(a.version, '4.0'); - - test.done(); -}; - -// Source -// Chrome UA Spoofer - -exports['iPhone 4'] = function (test) { - - var s = 'Mozilla/5.0 (iPhone; 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'; - - var a = ua.parse(s); - - test.ok(a.isMobile, 'Mobile'); - test.ok(!a.isiPad, 'iPad'); - test.ok(!a.isiPod, 'iPod'); - test.ok(a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(a.isSafari, 'Safari'); + test.ok(a.isIE, 'IE'); + test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); + test.ok(a.isDesktop, 'Desktop'); + test.ok(a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); + test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '5.0.2'); + test.equal(a.version, '8.0'); test.done(); }; -// Source: -// http://java.net/jira/browse/USER_AGENT_UTILS-6 - -exports['Bada OS browser'] = function (test) { +exports['Windows XP IE 8.0 - Compatibility mode'] = function (test) { - var s = 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8500/S8500NEJE5; U; Bada/1.0; fr-fr) AppleWebKit/533.1' + - ' (KHTML, like Gecko) Dolfin/2.0 Mobile WVGA SMM-MMS/1.2.0 NexPlayer/3.0 profile/MIDP-2.1 ' + - 'configuration/CLDC-1.1 OPN-B'; + var s = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)'; var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); + test.ok(a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); + test.ok(a.isDesktop, 'Desktop'); + test.ok(a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); + test.equal(a.version, '8.0'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, undefined); + test.ok(a.isIECompatibilityMode); test.done(); }; +exports['Windows XP IE 10.0'] = function (test) { -exports['America Online Browser'] = function (test) { - - var s = 'Mozilla/4.0 (compatible; MSIE 7.0;' - + ' America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1)'; + var s = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2)'; var a = ua.parse(s); @@ -853,17 +706,19 @@ exports['America Online Browser'] = function (test) { test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '7.0'); + test.equal(a.version, '10.0'); + test.ok(!a.isIECompatibilityMode); test.done(); }; -exports['Windows 7 IE 10.6'] = function (test) { +exports['Windows XP IE 10.0 - Compatibility mode'] = function (test) { - var s = 'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0'; + var s = 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)'; var a = ua.parse(s); + test.ok(a.isAuthoritative, 'Authoritative'); test.ok(!a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); @@ -882,14 +737,15 @@ exports['Windows 7 IE 10.6'] = function (test) { test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '10.6'); + test.equal(a.version, '10.0'); + test.ok(a.isIECompatibilityMode); test.done(); }; -exports['Windows 7 IE 11.0'] = function (test) { +exports['Windows XP IE 7.0 - Compatibility mode (invalid mode)'] = function (test) { - var s = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'; + var s = 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/1.0)'; var a = ua.parse(s); @@ -912,13 +768,16 @@ exports['Windows 7 IE 11.0'] = function (test) { test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '11.0'); + test.equal(a.version, '7.0'); + test.ok(!a.isIECompatibilityMode); test.done(); }; -exports['Windows 8.1 IE 11 Touch'] = function (test) { - var s = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko' +exports['Windows XP IE 9.0 - Compatibility mode'] = function (test) { + + var s = 'Mozilla/4.0 (compatible; MSIE 7.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; .NET4.0C)'; var a = ua.parse(s); @@ -941,14 +800,17 @@ exports['Windows 8.1 IE 11 Touch'] = function (test) { test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '11.0'); + test.equal(a.version, '9.0'); + test.ok(a.isIECompatibilityMode); test.done(); }; -exports['Windows XP IE 8.0'] = function (test) { +/** OS X **/ +exports['OS X Opera 30'] = function (test) { - var s = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'; + var s = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko)' + + 'Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88' var a = ua.parse(s); @@ -959,26 +821,28 @@ exports['Windows XP IE 8.0'] = function (test) { test.ok(!a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); + test.ok(a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); + test.ok(!a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(!a.isMac, 'Mac'); + test.ok(a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '8.0'); + test.equal(a.version, '30.0.1835.88'); + test.ok(!a.isIECompatibilityMode); test.done(); }; -exports['Windows XP IE 8.0 - Compatibility mode'] = function (test) { +exports['OS X OmniWeb 622'] = function (test) { - var s = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)'; + var s = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16' + + '(KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941'; var a = ua.parse(s); @@ -990,26 +854,27 @@ exports['Windows XP IE 8.0 - Compatibility mode'] = function (test) { test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); + test.ok(!a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); + test.ok(a.isOmniWeb, 'OmniWeb'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); + test.ok(!a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(!a.isMac, 'Mac'); - test.equal(a.version, '8.0'); + test.ok(a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.ok(a.isIECompatibilityMode); + test.equal(a.version, '622.8.0.112941'); test.done(); }; -exports['Windows XP IE 10.0'] = function (test) { +exports['OS X Safari 530'] = function (test) { - var s = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2)'; + var s = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us)' + + ' AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19'; var a = ua.parse(s); @@ -1021,121 +886,123 @@ exports['Windows XP IE 10.0'] = function (test) { test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); - test.ok(!a.isSafari, 'Safari'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); + test.ok(!a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(!a.isMac, 'Mac'); + test.ok(a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '10.0'); - test.ok(!a.isIECompatibilityMode); + test.equal(a.version, '4.0.2'); test.done(); }; -exports['Windows XP IE 10.0 - Compatibility mode'] = function (test) { +exports['OS X Chromium'] = function (test) { - var s = 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)'; + var s = 'Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/32.0.1700.20 Mobile/11B554a Safari/9537.53'; var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(!a.isMobile, 'Mobile'); - test.ok(!a.isiPad, 'iPad'); + test.ok(a.isMobile, 'Mobile'); + test.ok(a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); + test.ok(!a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); - test.ok(!a.isChrome, 'Chrome'); + test.ok(a.isChrome, 'Chromium'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(!a.isMac, 'Mac'); + test.ok(a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '10.0'); - test.ok(a.isIECompatibilityMode); + test.equal(a.version, '32.0.1700.20'); + test.ok(!a.isIECompatibilityMode); test.done(); }; -exports['Windows XP IE 7.0 - Compatibility mode (invalid mode)'] = function (test) { +exports['Google Pixel'] = function (test) { - var s = 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/1.0)'; + var s = 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel Build/OPR6.170623.011) AppleWebKit/537.36' + + ' (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36'; var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(!a.isMobile, 'Mobile'); + test.ok(a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); - test.ok(!a.isAndroid, 'Android'); + test.ok(a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); + test.ok(!a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); - test.ok(!a.isChrome, 'Chrome'); + test.ok(a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); - test.ok(!a.isLinux, 'Linux'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '7.0'); - test.ok(!a.isIECompatibilityMode); + test.equal(a.version, '60.0.3112.116'); test.done(); }; -exports['Windows XP IE 9.0 - Compatibility mode'] = function (test) { +// Source: +// http://java.net/jira/browse/USER_AGENT_UTILS-6 - var s = 'Mozilla/4.0 (compatible; MSIE 7.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; .NET4.0C)'; +exports['Bada OS browser'] = function (test) { + + var s = 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8500/S8500NEJE5; U; Bada/1.0; fr-fr) AppleWebKit/533.1' + + ' (KHTML, like Gecko) Dolfin/2.0 Mobile WVGA SMM-MMS/1.2.0 NexPlayer/3.0 profile/MIDP-2.1 ' + + 'configuration/CLDC-1.1 OPN-B'; var a = ua.parse(s); test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(!a.isMobile, 'Mobile'); + test.ok(a.isMobile, 'Mobile'); test.ok(!a.isiPad, 'iPad'); test.ok(!a.isiPod, 'iPod'); test.ok(!a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); test.ok(!a.isOpera, 'Opera'); - test.ok(a.isIE, 'IE'); + test.ok(!a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(a.isDesktop, 'Desktop'); - test.ok(a.isWindows, 'Windows'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '9.0'); - test.ok(a.isIECompatibilityMode); + test.equal(a.version, undefined); test.done(); }; -exports['Mac OSX Opera 30'] = function (test) { +exports['America Online Browser'] = function (test) { - var s = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko)' + - 'Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88' + var s = 'Mozilla/4.0 (compatible; MSIE 7.0;' + + ' America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1)'; var a = ua.parse(s); @@ -1146,20 +1013,19 @@ exports['Mac OSX Opera 30'] = function (test) { test.ok(!a.isiPhone, 'iPhone'); test.ok(!a.isAndroid, 'Android'); test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); + test.ok(!a.isOpera, 'Opera'); + test.ok(a.isIE, 'IE'); test.ok(!a.isSafari, 'Safari'); test.ok(!a.isFirefox, 'Firefox'); test.ok(!a.isWebkit, 'Webkit'); test.ok(!a.isChrome, 'Chrome'); test.ok(!a.isKonqueror, 'Konqueror'); test.ok(a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); + test.ok(a.isWindows, 'Windows'); test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); + test.ok(!a.isMac, 'Mac'); test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.equal(a.version, '30.0.1835.88'); - test.ok(!a.isIECompatibilityMode); + test.equal(a.version, '7.0'); test.done(); }; @@ -1403,36 +1269,3 @@ exports['Facebook on Android'] = function (test) { test.done(); }; -exports['Chrome iOS'] = function (test) { - - var s = 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko)' + - ' CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1'; - - var a = ua.parse(s); - - test.ok(a.isAuthoritative, 'Authoritative'); - test.ok(a.isMobile, 'Mobile'); - test.ok(!a.isiPad, 'iPad'); - test.ok(!a.isiPod, 'iPod'); - test.ok(a.isiPhone, 'iPhone'); - test.ok(!a.isAndroid, 'Android'); - test.ok(!a.isBlackberry, 'Blackberry'); - test.ok(!a.isOpera, 'Opera'); - test.ok(!a.isIE, 'IE'); - test.ok(!a.isEdge, 'Edge'); - test.ok(!a.isSafari, 'Safari'); - test.ok(!a.isFirefox, 'Firefox'); - test.ok(!a.isWebkit, 'Webkit'); - test.ok(a.isChrome, 'Chrome'); - test.ok(!a.isKonqueror, 'Konqueror'); - test.ok(!a.isDesktop, 'Desktop'); - test.ok(!a.isWindows, 'Windows'); - test.ok(!a.isLinux, 'Linux'); - test.ok(a.isMac, 'Mac'); - test.ok(!a.isWindowsPhone, 'Windows Phone'); - test.ok(!a.isFacebook, 'Facebook'); - test.equal(a.version, '56.0.2924.75'); - test.ok(!a.isIECompatibilityMode); - - test.done(); -}; diff --git a/test/ios.js b/test/ios.js new file mode 100644 index 0000000..8bf095d --- /dev/null +++ b/test/ios.js @@ -0,0 +1,133 @@ +/** + * Created by aleksejs.gordejevs on 2/7/2018. + */ + +var ua = require('../'); + +exports['iPad 2'] = function (test) { + + var s = 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46' + + ' (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3'; + + var a = ua.parse(s); + + test.ok(a.isAuthoritative, 'Authoritative'); + test.ok(a.isMobile, 'Mobile'); + test.ok(a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(!a.isiPhone, 'iPhone'); + test.ok(!a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(!a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(!a.isLinux, 'Linux'); + test.ok(a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.equal(a.version, '5.1'); + + test.done(); +}; + +exports['Chrome iOS'] = function (test) { + + var s = 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko)' + + ' CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1'; + + var a = ua.parse(s); + + test.ok(a.isAuthoritative, 'Authoritative'); + test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(a.isiPhone, 'iPhone'); + test.ok(!a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(!a.isEdge, 'Edge'); + test.ok(!a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(!a.isLinux, 'Linux'); + test.ok(a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.ok(!a.isFacebook, 'Facebook'); + test.equal(a.version, '56.0.2924.75'); + test.ok(!a.isIECompatibilityMode); + + test.done(); +}; + +// Source +// Chrome UA Spoofer + +exports['iPhone 4'] = function (test) { + + var s = 'Mozilla/5.0 (iPhone; 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'; + + var a = ua.parse(s); + + test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(a.isiPhone, 'iPhone'); + test.ok(!a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(!a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(!a.isLinux, 'Linux'); + test.ok(a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.equal(a.version, '5.0.2'); + + test.done(); +}; + +exports['iOS AlamoFire'] = function (test) { + + var s = 'iOS-Example/1.0 (com.alamofire.iOS-Example; build:1; iOS 10.0.0) Alamofire/4.0.0'; + + var a = ua.parse(s); + + test.ok(a.isMobile, 'Mobile'); + test.ok(!a.isiPad, 'iPad'); + test.ok(!a.isiPod, 'iPod'); + test.ok(a.isiPhone, 'iPhone'); + test.ok(!a.isAndroid, 'Android'); + test.ok(!a.isBlackberry, 'Blackberry'); + test.ok(!a.isOpera, 'Opera'); + test.ok(!a.isIE, 'IE'); + test.ok(a.isAlamoFire, 'AlamoFire'); + test.ok(!a.isSafari, 'Safari'); + test.ok(!a.isFirefox, 'Firefox'); + test.ok(!a.isWebkit, 'Webkit'); + test.ok(!a.isChrome, 'Chrome'); + test.ok(!a.isKonqueror, 'Konqueror'); + test.ok(!a.isDesktop, 'Desktop'); + test.ok(!a.isWindows, 'Windows'); + test.ok(!a.isLinux, 'Linux'); + test.ok(!a.isMac, 'Mac'); + test.ok(!a.isWindowsPhone, 'Windows Phone'); + test.equal(a.version, '4.0.0'); + + test.done(); +};