github.com/nmintoh/dserver@v5.11.1+incompatible/app/user_agent.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "fmt" 8 "strings" 9 10 "github.com/avct/uasurfer" 11 ) 12 13 var platformNames = map[uasurfer.Platform]string{ 14 uasurfer.PlatformUnknown: "Windows", 15 uasurfer.PlatformWindows: "Windows", 16 uasurfer.PlatformMac: "Macintosh", 17 uasurfer.PlatformLinux: "Linux", 18 uasurfer.PlatformiPad: "iPad", 19 uasurfer.PlatformiPhone: "iPhone", 20 uasurfer.PlatformiPod: "iPod", 21 uasurfer.PlatformBlackberry: "BlackBerry", 22 uasurfer.PlatformWindowsPhone: "Windows Phone", 23 } 24 25 func getPlatformName(ua *uasurfer.UserAgent) string { 26 platform := ua.OS.Platform 27 28 name, ok := platformNames[platform] 29 if !ok { 30 return platformNames[uasurfer.PlatformUnknown] 31 } 32 return name 33 } 34 35 var osNames = map[uasurfer.OSName]string{ 36 uasurfer.OSUnknown: "", 37 uasurfer.OSWindowsPhone: "Windows Phone", 38 uasurfer.OSWindows: "Windows", 39 uasurfer.OSMacOSX: "Mac OS", 40 uasurfer.OSiOS: "iOS", 41 uasurfer.OSAndroid: "Android", 42 uasurfer.OSBlackberry: "BlackBerry", 43 uasurfer.OSChromeOS: "Chrome OS", 44 uasurfer.OSKindle: "Kindle", 45 uasurfer.OSWebOS: "webOS", 46 uasurfer.OSLinux: "Linux", 47 } 48 49 func getOSName(ua *uasurfer.UserAgent) string { 50 os := ua.OS 51 52 if os.Name == uasurfer.OSWindows { 53 major := os.Version.Major 54 minor := os.Version.Minor 55 56 switch { 57 case major == 5 && minor == 0: 58 return "Windows 2000" 59 case major == 5 && minor == 1: 60 return "Windows XP" 61 case major == 5 && minor == 2: 62 return "Windows XP x64 Edition" 63 case major == 6 && minor == 0: 64 return "Windows Vista" 65 case major == 6 && minor == 1: 66 return "Windows 7" 67 case major == 6 && minor == 2: 68 return "Windows 8" 69 case major == 6 && minor == 3: 70 return "Windows 8.1" 71 case major == 10: 72 return "Windows 10" 73 default: 74 return "Windows" 75 } 76 } 77 78 name, ok := osNames[os.Name] 79 if ok { 80 return name 81 } 82 83 return osNames[uasurfer.OSUnknown] 84 } 85 86 func getBrowserVersion(ua *uasurfer.UserAgent, userAgentString string) string { 87 if index := strings.Index(userAgentString, "Mattermost/"); index != -1 { 88 afterVersion := userAgentString[index+len("Mattermost/"):] 89 return strings.Fields(afterVersion)[0] 90 } 91 92 if index := strings.Index(userAgentString, "Franz/"); index != -1 { 93 afterVersion := userAgentString[index+len("Franz/"):] 94 return strings.Fields(afterVersion)[0] 95 } 96 97 return getUAVersion(ua.Browser.Version) 98 } 99 100 func getUAVersion(version uasurfer.Version) string { 101 if version.Patch == 0 { 102 return fmt.Sprintf("%v.%v", version.Major, version.Minor) 103 } 104 return fmt.Sprintf("%v.%v.%v", version.Major, version.Minor, version.Patch) 105 } 106 107 var browserNames = map[uasurfer.BrowserName]string{ 108 uasurfer.BrowserUnknown: "Unknown", 109 uasurfer.BrowserChrome: "Chrome", 110 uasurfer.BrowserIE: "Internet Explorer", 111 uasurfer.BrowserSafari: "Safari", 112 uasurfer.BrowserFirefox: "Firefox", 113 uasurfer.BrowserAndroid: "Android", 114 uasurfer.BrowserOpera: "Opera", 115 uasurfer.BrowserBlackberry: "BlackBerry", 116 } 117 118 func getBrowserName(ua *uasurfer.UserAgent, userAgentString string) string { 119 browser := ua.Browser.Name 120 121 if strings.Contains(userAgentString, "Mattermost") { 122 return "Desktop App" 123 } 124 125 if browser == uasurfer.BrowserIE && ua.Browser.Version.Major > 11 { 126 return "Edge" 127 } 128 129 if name, ok := browserNames[browser]; ok { 130 return name 131 } 132 133 return browserNames[uasurfer.BrowserUnknown] 134 135 }