Skip to content

Commit

Permalink
iOS AlamoFire support #81
Browse files Browse the repository at this point in the history
Aleksejs Gordejevs committed Feb 7, 2018
1 parent 46cb526 commit dcaca68
Showing 8 changed files with 360 additions and 314 deletions.
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -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",
21 changes: 17 additions & 4 deletions lib/express-useragent.js
Original file line number Diff line number Diff line change
@@ -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;
}
4 changes: 2 additions & 2 deletions lib/express-useragent.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -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",
78 changes: 73 additions & 5 deletions test/android_phone.js
Original file line number Diff line number Diff line change
@@ -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();
};
9 changes: 4 additions & 5 deletions test/android_tablet.js
Original file line number Diff line number Diff line change
@@ -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();
};
423 changes: 128 additions & 295 deletions test/browsers.js

Large diffs are not rendered by default.

133 changes: 133 additions & 0 deletions test/ios.js
Original file line number Diff line number Diff line change
@@ -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();
};

0 comments on commit dcaca68

Please sign in to comment.