This repository has been archived by the owner on Dec 11, 2023. It is now read-only.
/
client.go
93 lines (76 loc) · 2.64 KB
/
client.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
89
90
91
92
93
package client
import (
"buf.build/gen/go/gportal/gportal-cloud/grpc/go/gpcloud/api/auth/v1/authv1grpc"
"buf.build/gen/go/gportal/gportal-cloud/grpc/go/gpcloud/api/cloud/v1/cloudv1grpc"
"buf.build/gen/go/gportal/gportal-cloud/grpc/go/gpcloud/api/metadata/v1/metadatav1grpc"
"buf.build/gen/go/gportal/gportal-cloud/grpc/go/gpcloud/api/network/v1/networkv1grpc"
"buf.build/gen/go/gportal/gportal-cloud/grpc/go/gpcloud/api/payment/v1/paymentv1grpc"
"crypto/tls"
"fmt"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc"
)
const DefaultEndpoint = "grpc.g-portal.cloud:443"
type Client struct {
grpcClient *grpc.ClientConn
}
type EndpointOverrideOption string
// CloudClient Returns the CloudServiceClient
func (c *Client) CloudClient() cloudv1grpc.CloudServiceClient {
return cloudv1grpc.NewCloudServiceClient(c.grpcClient)
}
// AuthClient Returns the CloudServiceClient
func (c *Client) AuthClient() authv1grpc.AuthServiceClient {
return authv1grpc.NewAuthServiceClient(c.grpcClient)
}
// MetadataClient Returns the MetadataServiceClient
func (c *Client) MetadataClient() metadatav1grpc.MetadataServiceClient {
return metadatav1grpc.NewMetadataServiceClient(c.grpcClient)
}
// NetworkClient Returns the NetworkServiceClient
func (c *Client) NetworkClient() networkv1grpc.NetworkServiceClient {
return networkv1grpc.NewNetworkServiceClient(c.grpcClient)
}
// PaymentClient Returns the PaymentServiceClient
func (c *Client) PaymentClient() paymentv1grpc.PaymentServiceClient {
return paymentv1grpc.NewPaymentServiceClient(c.grpcClient)
}
// NewClient Returns a new GRPC client
func NewClient(extraOptions ...interface{}) (*Client, error) {
cl := &Client{}
var options []grpc.DialOption
// Certificate pinning
options = append(options, grpc.WithTransportCredentials(credentials.NewTLS(getTLSOptions())))
// User Agent
options = append(options, grpc.WithUserAgent(fmt.Sprintf("GPCloud Golang Client [%s]", Version)))
endpoint := DefaultEndpoint
authenticationDefined := false
for _, option := range extraOptions {
if opt, ok := option.(grpc.DialOption); ok {
options = append(options, opt)
continue
}
if opt, ok := option.(EndpointOverrideOption); ok {
endpoint = string(opt)
continue
}
if opt, ok := option.(AuthProviderOption); ok && !authenticationDefined {
options = append(options, grpc.WithPerRPCCredentials(&AuthOption{
Provider: &opt,
}))
authenticationDefined = true
continue
}
}
clientConn, err := grpc.Dial(endpoint, options...)
if err != nil {
return nil, err
}
cl.grpcClient = clientConn
return cl, nil
}
func getTLSOptions() *tls.Config {
return &tls.Config{
MinVersion: tls.VersionTLS12,
}
}