mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-10 08:20:23 +00:00
91774fc936
Uses github.com/libopenstorage/secrets to communicate with Vault. This removes the need for maintaining our own limited Vault APIs. By adding the new dependency, several other packages got updated in the process. Unused indirect dependencies have been removed from go.mod. Signed-off-by: Niels de Vos <ndevos@redhat.com>
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package glob
|
|
|
|
import "strings"
|
|
|
|
// The character which is treated like a glob
|
|
const GLOB = "*"
|
|
|
|
// Glob will test a string pattern, potentially containing globs, against a
|
|
// subject string. The result is a simple true/false, determining whether or
|
|
// not the glob pattern matched the subject text.
|
|
func Glob(pattern, subj string) bool {
|
|
// Empty pattern can only match empty subject
|
|
if pattern == "" {
|
|
return subj == pattern
|
|
}
|
|
|
|
// If the pattern _is_ a glob, it matches everything
|
|
if pattern == GLOB {
|
|
return true
|
|
}
|
|
|
|
parts := strings.Split(pattern, GLOB)
|
|
|
|
if len(parts) == 1 {
|
|
// No globs in pattern, so test for equality
|
|
return subj == pattern
|
|
}
|
|
|
|
leadingGlob := strings.HasPrefix(pattern, GLOB)
|
|
trailingGlob := strings.HasSuffix(pattern, GLOB)
|
|
end := len(parts) - 1
|
|
|
|
// Go over the leading parts and ensure they match.
|
|
for i := 0; i < end; i++ {
|
|
idx := strings.Index(subj, parts[i])
|
|
|
|
switch i {
|
|
case 0:
|
|
// Check the first section. Requires special handling.
|
|
if !leadingGlob && idx != 0 {
|
|
return false
|
|
}
|
|
default:
|
|
// Check that the middle parts match.
|
|
if idx < 0 {
|
|
return false
|
|
}
|
|
}
|
|
|
|
// Trim evaluated text from subj as we loop over the pattern.
|
|
subj = subj[idx+len(parts[i]):]
|
|
}
|
|
|
|
// Reached the last section. Requires special handling.
|
|
return trailingGlob || strings.HasSuffix(subj, parts[end])
|
|
}
|