Skip to content

Instantly share code, notes, and snippets.

@kerinin
Last active May 6, 2016 16:43
Show Gist options
  • Save kerinin/af409f1eb934bb3e0eb4a26cf50bf463 to your computer and use it in GitHub Desktop.
Save kerinin/af409f1eb934bb3e0eb4a26cf50bf463 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/tls"
"crypto/x509"
"flag"
"fmt"
"log"
"time"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
pb "github.com/ReturnPath/proto/go/src/unsubscriber"
)
const ca string = `
-----BEGIN CERTIFICATE-----
MIIDjzCCAnegAwIBAgIJALB1xVQ5HBn/MA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV
BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGluMRcwFQYDVQQK
DA5SZXR1cm5QYXRoIEluYzEVMBMGA1UECwwMZ1JQQyBSb290IENBMB4XDTE2MDUw
NTE2MjYyMloXDTI2MDUwMzE2MjYyMlowXjELMAkGA1UEBhMCVVMxDjAMBgNVBAgM
BVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xFzAVBgNVBAoMDlJldHVyblBhdGggSW5j
MRUwEwYDVQQLDAxnUlBDIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQC2NS05t1WOn2lrZJHM/fj1eOW/Lio/BaqJSGTXDpO/AssEV629mYeh
gCKBZWhRDyEUUbiRN71oUFOCfs9LR+Cfu/+OWWtIJw9KU3jyU8H/Ns0EItYqlwAy
LpjQc7cewCm5RQpPhuCfOyNJIYdr83JHMSiTMsAS9HmxMvVxBsK1MebI2/wypdls
aC0NXimltaTNwC6Qq1pS1jJomvb7Rl/TVpsPMWkIZ+HzSc5MDX+leNsRxQhqhYVB
MUymnadfCDqpUnWNc7w1y2baKGB6HvFix/bAFp7LE9ElxjCPFR+VilIKvIdKoitf
33IMmQCbKesvjf01qjnbzTlXgg36DtAjAgMBAAGjUDBOMB0GA1UdDgQWBBSjGnXo
O38b7qZIR7+P9GohVAYM/DAfBgNVHSMEGDAWgBSjGnXoO38b7qZIR7+P9GohVAYM
/DAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBx17RrFeR5piY78j8/
9n7WLRCfURxe+Y9xm/IMyxwFeaVdUff14loWta0NtwjgGMJKkdVSFwTMPRMlQXGm
XCsau7PKYuvB9gKt2BVmxDIQC07jywrfeL61TbTq7u59sRBUI09denClXnSEe3qa
FAQnIUYuYvRXc79vs3HYMqeCkkOzOHruCqOYl/Krag6pnkFIKe1d5A2hV92tAhJY
rAkBj2LhrOIrGRTzo95bGE9xNLboneIf4h64Ndr6DL0O3f8CblqYaTOpNnGE9V39
7tiJsSNLi9fgitLgQ6CECYwGLPX3g4hjHZCwJ0winMRstNozEwcbr166C7dXmk0u
7Ssr
-----END CERTIFICATE-----
`
type server struct{}
func (s server) GetUser(ctx context.Context, req *pb.UserID) (*pb.UserSettings, error) {
fmt.Printf("GetUser: %+v\n", req)
return &pb.UserSettings{Email: "response from go"}, nil
}
func main() {
var (
cert = flag.String("cert", withConfigDir("cert.pem"), "TLS client certificate.")
key = flag.String("key", withConfigDir("key.pem"), "TLS client key.")
)
flag.Parse()
if cert == nil || key == nil {
log.Fatal("Must specify 'cert' and 'key' paths")
}
caPool := x509.NewCertPool()
caPool.AppendCertsFromPEM([]byte(ca))
cert, err := tls.LoadX509KeyPair(*tlsCert, *tlsKey)
if err != nil {
log.Fatal(err)
}
creds := credentials.NewTLS(&tls.Config{
RootCAs: caPool,
Certificates: []tls.Certificate{cert},
})
conn, err := grpc.Dial(
"grpc.otherinbox.com:50051",
grpc.WithTransportCredentials(creds),
grpc.WithTimeout(5*time.Second),
grpc.WithUserAgent(`demo client`),
)
if err != nil {
log.Fatalf("failed to dial: %v", err)
}
defer conn.Close()
client := pb.NewOIBClient(conn)
feature, err := client.GetUser(context.Background(), &pb.UserID{EmailAddress: "request from go"})
if err != nil {
log.Fatalf("failed to get feature: %v", err)
}
fmt.Printf("Got feature: %+v\n", feature)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment