55 lines
1 KiB
Go
55 lines
1 KiB
Go
package query
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
// Param the command param
|
|
type Param struct {
|
|
Stack string `json:"stack,omitempty"`
|
|
Path string `json:"path,omitempty"`
|
|
}
|
|
|
|
// MatchStack match the stack
|
|
func (query Param) MatchStack(stack string) bool {
|
|
|
|
if stack == "" || stack == "*" || query.Stack == "" {
|
|
return true
|
|
}
|
|
|
|
if stack == query.Stack {
|
|
return true
|
|
}
|
|
|
|
matched, _ := regexp.MatchString(strings.ReplaceAll(stack, "*", ".*"), query.Stack)
|
|
return matched
|
|
}
|
|
|
|
// MatchPath match the path
|
|
func (query Param) MatchPath(path string) bool {
|
|
if path == "" || path == "*" || query.Path == "" {
|
|
return true
|
|
}
|
|
|
|
if path == query.Path {
|
|
return true
|
|
}
|
|
|
|
matched, _ := regexp.MatchString(strings.ReplaceAll(path, "*", ".*"), query.Path)
|
|
return matched
|
|
}
|
|
|
|
// MatchAny match the stack or path
|
|
func (query Param) MatchAny(stack, path string) bool {
|
|
|
|
if path == "" || path == "-" {
|
|
return query.MatchStack(stack)
|
|
}
|
|
|
|
if stack == "" || stack == "-" {
|
|
return query.MatchPath(path)
|
|
}
|
|
|
|
return query.MatchStack(stack) || query.MatchPath(path)
|
|
}
|