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  }