blob: c16a5c566291d45d59d72ff9139388b97e5c9838 [file] [log] [blame]
Girish Gowdra631ef3d2020-06-15 10:45:52 -07001// Copyright (c) 2017 Uber Technologies, Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package baggage
16
17const (
18 defaultMaxValueLength = 2048
19)
20
21// Restriction determines whether a baggage key is allowed and contains any restrictions on the baggage value.
22type Restriction struct {
23 keyAllowed bool
24 maxValueLength int
25}
26
27// NewRestriction returns a new Restriction.
28func NewRestriction(keyAllowed bool, maxValueLength int) *Restriction {
29 return &Restriction{
30 keyAllowed: keyAllowed,
31 maxValueLength: maxValueLength,
32 }
33}
34
35// KeyAllowed returns whether the baggage key for this restriction is allowed.
36func (r *Restriction) KeyAllowed() bool {
37 return r.keyAllowed
38}
39
40// MaxValueLength returns the max length for the baggage value.
41func (r *Restriction) MaxValueLength() int {
42 return r.maxValueLength
43}
44
45// RestrictionManager keeps track of valid baggage keys and their restrictions. The manager
46// will return a Restriction for a specific baggage key which will determine whether the baggage
47// key is allowed for the current service and any other applicable restrictions on the baggage
48// value.
49type RestrictionManager interface {
50 GetRestriction(service, key string) *Restriction
51}
52
53// DefaultRestrictionManager allows any baggage key.
54type DefaultRestrictionManager struct {
55 defaultRestriction *Restriction
56}
57
58// NewDefaultRestrictionManager returns a DefaultRestrictionManager.
59func NewDefaultRestrictionManager(maxValueLength int) *DefaultRestrictionManager {
60 if maxValueLength == 0 {
61 maxValueLength = defaultMaxValueLength
62 }
63 return &DefaultRestrictionManager{
64 defaultRestriction: &Restriction{keyAllowed: true, maxValueLength: maxValueLength},
65 }
66}
67
68// GetRestriction implements RestrictionManager#GetRestriction.
69func (m *DefaultRestrictionManager) GetRestriction(service, key string) *Restriction {
70 return m.defaultRestriction
71}