MCPcopy
hub / github.com/grpc/grpc-go / newHeaderMatcher

Function newHeaderMatcher

internal/xds/rbac/matchers.go:267–298  ·  view source on GitHub ↗
(headerMatcherConfig *v3route_componentspb.HeaderMatcher)

Source from the content-addressed store, hash-verified

265}
266
267func newHeaderMatcher(headerMatcherConfig *v3route_componentspb.HeaderMatcher) (*headerMatcher, error) {
268 var m internalmatcher.HeaderMatcher
269 switch headerMatcherConfig.HeaderMatchSpecifier.(type) {
270 case *v3route_componentspb.HeaderMatcher_ExactMatch:
271 m = internalmatcher.NewHeaderExactMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetExactMatch(), headerMatcherConfig.InvertMatch)
272 case *v3route_componentspb.HeaderMatcher_SafeRegexMatch:
273 regex, err := internalmatcher.CompileSafeRegex(headerMatcherConfig.GetSafeRegexMatch().GetRegex())
274 if err != nil {
275 return nil, err
276 }
277 m = internalmatcher.NewHeaderRegexMatcher(headerMatcherConfig.Name, regex, headerMatcherConfig.InvertMatch)
278 case *v3route_componentspb.HeaderMatcher_RangeMatch:
279 m = internalmatcher.NewHeaderRangeMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetRangeMatch().Start, headerMatcherConfig.GetRangeMatch().End, headerMatcherConfig.InvertMatch)
280 case *v3route_componentspb.HeaderMatcher_PresentMatch:
281 m = internalmatcher.NewHeaderPresentMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetPresentMatch(), headerMatcherConfig.InvertMatch)
282 case *v3route_componentspb.HeaderMatcher_PrefixMatch:
283 m = internalmatcher.NewHeaderPrefixMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetPrefixMatch(), headerMatcherConfig.InvertMatch)
284 case *v3route_componentspb.HeaderMatcher_SuffixMatch:
285 m = internalmatcher.NewHeaderSuffixMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetSuffixMatch(), headerMatcherConfig.InvertMatch)
286 case *v3route_componentspb.HeaderMatcher_ContainsMatch:
287 m = internalmatcher.NewHeaderContainsMatcher(headerMatcherConfig.Name, headerMatcherConfig.GetContainsMatch(), headerMatcherConfig.InvertMatch)
288 case *v3route_componentspb.HeaderMatcher_StringMatch:
289 sm, err := internalmatcher.StringMatcherFromProto(headerMatcherConfig.GetStringMatch())
290 if err != nil {
291 return nil, fmt.Errorf("invalid string matcher %+v: %v", headerMatcherConfig.GetStringMatch(), err)
292 }
293 m = internalmatcher.NewHeaderStringMatcher(headerMatcherConfig.Name, sm, headerMatcherConfig.InvertMatch)
294 default:
295 return nil, errors.New("unknown header matcher type")
296 }
297 return &headerMatcher{matcher: m}, nil
298}
299
300func (hm *headerMatcher) match(data *rpcData) bool {
301 return hm.matcher.Match(data.md)

Callers 2

matchersFromPermissionsFunction · 0.85
matchersFromPrincipalsFunction · 0.85

Calls 1

ErrorfMethod · 0.65

Tested by

no test coverage detected