summaryrefslogtreecommitdiff
path: root/vendor/github.com/bmatcuk/doublestar/v4/validate.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-15 16:37:08 -0600
committermo khan <mo@mokhan.ca>2025-07-17 16:30:22 -0600
commit45df4d0d9b577fecee798d672695fe24ff57fb1b (patch)
tree1b99bf645035b58e0d6db08c7a83521f41f7a75b /vendor/github.com/bmatcuk/doublestar/v4/validate.go
parentf94f79608393d4ab127db63cc41668445ef6b243 (diff)
feat: migrate from Cedar to SpiceDB authorization system
This is a major architectural change that replaces the Cedar policy-based authorization system with SpiceDB's relation-based authorization. Key changes: - Migrate from Rust to Go implementation - Replace Cedar policies with SpiceDB schema and relationships - Switch from envoy `ext_authz` with Cedar to SpiceDB permission checks - Update build system and dependencies for Go ecosystem - Maintain Envoy integration for external authorization This change enables more flexible permission modeling through SpiceDB's Google Zanzibar inspired relation-based system, supporting complex hierarchical permissions that were difficult to express in Cedar. Breaking change: Existing Cedar policies and Rust-based configuration will no longer work and need to be migrated to SpiceDB schema.
Diffstat (limited to 'vendor/github.com/bmatcuk/doublestar/v4/validate.go')
-rw-r--r--vendor/github.com/bmatcuk/doublestar/v4/validate.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/vendor/github.com/bmatcuk/doublestar/v4/validate.go b/vendor/github.com/bmatcuk/doublestar/v4/validate.go
new file mode 100644
index 00000000..c689b9eb
--- /dev/null
+++ b/vendor/github.com/bmatcuk/doublestar/v4/validate.go
@@ -0,0 +1,82 @@
+package doublestar
+
+import "path/filepath"
+
+// Validate a pattern. Patterns are validated while they run in Match(),
+// PathMatch(), and Glob(), so, you normally wouldn't need to call this.
+// However, there are cases where this might be useful: for example, if your
+// program allows a user to enter a pattern that you'll run at a later time,
+// you might want to validate it.
+//
+// ValidatePattern assumes your pattern uses '/' as the path separator.
+//
+func ValidatePattern(s string) bool {
+ return doValidatePattern(s, '/')
+}
+
+// Like ValidatePattern, only uses your OS path separator. In other words, use
+// ValidatePattern if you would normally use Match() or Glob(). Use
+// ValidatePathPattern if you would normally use PathMatch(). Keep in mind,
+// Glob() requires '/' separators, even if your OS uses something else.
+//
+func ValidatePathPattern(s string) bool {
+ return doValidatePattern(s, filepath.Separator)
+}
+
+func doValidatePattern(s string, separator rune) bool {
+ altDepth := 0
+ l := len(s)
+VALIDATE:
+ for i := 0; i < l; i++ {
+ switch s[i] {
+ case '\\':
+ if separator != '\\' {
+ // skip the next byte - return false if there is no next byte
+ if i++; i >= l {
+ return false
+ }
+ }
+ continue
+
+ case '[':
+ if i++; i >= l {
+ // class didn't end
+ return false
+ }
+ if s[i] == '^' || s[i] == '!' {
+ i++
+ }
+ if i >= l || s[i] == ']' {
+ // class didn't end or empty character class
+ return false
+ }
+
+ for ; i < l; i++ {
+ if separator != '\\' && s[i] == '\\' {
+ i++
+ } else if s[i] == ']' {
+ // looks good
+ continue VALIDATE
+ }
+ }
+
+ // class didn't end
+ return false
+
+ case '{':
+ altDepth++
+ continue
+
+ case '}':
+ if altDepth == 0 {
+ // alt end without a corresponding start
+ return false
+ }
+ altDepth--
+ continue
+ }
+ }
+
+ // valid as long as all alts are closed
+ return altDepth == 0
+}