mirror of
https://github.com/gusaul/grpcox.git
synced 2025-04-22 14:25:37 +00:00
fix: 🐛 prevent reflection headers to be stored in the server
This commit is contained in:
parent
6feae4127c
commit
80ef2d48e6
|
@ -38,10 +38,15 @@ type Resource struct {
|
||||||
md metadata.MD
|
md metadata.MD
|
||||||
}
|
}
|
||||||
|
|
||||||
//openDescriptor - use it to reflect server descriptor
|
// openDescriptor - use it to reflect server descriptor
|
||||||
func (r *Resource) openDescriptor() error {
|
func (r *Resource) openDescriptor(reflectHeaders []string) error {
|
||||||
ctx := context.Background()
|
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))
|
r.refClient = grpcreflect.NewClient(refCtx, reflectpb.NewServerReflectionClient(r.clientConn))
|
||||||
|
|
||||||
// if no protos available use server reflection
|
// if no protos available use server reflection
|
||||||
|
@ -73,7 +78,7 @@ func (r *Resource) openDescriptor() error {
|
||||||
return err
|
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() {
|
func (r *Resource) closeDescriptor() {
|
||||||
done := make(chan int)
|
done := make(chan int)
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -95,8 +100,8 @@ func (r *Resource) closeDescriptor() {
|
||||||
// List - To list all services exposed by a server
|
// List - To list all services exposed by a server
|
||||||
// symbol can be "" to list all available services
|
// symbol can be "" to list all available services
|
||||||
// symbol also can be service name to list all available method
|
// symbol also can be service name to list all available method
|
||||||
func (r *Resource) List(symbol string) ([]string, error) {
|
func (r *Resource) List(symbol string, reflectHeaders []string) ([]string, error) {
|
||||||
err := r.openDescriptor()
|
err := r.openDescriptor(reflectHeaders)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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 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.
|
// 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) {
|
func (r *Resource) Describe(symbol string) (string, string, error) {
|
||||||
err := r.openDescriptor()
|
err := r.openDescriptor(nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
@ -196,7 +201,7 @@ func (r *Resource) Describe(symbol string) (string, string, error) {
|
||||||
|
|
||||||
// Invoke - invoking gRPC function
|
// Invoke - invoking gRPC function
|
||||||
func (r *Resource) Invoke(ctx context.Context, metadata []string, symbol string, in io.Reader) (string, time.Duration, error) {
|
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 {
|
if err != nil {
|
||||||
return "", 0, err
|
return "", 0, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,15 +88,13 @@ func (h *Handler) getLists(w http.ResponseWriter, r *http.Request) {
|
||||||
metadataStr = fmt.Sprintf("%s:", m)
|
metadataStr = fmt.Sprintf("%s:", m)
|
||||||
}
|
}
|
||||||
|
|
||||||
h.g.SetReflectHeaders(metadata...)
|
|
||||||
|
|
||||||
res, err := h.g.GetResource(context.Background(), host, !useTLS, restart)
|
res, err := h.g.GetResource(context.Background(), host, !useTLS, restart)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeError(w, err)
|
writeError(w, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := res.List(service)
|
result, err := res.List(service, metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeError(w, err)
|
writeError(w, err)
|
||||||
return
|
return
|
||||||
|
@ -155,7 +153,7 @@ func (h *Handler) getListsWithProto(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := res.List(service)
|
result, err := res.List(service, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writeError(w, err)
|
writeError(w, err)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue
Block a user