summaryrefslogtreecommitdiff
path: root/vendor/github.com/authzed/grpcutil/reflection.go
blob: 092b568026b14da09c13e38b5af9333afd5fdda5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package grpcutil

import (
	"google.golang.org/grpc"
	"google.golang.org/grpc/reflection"
	rpbv1 "google.golang.org/grpc/reflection/grpc_reflection_v1"
	"google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
)

// NewAuthlessReflectionInterceptor creates a proxy GRPCServer which automatically converts
// ServerReflectionServer instances to ones that skip grpc auth middleware.
//
// change:
// reflection.Register(srv)
// to:
// reflection.Register(grpcutil.NewAuthlessReflectionInterceptor(srv))
func NewAuthlessReflectionInterceptor(srv reflection.GRPCServer) reflection.GRPCServer {
	return interceptingRegistrar{srv}
}

type interceptingRegistrar struct {
	delegate reflection.GRPCServer
}

func (ir interceptingRegistrar) GetServiceInfo() map[string]grpc.ServiceInfo {
	return ir.delegate.GetServiceInfo()
}

func (ir interceptingRegistrar) RegisterService(desc *grpc.ServiceDesc, impl interface{}) {
	reflectionSrvv1, ok := impl.(rpbv1.ServerReflectionServer)
	if ok {
		ir.delegate.RegisterService(desc, &authlessReflectionV1{ServerReflectionServer: reflectionSrvv1})
	}

	reflectionSrvv1alpha, ok := impl.(grpc_reflection_v1alpha.ServerReflectionServer)
	if ok {
		ir.delegate.RegisterService(desc, &authlessReflectionV1Alpha{ServerReflectionServer: reflectionSrvv1alpha})
	}
}

type authlessReflectionV1 struct {
	IgnoreAuthMixin

	rpbv1.ServerReflectionServer
}

type authlessReflectionV1Alpha struct {
	IgnoreAuthMixin

	grpc_reflection_v1alpha.ServerReflectionServer
}