whitelist에서 email과 platform을 모두 비교
This commit is contained in:
@ -27,8 +27,6 @@ type blockinfo struct {
|
||||
Reason string `bson:"reason" json:"reason"`
|
||||
}
|
||||
|
||||
type whitelistMemberTag = string
|
||||
|
||||
type whitelistmember struct {
|
||||
Email string `bson:"email" json:"email"`
|
||||
Platform string `bson:"platform" json:"platform"`
|
||||
@ -53,7 +51,7 @@ type usertokeninfo struct {
|
||||
func (wl *whitelist) init(total []whitelistmember) {
|
||||
all := make(map[string]*whitelistmember)
|
||||
for _, member := range total {
|
||||
all[whitelistKey(member.Email)] = &member
|
||||
all[whitelistKey(member.Email, member.Platform)] = &member
|
||||
}
|
||||
atomic.StorePointer(&wl.emailptr, unsafe.Pointer(&all))
|
||||
}
|
||||
@ -66,11 +64,11 @@ func addToUnsafePointer(to *unsafe.Pointer, m *whitelistmember) {
|
||||
for k, v := range *src {
|
||||
next[k] = v
|
||||
}
|
||||
next[whitelistKey(m.Email)] = m
|
||||
next[whitelistKey(m.Email, m.Platform)] = m
|
||||
atomic.StorePointer(to, unsafe.Pointer(&next))
|
||||
}
|
||||
|
||||
func removeFromUnsafePointer(from *unsafe.Pointer, email string) {
|
||||
func removeFromUnsafePointer(from *unsafe.Pointer, email string, platform string) {
|
||||
ptr := atomic.LoadPointer(from)
|
||||
src := (*map[string]*whitelistmember)(ptr)
|
||||
|
||||
@ -78,7 +76,7 @@ func removeFromUnsafePointer(from *unsafe.Pointer, email string) {
|
||||
for k, v := range *src {
|
||||
next[k] = v
|
||||
}
|
||||
delete(next, whitelistKey(email))
|
||||
delete(next, whitelistKey(email, platform))
|
||||
atomic.StorePointer(from, unsafe.Pointer(&next))
|
||||
}
|
||||
|
||||
@ -86,18 +84,16 @@ func (wl *whitelist) add(m *whitelistmember) {
|
||||
addToUnsafePointer(&wl.emailptr, m)
|
||||
}
|
||||
|
||||
func (wl *whitelist) remove(email string) {
|
||||
removeFromUnsafePointer(&wl.emailptr, email)
|
||||
func (wl *whitelist) remove(email string, platform string) {
|
||||
removeFromUnsafePointer(&wl.emailptr, email, platform)
|
||||
}
|
||||
|
||||
func (wl *whitelist) isMember(email string, platform string) bool {
|
||||
ptr := atomic.LoadPointer(&wl.emailptr)
|
||||
src := *(*map[string]*whitelistmember)(ptr)
|
||||
|
||||
if member, exists := src[whitelistKey(email)]; exists {
|
||||
return member.Platform == platform
|
||||
}
|
||||
return false
|
||||
_, exists := src[whitelistKey(email, platform)]
|
||||
return exists
|
||||
}
|
||||
|
||||
type DivisionStateName string
|
||||
@ -559,18 +555,6 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
}
|
||||
|
||||
func (sh *serviceDescription) isAdmin(email string) bool {
|
||||
ptr := atomic.LoadPointer(&sh.admins)
|
||||
admins := *(*[]string)(ptr)
|
||||
|
||||
for _, a := range admins {
|
||||
if a == email {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request) {
|
||||
defer func() {
|
||||
s := recover()
|
||||
|
||||
Reference in New Issue
Block a user