mirror of
https://github.com/portainer/portainer.git
synced 2025-08-02 20:35:25 +02:00
fix(edgestack): validate edge stack name for api [BE-11365] (#222)
This commit is contained in:
parent
05e872337a
commit
40c7742e46
6 changed files with 88 additions and 7 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
// GetPortainerURLFromEdgeKey returns the portainer URL from an edge key
|
||||
|
@ -28,3 +29,24 @@ func GetPortainerURLFromEdgeKey(edgeKey string) (string, error) {
|
|||
|
||||
return keyInfo[0], nil
|
||||
}
|
||||
|
||||
// IsValidEdgeStackName validates an edge stack name
|
||||
// Edge stack name must be between 1 and 255 characters long
|
||||
// and can only contain lowercase letters, digits, hyphens and underscores
|
||||
// Edge stack name must start with either a lowercase letter or a digit
|
||||
func IsValidEdgeStackName(name string) bool {
|
||||
if len(name) == 0 || len(name) > 255 {
|
||||
return false
|
||||
}
|
||||
|
||||
if !unicode.IsLower(rune(name[0])) && !unicode.IsDigit(rune(name[0])) {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, r := range name {
|
||||
if !(unicode.IsLower(r) || unicode.IsDigit(r) || r == '-' || r == '_') {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -27,3 +27,34 @@ func TestGetPortainerURLFromEdgeKey(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsValidEdgeStackName(t *testing.T) {
|
||||
f := func(name string, expected bool) {
|
||||
if IsValidEdgeStackName(name) != expected {
|
||||
t.Fatalf("expected %v, found %v", expected, IsValidEdgeStackName(name))
|
||||
}
|
||||
}
|
||||
|
||||
f("edge-stack", true)
|
||||
f("edge_stack", true)
|
||||
f("edgestack", true)
|
||||
f("edgestack11", true)
|
||||
f("111", true)
|
||||
f("111edgestack", true)
|
||||
f("edge#stack", false)
|
||||
f("edge stack", false)
|
||||
f("Edge_stack", false)
|
||||
f("EdgeStack", false)
|
||||
f("-edgestack", false)
|
||||
f("_edgestack", false)
|
||||
f("#edgestack", false)
|
||||
f("/edgestack", false)
|
||||
f("#edgestack", false)
|
||||
f("édgestack", false)
|
||||
f("", false)
|
||||
f(" ", false)
|
||||
f("-", false)
|
||||
f("_", false)
|
||||
f("E", false)
|
||||
f("eedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackdgeedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackedgestackstack", false)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue