diff --git a/changelog.txt b/changelog.txt index 4e60a6d..20aecbe 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,8 @@ 0.0.7 ======================== +- improved user-agent parser (added support for new headers `Sec-CH-UA`) + ======================== 0.0.6 ======================== diff --git a/controller.js b/controller.js index 63207fd..75cadda 100644 --- a/controller.js +++ b/controller.js @@ -134,8 +134,7 @@ Controller.prototype = { get ua() { if (this.$ua != null) return this.$ua; - let ua = this.headers['user-agent']; - this.$ua = ua ? ua.parseUA() : ''; + this.$ua = F.TUtils.parseUA(this.headers); return this.$ua; }, diff --git a/utils.js b/utils.js index f7a2fd4..86b6790 100755 --- a/utils.js +++ b/utils.js @@ -1584,6 +1584,20 @@ exports.filestreamer = function(filename, onbuffer, onend, size) { }; +exports.parseUA = function(headers, structured) { + let ua = headers['sec-ch-ua']; + if (ua) { + let platform = headers['sec-ch-ua-platform'] || ''; + let mobile = headers['sec-ch-ua-mobile'] === '?1'; + let index = ua.indexOf('";v'); + let browser = ua.substring(1, index); + return structured ? { os: platform, browser: browser, device: mobile ? 'mobile' : 'desktop' } : (platfrom + ' ' + browser + (mobile ? ' Mobile' : '')).trim(); + } else { + ua = (headers['user-agent'] || ''); + return ua ? ua.parseUA() : ua; + } +}; + exports.parseInt = function(obj, def) { if (obj == null || obj === '') return def === undefined ? 0 : def; diff --git a/websocket.js b/websocket.js index 814be8f..e7ea64a 100644 --- a/websocket.js +++ b/websocket.js @@ -70,8 +70,7 @@ Controller.prototype = { get ua() { if (this.$ua != null) return this.$ua; - let ua = this.headers['user-agent']; - this.$ua = ua ? ua.parseUA() : ''; + this.$ua = F.TUtils.parseUA(this.headers); return this.$ua; },