...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package etcdserver
16
17 import "sync"
18
19
20 type AccessController struct {
21 corsMu sync.RWMutex
22 CORS map[string]struct{}
23 hostWhitelistMu sync.RWMutex
24 HostWhitelist map[string]struct{}
25 }
26
27
28 func NewAccessController() *AccessController {
29 return &AccessController{
30 CORS: map[string]struct{}{"*": {}},
31 HostWhitelist: map[string]struct{}{"*": {}},
32 }
33 }
34
35
36
37 func (ac *AccessController) OriginAllowed(origin string) bool {
38 ac.corsMu.RLock()
39 defer ac.corsMu.RUnlock()
40 if len(ac.CORS) == 0 {
41 return true
42 }
43 _, ok := ac.CORS["*"]
44 if ok {
45 return true
46 }
47 _, ok = ac.CORS[origin]
48 return ok
49 }
50
51
52
53 func (ac *AccessController) IsHostWhitelisted(host string) bool {
54 ac.hostWhitelistMu.RLock()
55 defer ac.hostWhitelistMu.RUnlock()
56 if len(ac.HostWhitelist) == 0 {
57 return true
58 }
59 _, ok := ac.HostWhitelist["*"]
60 if ok {
61 return true
62 }
63 _, ok = ac.HostWhitelist[host]
64 return ok
65 }
66
View as plain text