diff options
| author | 2024-08-26 18:05:54 +0200 | |
|---|---|---|
| committer | 2024-08-26 18:05:54 +0200 | |
| commit | 28d57d1f13ee61a6ff83ce4beaf238139d20bbac (patch) | |
| tree | 7946abb44b21f9e2f4267146711760a911072c9b /vendor/github.com/grpc-ecosystem/grpc-gateway/v2 | |
| parent | [chore]: Bump github.com/prometheus/client_golang from 1.20.0 to 1.20.2 (#3239) (diff) | |
| download | gotosocial-28d57d1f13ee61a6ff83ce4beaf238139d20bbac.tar.xz | |
[chore] Bump all otel deps (#3241)
Diffstat (limited to 'vendor/github.com/grpc-ecosystem/grpc-gateway/v2')
9 files changed, 172 insertions, 69 deletions
| diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel index 78d7c9f5c..a65d88eb8 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel @@ -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", diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go index 31553e784..2f2b34243 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go @@ -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) +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go index 230cac7b8..01f573419 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go @@ -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 { diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go index 5e14cf8b0..9f50a569e 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go @@ -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  	}  } diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go index d6aa82578..fe52081ab 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_json.go @@ -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) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go index 51b8247da..8376d1e0e 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshal_jsonpb.go @@ -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 { diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go index a714de024..0b051e6e8 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/marshaler_registry.go @@ -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 { diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go index ed9a7e438..60c2065dd 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go @@ -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 +	} +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go index 8f90d15a5..e54507145 100644 --- a/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/pattern.go @@ -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  		} | 
