validate ext. community in search query
This commit is contained in:
parent
bb457e1ba9
commit
f427012e6f
@ -1,11 +1,16 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Errors
|
||||||
|
var (
|
||||||
|
ErrExtCommunityIncomplete = errors.New("incomplete extended community")
|
||||||
|
)
|
||||||
|
|
||||||
// FilterQueryParser parses a filter value into a search filter
|
// FilterQueryParser parses a filter value into a search filter
|
||||||
type FilterQueryParser func(value string) (*SearchFilter, error)
|
type FilterQueryParser func(value string) (*SearchFilter, error)
|
||||||
|
|
||||||
@ -64,10 +69,14 @@ func parseExtCommunityValue(value string) (*SearchFilter, error) {
|
|||||||
community := make(ExtCommunity, len(components))
|
community := make(ExtCommunity, len(components))
|
||||||
|
|
||||||
if len(community) != 3 {
|
if len(community) != 3 {
|
||||||
return nil, fmt.Errorf("malformed ext. community: %s", value)
|
return nil, ErrExtCommunityIncomplete
|
||||||
}
|
}
|
||||||
|
|
||||||
// Communities are not stringly typed, but a mix of string and int
|
// Check if the community is incomplete
|
||||||
|
if components[0] == "" || components[1] == "" || components[2] == "" {
|
||||||
|
return nil, ErrExtCommunityIncomplete
|
||||||
|
}
|
||||||
|
// TODO: Mixing strings and integers is not a good idea
|
||||||
community[0] = components[0]
|
community[0] = components[0]
|
||||||
community[1], _ = strconv.Atoi(components[1])
|
community[1], _ = strconv.Atoi(components[1])
|
||||||
community[2], _ = strconv.Atoi(components[2])
|
community[2], _ = strconv.Atoi(components[2])
|
||||||
|
@ -59,3 +59,25 @@ func TestParseExtCommunityValue(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPartialParseExtCommunityValue(t *testing.T) {
|
||||||
|
filter, err := parseExtCommunityValue("rt:23")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error, result:", filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
filter, err = parseExtCommunityValue("rt:23:")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error, result:", filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
filter, err = parseExtCommunityValue("rt::")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error, result:", filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
filter, err = parseExtCommunityValue("::")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error, result:", filter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user