mirror of
https://github.com/eosswedenorg/thalos
synced 2026-06-20 09:56:47 +02:00
internal/types/blacklist.go: add isWhitelist field
This commit is contained in:
parent
0aee0a97aa
commit
4f27307c70
4 changed files with 146 additions and 58 deletions
|
|
@ -1,27 +1,45 @@
|
|||
package types
|
||||
|
||||
type Blacklist map[string][]string
|
||||
|
||||
func (bl Blacklist) Empty() bool {
|
||||
return len(bl) < 1
|
||||
type Blacklist struct {
|
||||
table map[string][]string
|
||||
isWhitelist bool
|
||||
}
|
||||
|
||||
func (bl Blacklist) Add(contract string, action string) {
|
||||
if len(bl[contract]) < 1 {
|
||||
bl[contract] = []string{}
|
||||
func NewBlacklist(entries map[string][]string) *Blacklist {
|
||||
return &Blacklist{
|
||||
table: entries,
|
||||
}
|
||||
bl[contract] = append(bl[contract], action)
|
||||
}
|
||||
|
||||
func (bl *Blacklist) SetWhitelist(value bool) *Blacklist {
|
||||
bl.isWhitelist = value
|
||||
return bl
|
||||
}
|
||||
|
||||
func (bl Blacklist) Empty() bool {
|
||||
return len(bl.table) < 1
|
||||
}
|
||||
|
||||
func (bl *Blacklist) Add(contract string, action string) {
|
||||
if bl.table == nil {
|
||||
bl.table = map[string][]string{}
|
||||
}
|
||||
|
||||
if len(bl.table[contract]) < 1 {
|
||||
bl.table[contract] = []string{}
|
||||
}
|
||||
bl.table[contract] = append(bl.table[contract], action)
|
||||
}
|
||||
|
||||
func (bl Blacklist) IsAllowed(contract string, action string) bool {
|
||||
if v, ok := bl[contract]; ok {
|
||||
if v, ok := bl.table[contract]; ok {
|
||||
for _, act := range v {
|
||||
if act == action || act == "*" {
|
||||
return false
|
||||
return bl.isWhitelist == true
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
return bl.isWhitelist == false
|
||||
}
|
||||
|
||||
func (bl Blacklist) IsDenied(contract string, action string) bool {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,9 @@ import (
|
|||
)
|
||||
|
||||
func TestBlacklist_Empty(t *testing.T) {
|
||||
bl := Blacklist{}
|
||||
bl := Blacklist{
|
||||
table: map[string][]string{},
|
||||
}
|
||||
|
||||
require.True(t, bl.Empty())
|
||||
|
||||
|
|
@ -17,14 +19,18 @@ func TestBlacklist_Empty(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestBlacklist_Add(t *testing.T) {
|
||||
bl := Blacklist{}
|
||||
bl := Blacklist{
|
||||
table: map[string][]string{},
|
||||
}
|
||||
bl.Add("contract", "action1")
|
||||
bl.Add("contract", "action2")
|
||||
bl.Add("contract2", "action1")
|
||||
|
||||
expected := Blacklist{
|
||||
"contract": {"action1", "action2"},
|
||||
"contract2": {"action1"},
|
||||
table: map[string][]string{
|
||||
"contract": {"action1", "action2"},
|
||||
"contract2": {"action1"},
|
||||
},
|
||||
}
|
||||
|
||||
require.Equal(t, expected, bl)
|
||||
|
|
@ -32,7 +38,9 @@ func TestBlacklist_Add(t *testing.T) {
|
|||
|
||||
func TestBlacklist_IsAllowed(t *testing.T) {
|
||||
bl := Blacklist{
|
||||
"mycontract": {"myaction", "noop"},
|
||||
table: map[string][]string{
|
||||
"mycontract": {"myaction", "noop"},
|
||||
},
|
||||
}
|
||||
|
||||
require.False(t, bl.IsAllowed("mycontract", "myaction"))
|
||||
|
|
@ -43,7 +51,9 @@ func TestBlacklist_IsAllowed(t *testing.T) {
|
|||
|
||||
func TestBlacklist_IsAllowedWildcard(t *testing.T) {
|
||||
bl := Blacklist{
|
||||
"mycontract": {"*"},
|
||||
table: map[string][]string{
|
||||
"mycontract": {"*"},
|
||||
},
|
||||
}
|
||||
|
||||
require.False(t, bl.IsAllowed("mycontract", "myaction"))
|
||||
|
|
@ -51,3 +61,18 @@ func TestBlacklist_IsAllowedWildcard(t *testing.T) {
|
|||
require.False(t, bl.IsAllowed("mycontract", "xxx"))
|
||||
require.True(t, bl.IsAllowed("xxx", "yyy"))
|
||||
}
|
||||
|
||||
func TestBlacklist_Whitelist(t *testing.T) {
|
||||
bl := Blacklist{
|
||||
table: map[string][]string{
|
||||
"mycontract": {"myaction", "noop"},
|
||||
},
|
||||
}
|
||||
|
||||
bl.SetWhitelist(true)
|
||||
|
||||
require.True(t, bl.IsAllowed("mycontract", "myaction"))
|
||||
require.True(t, bl.IsAllowed("mycontract", "noop"))
|
||||
require.False(t, bl.IsAllowed("mycontract", "xxx"))
|
||||
require.False(t, bl.IsAllowed("xxx", "yyy"))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue