1
0
Fork 0
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:
Henrik Hautakoski 2024-07-15 23:02:29 +02:00
parent 0aee0a97aa
commit 4f27307c70
4 changed files with 146 additions and 58 deletions

View file

@ -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 {

View file

@ -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"))
}