mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-14 11:57:48 +00:00
fcf27bb035
* fix inrange operator regexs Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add support for + sign Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add support for leftEndpoint + sign Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * update regexs Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add range operator tests in client code Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * extract range values Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add cases Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add test Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * fix test Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * add cli test Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * clean up code Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * fix lint error Signed-off-by: damilola olayinka <holayinkajr@gmail.com> * fix kuttl test Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * regex nits Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: damilola olayinka <holayinkajr@gmail.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Co-authored-by: Charles-Edouard Brétéché <charled.breteche@gmail.com> Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package operator
|
|
|
|
import (
|
|
"regexp"
|
|
)
|
|
|
|
// Operator is string alias that represents selection operators enum
|
|
type Operator string
|
|
|
|
const (
|
|
// Equal stands for ==
|
|
Equal Operator = ""
|
|
// MoreEqual stands for >=
|
|
MoreEqual Operator = ">="
|
|
// LessEqual stands for <=
|
|
LessEqual Operator = "<="
|
|
// NotEqual stands for !
|
|
NotEqual Operator = "!"
|
|
// More stands for >
|
|
More Operator = ">"
|
|
// Less stands for <
|
|
Less Operator = "<"
|
|
// InRange stands for -
|
|
InRange Operator = "-"
|
|
// NotInRange stands for !-
|
|
NotInRange Operator = "!-"
|
|
)
|
|
|
|
var (
|
|
InRangeRegex = regexp.MustCompile(`^([-|\+]?\d+(?:\.\d+)?[A-Za-z]*)-([-|\+]?\d+(?:\.\d+)?[A-Za-z]*)$`)
|
|
NotInRangeRegex = regexp.MustCompile(`^([-|\+]?\d+(?:\.\d+)?[A-Za-z]*)!-([-|\+]?\d+(?:\.\d+)?[A-Za-z]*)$`)
|
|
)
|
|
|
|
// GetOperatorFromStringPattern parses opeartor from pattern
|
|
func GetOperatorFromStringPattern(pattern string) Operator {
|
|
if len(pattern) < 2 {
|
|
return Equal
|
|
}
|
|
if pattern[:len(MoreEqual)] == string(MoreEqual) {
|
|
return MoreEqual
|
|
}
|
|
if pattern[:len(LessEqual)] == string(LessEqual) {
|
|
return LessEqual
|
|
}
|
|
if pattern[:len(More)] == string(More) {
|
|
return More
|
|
}
|
|
if pattern[:len(Less)] == string(Less) {
|
|
return Less
|
|
}
|
|
if pattern[:len(NotEqual)] == string(NotEqual) {
|
|
return NotEqual
|
|
}
|
|
if match := NotInRangeRegex.Match([]byte(pattern)); match {
|
|
return NotInRange
|
|
}
|
|
if match := InRangeRegex.Match([]byte(pattern)); match {
|
|
return InRange
|
|
}
|
|
return Equal
|
|
}
|