forked from WhichBrowser/Parser-JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHeader.js
More file actions
129 lines (97 loc) · 3.32 KB
/
Header.js
File metadata and controls
129 lines (97 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* eslint-disable require-jsdoc */
const Constants = require('../constants');
const {Baidu, BrowserId, OperaMini, Puffin, UCBrowserNew, UCBrowserOld, Useragent, Wap} = require('./Header/');
class Header {
static analyseHeaders() {
/* Analyse the main useragent header */
let header;
if ((header = Header.getHeader.call(this, 'User-Agent'))) {
Header.analyseUserAgent.call(this, header);
}
/* Analyse secondary useragent headers */
if ((header = Header.getHeader.call(this, 'X-Original-User-Agent'))) {
Header.additionalUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-Device-User-Agent'))) {
Header.additionalUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'Device-Stock-UA'))) {
Header.additionalUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-OperaMini-Phone-UA'))) {
Header.additionalUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-UCBrowser-Device-UA'))) {
Header.additionalUserAgent.call(this, header);
}
/* Analyse browser specific headers */
if ((header = Header.getHeader.call(this, 'X-OperaMini-Phone'))) {
Header.analyseOperaMiniPhone.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-UCBrowser-Phone-UA'))) {
Header.analyseOldUCUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-UCBrowser-UA'))) {
Header.analyseNewUCUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'X-Puffin-UA'))) {
Header.analysePuffinUserAgent.call(this, header);
}
if ((header = Header.getHeader.call(this, 'Baidu-FlyFlow'))) {
Header.analyseBaiduHeader.call(this, header);
}
/* Analyse Android WebView browser ids */
if ((header = Header.getHeader.call(this, 'X-Requested-With'))) {
Header.analyseBrowserId.call(this, header);
}
/* Analyse WAP profile header */
if ((header = Header.getHeader.call(this, 'X-Wap-Profile'))) {
Header.analyseWapProfile.call(this, header);
}
return this;
}
static analyseUserAgent(header) {
new Useragent(header, this.data, this.options);
}
static analyseBaiduHeader(header) {
new Baidu(header, this.data);
}
static analyseOperaMiniPhone(header) {
new OperaMini(header, this.data);
}
static analyseBrowserId(header) {
new BrowserId(header, this.data);
}
static analysePuffinUserAgent(header) {
new Puffin(header, this.data);
}
static analyseNewUCUserAgent(header) {
new UCBrowserNew(header, this.data);
}
static analyseOldUCUserAgent(header) {
new UCBrowserOld(header, this.data);
}
static analyseWapProfile(header) {
new Wap(header, this.data);
}
static additionalUserAgent(ua) {
const Parser = require('../Parser');
const extra = new Parser(ua);
if (extra.device.type !== Constants.deviceType.DESKTOP) {
if (extra.os.name) {
this.data.os = extra.os;
}
if (extra.device.identified) {
this.data.device = extra.device;
}
}
}
static getHeader(h) {
for (let header of Object.keys(this.headers)) {
if (h.toLowerCase() === header.toLowerCase()) {
return this.headers[header];
}
}
}
}
module.exports = Header;