mirror of
https://github.com/minio/minio.git
synced 2024-12-27 07:35:55 -05:00
e71ef905f9
Add support for sse-s3 encryption with vault as KMS. Also refactoring code to make use of headers and functions defined in crypto package and clean up duplicated code.
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])
|
|
}
|