1
0
mirror of https://github.com/gusaul/grpcox.git synced 2024-12-25 09:50:10 +00:00

fix: 🐛 prevent reflection headers to be stored in the server

This commit is contained in:
Petra 2023-07-16 15:02:43 +07:00
parent 6feae4127c
commit 80ef2d48e6
2 changed files with 15 additions and 12 deletions

View File

@ -38,10 +38,15 @@ type Resource struct {
md metadata.MD
}
//openDescriptor - use it to reflect server descriptor
func (r *Resource) openDescriptor() error {
// openDescriptor - use it to reflect server descriptor
func (r *Resource) openDescriptor(reflectHeaders []string) error {
ctx := context.Background()
refCtx := metadata.NewOutgoingContext(ctx, r.md)
outgoingMD := r.md.Copy()
md := grpcurl.MetadataFromHeaders(reflectHeaders)
for k, v := range md {
outgoingMD.Append(k, v...)
}
refCtx := metadata.NewOutgoingContext(ctx, outgoingMD)
r.refClient = grpcreflect.NewClient(refCtx, reflectpb.NewServerReflectionClient(r.clientConn))
// if no protos available use server reflection
@ -73,7 +78,7 @@ func (r *Resource) openDescriptor() error {
return err
}
//closeDescriptor - please ensure to always close after open in the same flow
// closeDescriptor - please ensure to always close after open in the same flow
func (r *Resource) closeDescriptor() {
done := make(chan int)
go func() {
@ -95,8 +100,8 @@ func (r *Resource) closeDescriptor() {
// List - To list all services exposed by a server
// symbol can be "" to list all available services
// symbol also can be service name to list all available method
func (r *Resource) List(symbol string) ([]string, error) {
err := r.openDescriptor()
func (r *Resource) List(symbol string, reflectHeaders []string) ([]string, error) {
err := r.openDescriptor(reflectHeaders)
if err != nil {
return nil, err
}
@ -137,7 +142,7 @@ func (r *Resource) List(symbol string) ([]string, error) {
// It also prints a description of that symbol, in the form of snippets of proto source.
// It won't necessarily be the original source that defined the element, but it will be equivalent.
func (r *Resource) Describe(symbol string) (string, string, error) {
err := r.openDescriptor()
err := r.openDescriptor(nil)
if err != nil {
return "", "", err
}
@ -196,7 +201,7 @@ func (r *Resource) Describe(symbol string) (string, string, error) {
// Invoke - invoking gRPC function
func (r *Resource) Invoke(ctx context.Context, metadata []string, symbol string, in io.Reader) (string, time.Duration, error) {
err := r.openDescriptor()
err := r.openDescriptor(nil)
if err != nil {
return "", 0, err
}

View File

@ -88,15 +88,13 @@ func (h *Handler) getLists(w http.ResponseWriter, r *http.Request) {
metadataStr = fmt.Sprintf("%s:", m)
}
h.g.SetReflectHeaders(metadata...)
res, err := h.g.GetResource(context.Background(), host, !useTLS, restart)
if err != nil {
writeError(w, err)
return
}
result, err := res.List(service)
result, err := res.List(service, metadata)
if err != nil {
writeError(w, err)
return
@ -155,7 +153,7 @@ func (h *Handler) getListsWithProto(w http.ResponseWriter, r *http.Request) {
return
}
result, err := res.List(service)
result, err := res.List(service, nil)
if err != nil {
writeError(w, err)
return