forked from andybalholm/redwood
-
Notifications
You must be signed in to change notification settings - Fork 0
/
useragent.go
84 lines (78 loc) · 1.9 KB
/
useragent.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
package main
import "strings"
// platformStrings is a list of platform names to look for in User-Agent
// strings. The order matters; the first one found will be considered the
// correct result.
var platformStrings = []string{
"Android",
"Linux",
"Macintosh",
"iPad",
"iPod",
"iPhone",
"iOS",
"Darwin",
"dataaccessd",
"Windows",
"Blackberry",
"BlackBerry",
"BB10",
"MAC",
"Mac",
"Microsoft",
"MICROSOFT",
"MS Web Service",
"WIN",
"Win",
"GoogleAuth",
"Gms-Backup",
"GmsCore",
"okhttp",
"CaptiveNetworkSupport",
"CloudKit",
"CFNetwork",
"com.apple",
}
var platformAliases = map[string]string{
"BB10": "Blackberry",
"BlackBerry": "Blackberry",
"MAC": "Macintosh",
"Mac": "Macintosh",
"MICROSOFT": "Windows",
"Microsoft": "Windows",
"MS Web Service": "Windows",
"WIN": "Windows",
"Win": "Windows",
"GoogleAuth": "Android",
"Gms-Backup": "Android",
"Gms-Core": "Android",
"okhttp": "Android",
"CaptiveNetworkSupport": "Darwin",
"CloudKit": "Darwin",
"CFNetwork": "Darwin",
"dataaccessd": "Darwin",
"iOS": "Darwin",
"com.apple": "Darwin",
}
var darwinPlatforms = map[string]bool{
"Macintosh": true,
"iPhone": true,
"iPad": true,
"iPod": true,
"Darwin": true,
}
// platform examines a User-Agent string and attempts to return
// the platform that the client is running on. If it can't detect the platform,
// it returns the empty string. Apple products are distinguished if possible
// (Macintosh, iPad, etc.), but often will be just Darwin.
func platform(ua string) string {
for _, p := range platformStrings {
if strings.Contains(ua, p) {
if p2, ok := platformAliases[p]; ok {
p = p2
}
return p
}
}
return ""
}