mirror of
				https://github.com/1Password/onepassword-operator.git
				synced 2025-10-31 11:49:40 +00:00 
			
		
		
		
	Upgrade Operator SDK to v1.34.1 and update dependencies (#185)
This does the following updates: * Upgrade to Operator SDK v1.34.1. This fixes building multi-arch images from Makefile. Check this MR from operator-framework for details. * Update Go dependencies. This addresses Dependabot alert ["Golang protojson.Unmarshal function infinite loop when unmarshaling certain forms of invalid JSON"](https://github.com/1Password/onepassword-operator/security/dependabot/13). * Update versions of the GitHub Actions used in the pipelines. * Update Kubernetes related tools (such as controller-tools version, and operator-sdk for ci pipelines) By updating dependencies, the pipelines no longer fail due to a panic error when running `make test`.
This commit is contained in:
		
							
								
								
									
										191
									
								
								vendor/github.com/go-openapi/jsonpointer/pointer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										191
									
								
								vendor/github.com/go-openapi/jsonpointer/pointer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -26,6 +26,7 @@ | ||||
| package jsonpointer | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| @@ -40,6 +41,7 @@ const ( | ||||
| 	pointerSeparator = `/` | ||||
|  | ||||
| 	invalidStart = `JSON pointer must be empty or start with a "` + pointerSeparator | ||||
| 	notFound     = `Can't find the pointer in the document` | ||||
| ) | ||||
|  | ||||
| var jsonPointableType = reflect.TypeOf(new(JSONPointable)).Elem() | ||||
| @@ -48,13 +50,13 @@ var jsonSetableType = reflect.TypeOf(new(JSONSetable)).Elem() | ||||
| // JSONPointable is an interface for structs to implement when they need to customize the | ||||
| // json pointer process | ||||
| type JSONPointable interface { | ||||
| 	JSONLookup(string) (interface{}, error) | ||||
| 	JSONLookup(string) (any, error) | ||||
| } | ||||
|  | ||||
| // JSONSetable is an interface for structs to implement when they need to customize the | ||||
| // json pointer process | ||||
| type JSONSetable interface { | ||||
| 	JSONSet(string, interface{}) error | ||||
| 	JSONSet(string, any) error | ||||
| } | ||||
|  | ||||
| // New creates a new json pointer for the given string | ||||
| @@ -81,9 +83,7 @@ func (p *Pointer) parse(jsonPointerString string) error { | ||||
| 			err = errors.New(invalidStart) | ||||
| 		} else { | ||||
| 			referenceTokens := strings.Split(jsonPointerString, pointerSeparator) | ||||
| 			for _, referenceToken := range referenceTokens[1:] { | ||||
| 				p.referenceTokens = append(p.referenceTokens, referenceToken) | ||||
| 			} | ||||
| 			p.referenceTokens = append(p.referenceTokens, referenceTokens[1:]...) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -91,38 +91,58 @@ func (p *Pointer) parse(jsonPointerString string) error { | ||||
| } | ||||
|  | ||||
| // Get uses the pointer to retrieve a value from a JSON document | ||||
| func (p *Pointer) Get(document interface{}) (interface{}, reflect.Kind, error) { | ||||
| func (p *Pointer) Get(document any) (any, reflect.Kind, error) { | ||||
| 	return p.get(document, swag.DefaultJSONNameProvider) | ||||
| } | ||||
|  | ||||
| // Set uses the pointer to set a value from a JSON document | ||||
| func (p *Pointer) Set(document interface{}, value interface{}) (interface{}, error) { | ||||
| func (p *Pointer) Set(document any, value any) (any, error) { | ||||
| 	return document, p.set(document, value, swag.DefaultJSONNameProvider) | ||||
| } | ||||
|  | ||||
| // GetForToken gets a value for a json pointer token 1 level deep | ||||
| func GetForToken(document interface{}, decodedToken string) (interface{}, reflect.Kind, error) { | ||||
| func GetForToken(document any, decodedToken string) (any, reflect.Kind, error) { | ||||
| 	return getSingleImpl(document, decodedToken, swag.DefaultJSONNameProvider) | ||||
| } | ||||
|  | ||||
| // SetForToken gets a value for a json pointer token 1 level deep | ||||
| func SetForToken(document interface{}, decodedToken string, value interface{}) (interface{}, error) { | ||||
| func SetForToken(document any, decodedToken string, value any) (any, error) { | ||||
| 	return document, setSingleImpl(document, value, decodedToken, swag.DefaultJSONNameProvider) | ||||
| } | ||||
|  | ||||
| func getSingleImpl(node interface{}, decodedToken string, nameProvider *swag.NameProvider) (interface{}, reflect.Kind, error) { | ||||
| func isNil(input any) bool { | ||||
| 	if input == nil { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	kind := reflect.TypeOf(input).Kind() | ||||
| 	switch kind { //nolint:exhaustive | ||||
| 	case reflect.Ptr, reflect.Map, reflect.Slice, reflect.Chan: | ||||
| 		return reflect.ValueOf(input).IsNil() | ||||
| 	default: | ||||
| 		return false | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func getSingleImpl(node any, decodedToken string, nameProvider *swag.NameProvider) (any, reflect.Kind, error) { | ||||
| 	rValue := reflect.Indirect(reflect.ValueOf(node)) | ||||
| 	kind := rValue.Kind() | ||||
| 	if isNil(node) { | ||||
| 		return nil, kind, fmt.Errorf("nil value has not field %q", decodedToken) | ||||
| 	} | ||||
|  | ||||
| 	if rValue.Type().Implements(jsonPointableType) { | ||||
| 		r, err := node.(JSONPointable).JSONLookup(decodedToken) | ||||
| 	switch typed := node.(type) { | ||||
| 	case JSONPointable: | ||||
| 		r, err := typed.JSONLookup(decodedToken) | ||||
| 		if err != nil { | ||||
| 			return nil, kind, err | ||||
| 		} | ||||
| 		return r, kind, nil | ||||
| 	case *any: // case of a pointer to interface, that is not resolved by reflect.Indirect | ||||
| 		return getSingleImpl(*typed, decodedToken, nameProvider) | ||||
| 	} | ||||
|  | ||||
| 	switch kind { | ||||
| 	switch kind { //nolint:exhaustive | ||||
| 	case reflect.Struct: | ||||
| 		nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) | ||||
| 		if !ok { | ||||
| @@ -159,7 +179,7 @@ func getSingleImpl(node interface{}, decodedToken string, nameProvider *swag.Nam | ||||
|  | ||||
| } | ||||
|  | ||||
| func setSingleImpl(node, data interface{}, decodedToken string, nameProvider *swag.NameProvider) error { | ||||
| func setSingleImpl(node, data any, decodedToken string, nameProvider *swag.NameProvider) error { | ||||
| 	rValue := reflect.Indirect(reflect.ValueOf(node)) | ||||
|  | ||||
| 	if ns, ok := node.(JSONSetable); ok { // pointer impl | ||||
| @@ -170,7 +190,7 @@ func setSingleImpl(node, data interface{}, decodedToken string, nameProvider *sw | ||||
| 		return node.(JSONSetable).JSONSet(decodedToken, data) | ||||
| 	} | ||||
|  | ||||
| 	switch rValue.Kind() { | ||||
| 	switch rValue.Kind() { //nolint:exhaustive | ||||
| 	case reflect.Struct: | ||||
| 		nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) | ||||
| 		if !ok { | ||||
| @@ -210,7 +230,7 @@ func setSingleImpl(node, data interface{}, decodedToken string, nameProvider *sw | ||||
|  | ||||
| } | ||||
|  | ||||
| func (p *Pointer) get(node interface{}, nameProvider *swag.NameProvider) (interface{}, reflect.Kind, error) { | ||||
| func (p *Pointer) get(node any, nameProvider *swag.NameProvider) (any, reflect.Kind, error) { | ||||
|  | ||||
| 	if nameProvider == nil { | ||||
| 		nameProvider = swag.DefaultJSONNameProvider | ||||
| @@ -231,8 +251,7 @@ func (p *Pointer) get(node interface{}, nameProvider *swag.NameProvider) (interf | ||||
| 		if err != nil { | ||||
| 			return nil, knd, err | ||||
| 		} | ||||
| 		node, kind = r, knd | ||||
|  | ||||
| 		node = r | ||||
| 	} | ||||
|  | ||||
| 	rValue := reflect.ValueOf(node) | ||||
| @@ -241,11 +260,11 @@ func (p *Pointer) get(node interface{}, nameProvider *swag.NameProvider) (interf | ||||
| 	return node, kind, nil | ||||
| } | ||||
|  | ||||
| func (p *Pointer) set(node, data interface{}, nameProvider *swag.NameProvider) error { | ||||
| func (p *Pointer) set(node, data any, nameProvider *swag.NameProvider) error { | ||||
| 	knd := reflect.ValueOf(node).Kind() | ||||
|  | ||||
| 	if knd != reflect.Ptr && knd != reflect.Struct && knd != reflect.Map && knd != reflect.Slice && knd != reflect.Array { | ||||
| 		return fmt.Errorf("only structs, pointers, maps and slices are supported for setting values") | ||||
| 		return errors.New("only structs, pointers, maps and slices are supported for setting values") | ||||
| 	} | ||||
|  | ||||
| 	if nameProvider == nil { | ||||
| @@ -284,7 +303,7 @@ func (p *Pointer) set(node, data interface{}, nameProvider *swag.NameProvider) e | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		switch kind { | ||||
| 		switch kind { //nolint:exhaustive | ||||
| 		case reflect.Struct: | ||||
| 			nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) | ||||
| 			if !ok { | ||||
| @@ -363,6 +382,128 @@ func (p *Pointer) String() string { | ||||
| 	return pointerString | ||||
| } | ||||
|  | ||||
| func (p *Pointer) Offset(document string) (int64, error) { | ||||
| 	dec := json.NewDecoder(strings.NewReader(document)) | ||||
| 	var offset int64 | ||||
| 	for _, ttk := range p.DecodedTokens() { | ||||
| 		tk, err := dec.Token() | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		switch tk := tk.(type) { | ||||
| 		case json.Delim: | ||||
| 			switch tk { | ||||
| 			case '{': | ||||
| 				offset, err = offsetSingleObject(dec, ttk) | ||||
| 				if err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			case '[': | ||||
| 				offset, err = offsetSingleArray(dec, ttk) | ||||
| 				if err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			default: | ||||
| 				return 0, fmt.Errorf("invalid token %#v", tk) | ||||
| 			} | ||||
| 		default: | ||||
| 			return 0, fmt.Errorf("invalid token %#v", tk) | ||||
| 		} | ||||
| 	} | ||||
| 	return offset, nil | ||||
| } | ||||
|  | ||||
| func offsetSingleObject(dec *json.Decoder, decodedToken string) (int64, error) { | ||||
| 	for dec.More() { | ||||
| 		offset := dec.InputOffset() | ||||
| 		tk, err := dec.Token() | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		switch tk := tk.(type) { | ||||
| 		case json.Delim: | ||||
| 			switch tk { | ||||
| 			case '{': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			case '[': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			} | ||||
| 		case string: | ||||
| 			if tk == decodedToken { | ||||
| 				return offset, nil | ||||
| 			} | ||||
| 		default: | ||||
| 			return 0, fmt.Errorf("invalid token %#v", tk) | ||||
| 		} | ||||
| 	} | ||||
| 	return 0, fmt.Errorf("token reference %q not found", decodedToken) | ||||
| } | ||||
|  | ||||
| func offsetSingleArray(dec *json.Decoder, decodedToken string) (int64, error) { | ||||
| 	idx, err := strconv.Atoi(decodedToken) | ||||
| 	if err != nil { | ||||
| 		return 0, fmt.Errorf("token reference %q is not a number: %v", decodedToken, err) | ||||
| 	} | ||||
| 	var i int | ||||
| 	for i = 0; i < idx && dec.More(); i++ { | ||||
| 		tk, err := dec.Token() | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
|  | ||||
| 		if delim, isDelim := tk.(json.Delim); isDelim { | ||||
| 			switch delim { | ||||
| 			case '{': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			case '[': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if !dec.More() { | ||||
| 		return 0, fmt.Errorf("token reference %q not found", decodedToken) | ||||
| 	} | ||||
| 	return dec.InputOffset(), nil | ||||
| } | ||||
|  | ||||
| // drainSingle drains a single level of object or array. | ||||
| // The decoder has to guarantee the beginning delim (i.e. '{' or '[') has been consumed. | ||||
| func drainSingle(dec *json.Decoder) error { | ||||
| 	for dec.More() { | ||||
| 		tk, err := dec.Token() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if delim, isDelim := tk.(json.Delim); isDelim { | ||||
| 			switch delim { | ||||
| 			case '{': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			case '[': | ||||
| 				if err = drainSingle(dec); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Consumes the ending delim | ||||
| 	if _, err := dec.Token(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Specific JSON pointer encoding here | ||||
| // ~0 => ~ | ||||
| // ~1 => / | ||||
| @@ -377,14 +518,14 @@ const ( | ||||
|  | ||||
| // Unescape unescapes a json pointer reference token string to the original representation | ||||
| func Unescape(token string) string { | ||||
| 	step1 := strings.Replace(token, encRefTok1, decRefTok1, -1) | ||||
| 	step2 := strings.Replace(step1, encRefTok0, decRefTok0, -1) | ||||
| 	step1 := strings.ReplaceAll(token, encRefTok1, decRefTok1) | ||||
| 	step2 := strings.ReplaceAll(step1, encRefTok0, decRefTok0) | ||||
| 	return step2 | ||||
| } | ||||
|  | ||||
| // Escape escapes a pointer reference token string | ||||
| func Escape(token string) string { | ||||
| 	step1 := strings.Replace(token, decRefTok0, encRefTok0, -1) | ||||
| 	step2 := strings.Replace(step1, decRefTok1, encRefTok1, -1) | ||||
| 	step1 := strings.ReplaceAll(token, decRefTok0, encRefTok0) | ||||
| 	step2 := strings.ReplaceAll(step1, decRefTok1, encRefTok1) | ||||
| 	return step2 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Eduard Filip
					Eduard Filip