1// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2// See LICENSE.txt for license information. 3 4package app 5 6import ( 7 "fmt" 8 "strings" 9 10 "github.com/avct/uasurfer" 11) 12 13var 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 25func 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 35var 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 49func 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 86func 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, "mmctl/"); index != -1 { 93 afterVersion := userAgentString[index+len("mmctl/"):] 94 return strings.Fields(afterVersion)[0] 95 } 96 97 if index := strings.Index(userAgentString, "Franz/"); index != -1 { 98 afterVersion := userAgentString[index+len("Franz/"):] 99 return strings.Fields(afterVersion)[0] 100 } 101 102 return getUAVersion(ua.Browser.Version) 103} 104 105func getUAVersion(version uasurfer.Version) string { 106 if version.Patch == 0 { 107 return fmt.Sprintf("%v.%v", version.Major, version.Minor) 108 } 109 return fmt.Sprintf("%v.%v.%v", version.Major, version.Minor, version.Patch) 110} 111 112var browserNames = map[uasurfer.BrowserName]string{ 113 uasurfer.BrowserUnknown: "Unknown", 114 uasurfer.BrowserChrome: "Chrome", 115 uasurfer.BrowserIE: "Internet Explorer", 116 uasurfer.BrowserSafari: "Safari", 117 uasurfer.BrowserFirefox: "Firefox", 118 uasurfer.BrowserAndroid: "Android", 119 uasurfer.BrowserOpera: "Opera", 120 uasurfer.BrowserBlackberry: "BlackBerry", 121} 122 123func getBrowserName(ua *uasurfer.UserAgent, userAgentString string) string { 124 browser := ua.Browser.Name 125 126 if strings.Contains(userAgentString, "Mattermost") { 127 return "Desktop App" 128 } 129 130 if strings.Contains(userAgentString, "mmctl") { 131 return "mmctl" 132 } 133 134 if browser == uasurfer.BrowserIE && ua.Browser.Version.Major > 11 { 135 return "Edge" 136 } 137 138 if name, ok := browserNames[browser]; ok { 139 return name 140 } 141 142 return browserNames[uasurfer.BrowserUnknown] 143 144} 145