mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 15:32:24 -05:00 
			
		
		
		
	[chore] Bump all otel deps (#3241)
This commit is contained in:
		
					parent
					
						
							
								291bb68b47
							
						
					
				
			
			
				commit
				
					
						28d57d1f13
					
				
			
		
					 193 changed files with 13714 additions and 2346 deletions
				
			
		
							
								
								
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -73,7 +73,7 @@ go_test( | |||
|         "@org_golang_google_genproto_googleapis_api//httpbody", | ||||
|         "@org_golang_google_genproto_googleapis_rpc//errdetails", | ||||
|         "@org_golang_google_genproto_googleapis_rpc//status", | ||||
|         "@org_golang_google_grpc//:go_default_library", | ||||
|         "@org_golang_google_grpc//:grpc", | ||||
|         "@org_golang_google_grpc//codes", | ||||
|         "@org_golang_google_grpc//health/grpc_health_v1", | ||||
|         "@org_golang_google_grpc//metadata", | ||||
|  |  | |||
							
								
								
									
										28
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -49,6 +49,7 @@ var malformedHTTPHeaders = map[string]struct{}{ | |||
| type ( | ||||
| 	rpcMethodKey       struct{} | ||||
| 	httpPathPatternKey struct{} | ||||
| 	httpPatternKey     struct{} | ||||
| 
 | ||||
| 	AnnotateContextOption func(ctx context.Context) context.Context | ||||
| ) | ||||
|  | @ -148,6 +149,12 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM | |||
| 	var pairs []string | ||||
| 	for key, vals := range req.Header { | ||||
| 		key = textproto.CanonicalMIMEHeaderKey(key) | ||||
| 		switch key { | ||||
| 		case xForwardedFor, xForwardedHost: | ||||
| 			// Handled separately below | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		for _, val := range vals { | ||||
| 			// For backwards-compatibility, pass through 'authorization' header with no prefix. | ||||
| 			if key == "Authorization" { | ||||
|  | @ -181,18 +188,17 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM | |||
| 		pairs = append(pairs, strings.ToLower(xForwardedHost), req.Host) | ||||
| 	} | ||||
| 
 | ||||
| 	xff := req.Header.Values(xForwardedFor) | ||||
| 	if addr := req.RemoteAddr; addr != "" { | ||||
| 		if remoteIP, _, err := net.SplitHostPort(addr); err == nil { | ||||
| 			if fwd := req.Header.Get(xForwardedFor); fwd == "" { | ||||
| 				pairs = append(pairs, strings.ToLower(xForwardedFor), remoteIP) | ||||
| 			} else { | ||||
| 				pairs = append(pairs, strings.ToLower(xForwardedFor), fmt.Sprintf("%s, %s", fwd, remoteIP)) | ||||
| 			} | ||||
| 			xff = append(xff, remoteIP) | ||||
| 		} | ||||
| 	} | ||||
| 	if len(xff) > 0 { | ||||
| 		pairs = append(pairs, strings.ToLower(xForwardedFor), strings.Join(xff, ", ")) | ||||
| 	} | ||||
| 
 | ||||
| 	if timeout != 0 { | ||||
| 		//nolint:govet  // The context outlives this function | ||||
| 		ctx, _ = context.WithTimeout(ctx, timeout) | ||||
| 	} | ||||
| 	if len(pairs) == 0 { | ||||
|  | @ -399,3 +405,13 @@ func HTTPPathPattern(ctx context.Context) (string, bool) { | |||
| func withHTTPPathPattern(ctx context.Context, httpPathPattern string) context.Context { | ||||
| 	return context.WithValue(ctx, httpPathPatternKey{}, httpPathPattern) | ||||
| } | ||||
| 
 | ||||
| // HTTPPattern returns the HTTP path pattern struct relating to the HTTP handler, if one exists. | ||||
| func HTTPPattern(ctx context.Context) (Pattern, bool) { | ||||
| 	v, ok := ctx.Value(httpPatternKey{}).(Pattern) | ||||
| 	return v, ok | ||||
| } | ||||
| 
 | ||||
| func withHTTPPattern(ctx context.Context, httpPattern Pattern) context.Context { | ||||
| 	return context.WithValue(ctx, httpPatternKey{}, httpPattern) | ||||
| } | ||||
|  |  | |||
							
								
								
									
										26
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -71,7 +71,7 @@ func HTTPStatusFromCode(code codes.Code) int { | |||
| 	case codes.DataLoss: | ||||
| 		return http.StatusInternalServerError | ||||
| 	default: | ||||
| 		grpclog.Infof("Unknown gRPC error code: %v", code) | ||||
| 		grpclog.Warningf("Unknown gRPC error code: %v", code) | ||||
| 		return http.StatusInternalServerError | ||||
| 	} | ||||
| } | ||||
|  | @ -93,6 +93,7 @@ func HTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.R | |||
| func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) { | ||||
| 	// return Internal when Marshal failed | ||||
| 	const fallback = `{"code": 13, "message": "failed to marshal error message"}` | ||||
| 	const fallbackRewriter = `{"code": 13, "message": "failed to rewrite error message"}` | ||||
| 
 | ||||
| 	var customStatus *HTTPStatusError | ||||
| 	if errors.As(err, &customStatus) { | ||||
|  | @ -100,31 +101,40 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh | |||
| 	} | ||||
| 
 | ||||
| 	s := status.Convert(err) | ||||
| 	pb := s.Proto() | ||||
| 
 | ||||
| 	w.Header().Del("Trailer") | ||||
| 	w.Header().Del("Transfer-Encoding") | ||||
| 
 | ||||
| 	contentType := marshaler.ContentType(pb) | ||||
| 	respRw, err := mux.forwardResponseRewriter(ctx, s.Proto()) | ||||
| 	if err != nil { | ||||
| 		grpclog.Errorf("Failed to rewrite error message %q: %v", s, err) | ||||
| 		w.WriteHeader(http.StatusInternalServerError) | ||||
| 		if _, err := io.WriteString(w, fallbackRewriter); err != nil { | ||||
| 			grpclog.Errorf("Failed to write response: %v", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	contentType := marshaler.ContentType(respRw) | ||||
| 	w.Header().Set("Content-Type", contentType) | ||||
| 
 | ||||
| 	if s.Code() == codes.Unauthenticated { | ||||
| 		w.Header().Set("WWW-Authenticate", s.Message()) | ||||
| 	} | ||||
| 
 | ||||
| 	buf, merr := marshaler.Marshal(pb) | ||||
| 	buf, merr := marshaler.Marshal(respRw) | ||||
| 	if merr != nil { | ||||
| 		grpclog.Infof("Failed to marshal error message %q: %v", s, merr) | ||||
| 		grpclog.Errorf("Failed to marshal error message %q: %v", s, merr) | ||||
| 		w.WriteHeader(http.StatusInternalServerError) | ||||
| 		if _, err := io.WriteString(w, fallback); err != nil { | ||||
| 			grpclog.Infof("Failed to write response: %v", err) | ||||
| 			grpclog.Errorf("Failed to write response: %v", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	md, ok := ServerMetadataFromContext(ctx) | ||||
| 	if !ok { | ||||
| 		grpclog.Infof("Failed to extract ServerMetadata from context") | ||||
| 		grpclog.Error("Failed to extract ServerMetadata from context") | ||||
| 	} | ||||
| 
 | ||||
| 	handleForwardResponseServerMetadata(w, mux, md) | ||||
|  | @ -148,7 +158,7 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh | |||
| 
 | ||||
| 	w.WriteHeader(st) | ||||
| 	if _, err := w.Write(buf); err != nil { | ||||
| 		grpclog.Infof("Failed to write response: %v", err) | ||||
| 		grpclog.Errorf("Failed to write response: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if doForwardTrailers { | ||||
|  |  | |||
							
								
								
									
										76
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -3,9 +3,11 @@ package runtime | |||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"net/textproto" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"google.golang.org/genproto/googleapis/api/httpbody" | ||||
|  | @ -17,16 +19,10 @@ import ( | |||
| 
 | ||||
| // ForwardResponseStream forwards the stream from gRPC server to REST client. | ||||
| func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { | ||||
| 	f, ok := w.(http.Flusher) | ||||
| 	if !ok { | ||||
| 		grpclog.Infof("Flush not supported in %T", w) | ||||
| 		http.Error(w, "unexpected type of web server", http.StatusInternalServerError) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	rc := http.NewResponseController(w) | ||||
| 	md, ok := ServerMetadataFromContext(ctx) | ||||
| 	if !ok { | ||||
| 		grpclog.Infof("Failed to extract ServerMetadata from context") | ||||
| 		grpclog.Error("Failed to extract ServerMetadata from context") | ||||
| 		http.Error(w, "unexpected error", http.StatusInternalServerError) | ||||
| 		return | ||||
| 	} | ||||
|  | @ -60,20 +56,27 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal | |||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		respRw, err := mux.forwardResponseRewriter(ctx, resp) | ||||
| 		if err != nil { | ||||
| 			grpclog.Errorf("Rewrite error: %v", err) | ||||
| 			handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		if !wroteHeader { | ||||
| 			w.Header().Set("Content-Type", marshaler.ContentType(resp)) | ||||
| 			w.Header().Set("Content-Type", marshaler.ContentType(respRw)) | ||||
| 		} | ||||
| 
 | ||||
| 		var buf []byte | ||||
| 		httpBody, isHTTPBody := resp.(*httpbody.HttpBody) | ||||
| 		httpBody, isHTTPBody := respRw.(*httpbody.HttpBody) | ||||
| 		switch { | ||||
| 		case resp == nil: | ||||
| 		case respRw == nil: | ||||
| 			buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response"))) | ||||
| 		case isHTTPBody: | ||||
| 			buf = httpBody.GetData() | ||||
| 		default: | ||||
| 			result := map[string]interface{}{"result": resp} | ||||
| 			if rb, ok := resp.(responseBody); ok { | ||||
| 			result := map[string]interface{}{"result": respRw} | ||||
| 			if rb, ok := respRw.(responseBody); ok { | ||||
| 				result["result"] = rb.XXX_ResponseBody() | ||||
| 			} | ||||
| 
 | ||||
|  | @ -81,20 +84,29 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal | |||
| 		} | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			grpclog.Infof("Failed to marshal response chunk: %v", err) | ||||
| 			grpclog.Errorf("Failed to marshal response chunk: %v", err) | ||||
| 			handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) | ||||
| 			return | ||||
| 		} | ||||
| 		if _, err := w.Write(buf); err != nil { | ||||
| 			grpclog.Infof("Failed to send response chunk: %v", err) | ||||
| 			grpclog.Errorf("Failed to send response chunk: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		wroteHeader = true | ||||
| 		if _, err := w.Write(delimiter); err != nil { | ||||
| 			grpclog.Infof("Failed to send delimiter chunk: %v", err) | ||||
| 			grpclog.Errorf("Failed to send delimiter chunk: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		err = rc.Flush() | ||||
| 		if err != nil { | ||||
| 			if errors.Is(err, http.ErrNotSupported) { | ||||
| 				grpclog.Errorf("Flush not supported in %T", w) | ||||
| 				http.Error(w, "unexpected type of web server", http.StatusInternalServerError) | ||||
| 				return | ||||
| 			} | ||||
| 			grpclog.Errorf("Failed to flush response to client: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		f.Flush() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -136,7 +148,7 @@ type responseBody interface { | |||
| func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { | ||||
| 	md, ok := ServerMetadataFromContext(ctx) | ||||
| 	if !ok { | ||||
| 		grpclog.Infof("Failed to extract ServerMetadata from context") | ||||
| 		grpclog.Error("Failed to extract ServerMetadata from context") | ||||
| 	} | ||||
| 
 | ||||
| 	handleForwardResponseServerMetadata(w, mux, md) | ||||
|  | @ -160,21 +172,30 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha | |||
| 		HTTPError(ctx, mux, marshaler, w, req, err) | ||||
| 		return | ||||
| 	} | ||||
| 	respRw, err := mux.forwardResponseRewriter(ctx, resp) | ||||
| 	if err != nil { | ||||
| 		grpclog.Errorf("Rewrite error: %v", err) | ||||
| 		HTTPError(ctx, mux, marshaler, w, req, err) | ||||
| 		return | ||||
| 	} | ||||
| 	var buf []byte | ||||
| 	var err error | ||||
| 	if rb, ok := resp.(responseBody); ok { | ||||
| 	if rb, ok := respRw.(responseBody); ok { | ||||
| 		buf, err = marshaler.Marshal(rb.XXX_ResponseBody()) | ||||
| 	} else { | ||||
| 		buf, err = marshaler.Marshal(resp) | ||||
| 		buf, err = marshaler.Marshal(respRw) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		grpclog.Infof("Marshal error: %v", err) | ||||
| 		grpclog.Errorf("Marshal error: %v", err) | ||||
| 		HTTPError(ctx, mux, marshaler, w, req, err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if !doForwardTrailers { | ||||
| 		w.Header().Set("Content-Length", strconv.Itoa(len(buf))) | ||||
| 	} | ||||
| 
 | ||||
| 	if _, err = w.Write(buf); err != nil { | ||||
| 		grpclog.Infof("Failed to write response: %v", err) | ||||
| 		grpclog.Errorf("Failed to write response: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if doForwardTrailers { | ||||
|  | @ -193,8 +214,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re | |||
| 	} | ||||
| 	for _, opt := range opts { | ||||
| 		if err := opt(ctx, w, resp); err != nil { | ||||
| 			grpclog.Infof("Error handling ForwardResponseOptions: %v", err) | ||||
| 			return err | ||||
| 			return fmt.Errorf("error handling ForwardResponseOptions: %w", err) | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
|  | @ -209,15 +229,15 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar | |||
| 	} | ||||
| 	buf, err := marshaler.Marshal(msg) | ||||
| 	if err != nil { | ||||
| 		grpclog.Infof("Failed to marshal an error: %v", err) | ||||
| 		grpclog.Errorf("Failed to marshal an error: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	if _, err := w.Write(buf); err != nil { | ||||
| 		grpclog.Infof("Failed to notify error to client: %v", err) | ||||
| 		grpclog.Errorf("Failed to notify error to client: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	if _, err := w.Write(delimiter); err != nil { | ||||
| 		grpclog.Infof("Failed to send delimiter chunk: %v", err) | ||||
| 		grpclog.Errorf("Failed to send delimiter chunk: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| } | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -24,6 +24,11 @@ func (j *JSONBuiltin) Marshal(v interface{}) ([]byte, error) { | |||
| 	return json.Marshal(v) | ||||
| } | ||||
| 
 | ||||
| // MarshalIndent is like Marshal but applies Indent to format the output | ||||
| func (j *JSONBuiltin) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { | ||||
| 	return json.MarshalIndent(v, prefix, indent) | ||||
| } | ||||
| 
 | ||||
| // Unmarshal unmarshals JSON data into "v". | ||||
| func (j *JSONBuiltin) Unmarshal(data []byte, v interface{}) error { | ||||
| 	return json.Unmarshal(data, v) | ||||
|  |  | |||
							
								
								
									
										15
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -30,10 +30,6 @@ func (*JSONPb) ContentType(_ interface{}) string { | |||
| 
 | ||||
| // Marshal marshals "v" into JSON. | ||||
| func (j *JSONPb) Marshal(v interface{}) ([]byte, error) { | ||||
| 	if _, ok := v.(proto.Message); !ok { | ||||
| 		return j.marshalNonProtoField(v) | ||||
| 	} | ||||
| 
 | ||||
| 	var buf bytes.Buffer | ||||
| 	if err := j.marshalTo(&buf, v); err != nil { | ||||
| 		return nil, err | ||||
|  | @ -48,9 +44,17 @@ func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error { | |||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		if j.Indent != "" { | ||||
| 			b := &bytes.Buffer{} | ||||
| 			if err := json.Indent(b, buf, "", j.Indent); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			buf = b.Bytes() | ||||
| 		} | ||||
| 		_, err = w.Write(buf) | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	b, err := j.MarshalOptions.Marshal(p) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|  | @ -150,9 +154,6 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { | |||
| 			} | ||||
| 			m[fmt.Sprintf("%v", k.Interface())] = (*json.RawMessage)(&buf) | ||||
| 		} | ||||
| 		if j.Indent != "" { | ||||
| 			return json.MarshalIndent(m, "", j.Indent) | ||||
| 		} | ||||
| 		return json.Marshal(m) | ||||
| 	} | ||||
| 	if enum, ok := rv.Interface().(protoEnum); ok && !j.UseEnumNumbers { | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -46,7 +46,7 @@ func MarshalerForRequest(mux *ServeMux, r *http.Request) (inbound Marshaler, out | |||
| 	for _, contentTypeVal := range r.Header[contentTypeHeader] { | ||||
| 		contentType, _, err := mime.ParseMediaType(contentTypeVal) | ||||
| 		if err != nil { | ||||
| 			grpclog.Infof("Failed to parse Content-Type %s: %v", contentTypeVal, err) | ||||
| 			grpclog.Errorf("Failed to parse Content-Type %s: %v", contentTypeVal, err) | ||||
| 			continue | ||||
| 		} | ||||
| 		if m, ok := mux.marshalers.mimeMap[contentType]; ok { | ||||
|  |  | |||
							
								
								
									
										69
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -48,12 +48,19 @@ var encodedPathSplitter = regexp.MustCompile("(/|%2F)") | |||
| // A HandlerFunc handles a specific pair of path pattern and HTTP method. | ||||
| type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) | ||||
| 
 | ||||
| // A Middleware handler wraps another HandlerFunc to do some pre- and/or post-processing of the request. This is used as an alternative to gRPC interceptors when using the direct-to-implementation | ||||
| // registration methods. It is generally recommended to use gRPC client or server interceptors instead | ||||
| // where possible. | ||||
| type Middleware func(HandlerFunc) HandlerFunc | ||||
| 
 | ||||
| // ServeMux is a request multiplexer for grpc-gateway. | ||||
| // It matches http requests to patterns and invokes the corresponding handler. | ||||
| type ServeMux struct { | ||||
| 	// handlers maps HTTP method to a list of handlers. | ||||
| 	handlers                  map[string][]handler | ||||
| 	middlewares               []Middleware | ||||
| 	forwardResponseOptions    []func(context.Context, http.ResponseWriter, proto.Message) error | ||||
| 	forwardResponseRewriter   ForwardResponseRewriter | ||||
| 	marshalers                marshalerRegistry | ||||
| 	incomingHeaderMatcher     HeaderMatcherFunc | ||||
| 	outgoingHeaderMatcher     HeaderMatcherFunc | ||||
|  | @ -69,6 +76,24 @@ type ServeMux struct { | |||
| // ServeMuxOption is an option that can be given to a ServeMux on construction. | ||||
| type ServeMuxOption func(*ServeMux) | ||||
| 
 | ||||
| // ForwardResponseRewriter is the signature of a function that is capable of rewriting messages | ||||
| // before they are forwarded in a unary, stream, or error response. | ||||
| type ForwardResponseRewriter func(ctx context.Context, response proto.Message) (any, error) | ||||
| 
 | ||||
| // WithForwardResponseRewriter returns a ServeMuxOption that allows for implementers to insert logic | ||||
| // that can rewrite the final response before it is forwarded. | ||||
| // | ||||
| // The response rewriter function is called during unary message forwarding, stream message | ||||
| // forwarding and when errors are being forwarded. | ||||
| // | ||||
| // NOTE: Using this option will likely make what is generated by `protoc-gen-openapiv2` incorrect. | ||||
| // Since this option involves making runtime changes to the response shape or type. | ||||
| func WithForwardResponseRewriter(fwdResponseRewriter ForwardResponseRewriter) ServeMuxOption { | ||||
| 	return func(sm *ServeMux) { | ||||
| 		sm.forwardResponseRewriter = fwdResponseRewriter | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption. | ||||
| // | ||||
| // forwardResponseOption is an option that will be called on the relevant context.Context, | ||||
|  | @ -89,6 +114,15 @@ func WithUnescapingMode(mode UnescapingMode) ServeMuxOption { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // WithMiddlewares sets server middleware for all handlers. This is useful as an alternative to gRPC | ||||
| // interceptors when using the direct-to-implementation registration methods and cannot rely | ||||
| // on gRPC interceptors. It's recommended to use gRPC interceptors instead if possible. | ||||
| func WithMiddlewares(middlewares ...Middleware) ServeMuxOption { | ||||
| 	return func(serveMux *ServeMux) { | ||||
| 		serveMux.middlewares = append(serveMux.middlewares, middlewares...) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters. | ||||
| // Configuring this will mean the generated OpenAPI output is no longer correct, and it should be | ||||
| // done with careful consideration. | ||||
|  | @ -277,13 +311,14 @@ func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMux | |||
| // NewServeMux returns a new ServeMux whose internal mapping is empty. | ||||
| func NewServeMux(opts ...ServeMuxOption) *ServeMux { | ||||
| 	serveMux := &ServeMux{ | ||||
| 		handlers:               make(map[string][]handler), | ||||
| 		forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), | ||||
| 		marshalers:             makeMarshalerMIMERegistry(), | ||||
| 		errorHandler:           DefaultHTTPErrorHandler, | ||||
| 		streamErrorHandler:     DefaultStreamErrorHandler, | ||||
| 		routingErrorHandler:    DefaultRoutingErrorHandler, | ||||
| 		unescapingMode:         UnescapingModeDefault, | ||||
| 		handlers:                make(map[string][]handler), | ||||
| 		forwardResponseOptions:  make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), | ||||
| 		forwardResponseRewriter: func(ctx context.Context, response proto.Message) (any, error) { return response, nil }, | ||||
| 		marshalers:              makeMarshalerMIMERegistry(), | ||||
| 		errorHandler:            DefaultHTTPErrorHandler, | ||||
| 		streamErrorHandler:      DefaultStreamErrorHandler, | ||||
| 		routingErrorHandler:     DefaultRoutingErrorHandler, | ||||
| 		unescapingMode:          UnescapingModeDefault, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, opt := range opts { | ||||
|  | @ -305,6 +340,9 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { | |||
| 
 | ||||
| // Handle associates "h" to the pair of HTTP method and path pattern. | ||||
| func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { | ||||
| 	if len(s.middlewares) > 0 { | ||||
| 		h = chainMiddlewares(s.middlewares)(h) | ||||
| 	} | ||||
| 	s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...) | ||||
| } | ||||
| 
 | ||||
|  | @ -405,7 +443,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		h.h(w, r, pathParams) | ||||
| 		s.handleHandler(h, w, r, pathParams) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -458,7 +496,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||
| 					s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) | ||||
| 					return | ||||
| 				} | ||||
| 				h.h(w, r, pathParams) | ||||
| 				s.handleHandler(h, w, r, pathParams) | ||||
| 				return | ||||
| 			} | ||||
| 			_, outboundMarshaler := MarshalerForRequest(s, r) | ||||
|  | @ -484,3 +522,16 @@ type handler struct { | |||
| 	pat Pattern | ||||
| 	h   HandlerFunc | ||||
| } | ||||
| 
 | ||||
| func (s *ServeMux) handleHandler(h handler, w http.ResponseWriter, r *http.Request, pathParams map[string]string) { | ||||
| 	h.h(w, r.WithContext(withHTTPPattern(r.Context(), h.pat)), pathParams) | ||||
| } | ||||
| 
 | ||||
| func chainMiddlewares(mws []Middleware) Middleware { | ||||
| 	return func(next HandlerFunc) HandlerFunc { | ||||
| 		for i := len(mws); i > 0; i-- { | ||||
| 			next = mws[i-1](next) | ||||
| 		} | ||||
| 		return next | ||||
| 	} | ||||
| } | ||||
|  |  | |||
							
								
								
									
										18
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -52,13 +52,13 @@ type Pattern struct { | |||
| // It returns an error if the given definition is invalid. | ||||
| func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) { | ||||
| 	if version != 1 { | ||||
| 		grpclog.Infof("unsupported version: %d", version) | ||||
| 		grpclog.Errorf("unsupported version: %d", version) | ||||
| 		return Pattern{}, ErrInvalidPattern | ||||
| 	} | ||||
| 
 | ||||
| 	l := len(ops) | ||||
| 	if l%2 != 0 { | ||||
| 		grpclog.Infof("odd number of ops codes: %d", l) | ||||
| 		grpclog.Errorf("odd number of ops codes: %d", l) | ||||
| 		return Pattern{}, ErrInvalidPattern | ||||
| 	} | ||||
| 
 | ||||
|  | @ -81,14 +81,14 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er | |||
| 			stack++ | ||||
| 		case utilities.OpPushM: | ||||
| 			if pushMSeen { | ||||
| 				grpclog.Infof("pushM appears twice") | ||||
| 				grpclog.Error("pushM appears twice") | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 			pushMSeen = true | ||||
| 			stack++ | ||||
| 		case utilities.OpLitPush: | ||||
| 			if op.operand < 0 || len(pool) <= op.operand { | ||||
| 				grpclog.Infof("negative literal index: %d", op.operand) | ||||
| 				grpclog.Errorf("negative literal index: %d", op.operand) | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 			if pushMSeen { | ||||
|  | @ -97,18 +97,18 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er | |||
| 			stack++ | ||||
| 		case utilities.OpConcatN: | ||||
| 			if op.operand <= 0 { | ||||
| 				grpclog.Infof("negative concat size: %d", op.operand) | ||||
| 				grpclog.Errorf("negative concat size: %d", op.operand) | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 			stack -= op.operand | ||||
| 			if stack < 0 { | ||||
| 				grpclog.Info("stack underflow") | ||||
| 				grpclog.Error("stack underflow") | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 			stack++ | ||||
| 		case utilities.OpCapture: | ||||
| 			if op.operand < 0 || len(pool) <= op.operand { | ||||
| 				grpclog.Infof("variable name index out of bound: %d", op.operand) | ||||
| 				grpclog.Errorf("variable name index out of bound: %d", op.operand) | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 			v := pool[op.operand] | ||||
|  | @ -116,11 +116,11 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er | |||
| 			vars = append(vars, v) | ||||
| 			stack-- | ||||
| 			if stack < 0 { | ||||
| 				grpclog.Infof("stack underflow") | ||||
| 				grpclog.Error("stack underflow") | ||||
| 				return Pattern{}, ErrInvalidPattern | ||||
| 			} | ||||
| 		default: | ||||
| 			grpclog.Infof("invalid opcode: %d", op.code) | ||||
| 			grpclog.Errorf("invalid opcode: %d", op.code) | ||||
| 			return Pattern{}, ErrInvalidPattern | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue