-
Notifications
You must be signed in to change notification settings - Fork 0
/
grpc-options.go
88 lines (73 loc) · 1.83 KB
/
grpc-options.go
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package service
import (
"context"
"crypto/tls"
ome "github.com/omecodes/libome"
"google.golang.org/grpc"
)
type nodeOptions struct {
register bool
port int
tlsConfig *tls.Config
interceptors []ome.GrpcContextUpdater
md MD
boxOptions []Option
}
type NodeOption func(options *nodeOptions)
func WithPort(port int) NodeOption {
return func(options *nodeOptions) {
options.port = port
}
}
func WithTLS(t *tls.Config) NodeOption {
return func(options *nodeOptions) {
options.tlsConfig = t
}
}
func WithInterceptor(interceptors ...ome.GrpcContextUpdater) NodeOption {
return func(options *nodeOptions) {
options.interceptors = append(options.interceptors, interceptors...)
}
}
func WithMeta(m MD) NodeOption {
return func(options *nodeOptions) {
options.md = m
}
}
func Register(register bool) NodeOption {
return func(options *nodeOptions) {
options.register = register
}
}
func GlobalOptions(opts ...Option) NodeOption {
return func(options *nodeOptions) {
options.boxOptions = opts
}
}
type GRPCCallOption int
const (
CallOptToken GRPCCallOption = iota + 1
CallOptProxyCredentials
)
func GRPCCallOptionsFromContext(ctx context.Context, ot ...GRPCCallOption) ([]grpc.CallOption, error) {
var gRPCCallOptions []grpc.CallOption
for _, t := range ot {
if t == CallOptToken {
token := ome.TokenFromContext(ctx)
strToken, err := ome.String(token)
if err != nil {
return nil, err
}
if token != nil {
gRPCCallOptions = append(gRPCCallOptions, grpc.PerRPCCredentials(ome.NewGRPCClientJwt(strToken)))
}
} else if t == CallOptProxyCredentials {
cred := ome.ProxyCredentialsFromContext(ctx)
if cred != nil {
gRPCCallOptions = append(gRPCCallOptions, grpc.PerRPCCredentials(ome.NewGRPCProxy(
cred.Key, cred.Secret)))
}
}
}
return gRPCCallOptions, nil
}