forked from mattermost/mattermost
-
Notifications
You must be signed in to change notification settings - Fork 0
/
user_agent.go
132 lines (115 loc) · 3.56 KB
/
user_agent.go
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
130
131
132
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package app
import (
"fmt"
"strings"
"github.com/avct/uasurfer"
)
var platformNames = map[uasurfer.Platform]string{
uasurfer.PlatformUnknown: "Windows",
uasurfer.PlatformWindows: "Windows",
uasurfer.PlatformMac: "Macintosh",
uasurfer.PlatformLinux: "Linux",
uasurfer.PlatformiPad: "iPad",
uasurfer.PlatformiPhone: "iPhone",
uasurfer.PlatformiPod: "iPod",
uasurfer.PlatformBlackberry: "BlackBerry",
uasurfer.PlatformWindowsPhone: "Windows Phone",
}
func getPlatformName(ua *uasurfer.UserAgent) string {
platform := ua.OS.Platform
if name, ok := platformNames[platform]; !ok {
return platformNames[uasurfer.PlatformUnknown]
} else {
return name
}
}
var osNames = map[uasurfer.OSName]string{
uasurfer.OSUnknown: "",
uasurfer.OSWindowsPhone: "Windows Phone",
uasurfer.OSWindows: "Windows",
uasurfer.OSMacOSX: "Mac OS",
uasurfer.OSiOS: "iOS",
uasurfer.OSAndroid: "Android",
uasurfer.OSBlackberry: "BlackBerry",
uasurfer.OSChromeOS: "Chrome OS",
uasurfer.OSKindle: "Kindle",
uasurfer.OSWebOS: "webOS",
uasurfer.OSLinux: "Linux",
}
func getOSName(ua *uasurfer.UserAgent) string {
os := ua.OS
if os.Name == uasurfer.OSWindows {
major := os.Version.Major
minor := os.Version.Minor
name := "Windows"
// Adapted from https://github.com/mssola/user_agent/blob/master/operating_systems.go#L26
if major == 5 {
if minor == 0 {
name = "Windows 2000"
} else if minor == 1 {
name = "Windows XP"
} else if minor == 2 {
name = "Windows XP x64 Edition"
}
} else if major == 6 {
if minor == 0 {
name = "Windows Vista"
} else if minor == 1 {
name = "Windows 7"
} else if minor == 2 {
name = "Windows 8"
} else if minor == 3 {
name = "Windows 8.1"
}
} else if major == 10 {
name = "Windows 10"
}
return name
} else if name, ok := osNames[os.Name]; ok {
return name
} else {
return osNames[uasurfer.OSUnknown]
}
}
func getBrowserVersion(ua *uasurfer.UserAgent, userAgentString string) string {
if index := strings.Index(userAgentString, "Mattermost/"); index != -1 {
afterVersion := userAgentString[index+len("Mattermost/"):]
return strings.Fields(afterVersion)[0]
} else if index := strings.Index(userAgentString, "Franz/"); index != -1 {
afterVersion := userAgentString[index+len("Franz/"):]
return strings.Fields(afterVersion)[0]
} else {
return getUAVersion(ua.Browser.Version)
}
}
func getUAVersion(version uasurfer.Version) string {
if version.Patch == 0 {
return fmt.Sprintf("%v.%v", version.Major, version.Minor)
} else {
return fmt.Sprintf("%v.%v.%v", version.Major, version.Minor, version.Patch)
}
}
var browserNames = map[uasurfer.BrowserName]string{
uasurfer.BrowserUnknown: "Unknown",
uasurfer.BrowserChrome: "Chrome",
uasurfer.BrowserIE: "Internet Explorer",
uasurfer.BrowserSafari: "Safari",
uasurfer.BrowserFirefox: "Firefox",
uasurfer.BrowserAndroid: "Android",
uasurfer.BrowserOpera: "Opera",
uasurfer.BrowserBlackberry: "BlackBerry",
}
func getBrowserName(ua *uasurfer.UserAgent, userAgentString string) string {
browser := ua.Browser.Name
if strings.Contains(userAgentString, "Mattermost") {
return "Desktop App"
} else if browser == uasurfer.BrowserIE && ua.Browser.Version.Major > 11 {
return "Edge"
} else if name, ok := browserNames[browser]; ok {
return name
} else {
return browserNames[uasurfer.BrowserUnknown]
}
}