commit fdfec9cc2566b7ccdae28c6dc0ebe446c322b3c6
Author: MTRNord <mtrnord1@gmail.com>
Date: Sat, 16 Sep 2017 20:04:03 +0200
Initial Version for the MatrixProtobufProxy
Signed-off-by: MTRNord <mtrnord1@gmail.com>
Diffstat:
8 files changed, 657 insertions(+), 0 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,70 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Go template
+# Binaries for programs and plugins
+*.exe
+*.dll
+*.so
+*.dylib
+
+# Test binary, build with `go test -c`
+*.test
+
+# Output of the go coverage tool, specifically when used with LiteIDE
+*.out
+
+# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
+.glide/
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+bin/
+pkg/
+vendor/src/
+.idea/
+\ No newline at end of file
diff --git a/src/github.com/Nordgedanken/MatrixProtoBuf/matrixProtos/matrix.pb.go b/src/github.com/Nordgedanken/MatrixProtoBuf/matrixProtos/matrix.pb.go
@@ -0,0 +1,277 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: matrix.proto
+
+/*
+Package matrixProtos is a generated protocol buffer package.
+
+It is generated from these files:
+ matrix.proto
+
+It has these top-level messages:
+ VersionsResponse
+ Version
+ LoginRequest
+ LoginResponse
+*/
+package matrixProtos
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+import (
+ context "golang.org/x/net/context"
+ grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type VersionsResponse struct {
+ Versions []*Version `protobuf:"bytes,1,rep,name=versions" json:"versions,omitempty"`
+}
+
+func (m *VersionsResponse) Reset() { *m = VersionsResponse{} }
+func (m *VersionsResponse) String() string { return proto.CompactTextString(m) }
+func (*VersionsResponse) ProtoMessage() {}
+func (*VersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *VersionsResponse) GetVersions() []*Version {
+ if m != nil {
+ return m.Versions
+ }
+ return nil
+}
+
+type Version struct {
+ Version string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"`
+}
+
+func (m *Version) Reset() { *m = Version{} }
+func (m *Version) String() string { return proto.CompactTextString(m) }
+func (*Version) ProtoMessage() {}
+func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *Version) GetVersion() string {
+ if m != nil {
+ return m.Version
+ }
+ return ""
+}
+
+type LoginRequest struct {
+ Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
+ User string `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"`
+ Password string `protobuf:"bytes,3,opt,name=password" json:"password,omitempty"`
+ Medium string `protobuf:"bytes,4,opt,name=medium" json:"medium,omitempty"`
+ Address string `protobuf:"bytes,5,opt,name=address" json:"address,omitempty"`
+}
+
+func (m *LoginRequest) Reset() { *m = LoginRequest{} }
+func (m *LoginRequest) String() string { return proto.CompactTextString(m) }
+func (*LoginRequest) ProtoMessage() {}
+func (*LoginRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (m *LoginRequest) GetType() string {
+ if m != nil {
+ return m.Type
+ }
+ return ""
+}
+
+func (m *LoginRequest) GetUser() string {
+ if m != nil {
+ return m.User
+ }
+ return ""
+}
+
+func (m *LoginRequest) GetPassword() string {
+ if m != nil {
+ return m.Password
+ }
+ return ""
+}
+
+func (m *LoginRequest) GetMedium() string {
+ if m != nil {
+ return m.Medium
+ }
+ return ""
+}
+
+func (m *LoginRequest) GetAddress() string {
+ if m != nil {
+ return m.Address
+ }
+ return ""
+}
+
+type LoginResponse struct {
+ AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken" json:"access_token,omitempty"`
+ HomeServer string `protobuf:"bytes,2,opt,name=home_server,json=homeServer" json:"home_server,omitempty"`
+ UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId" json:"user_id,omitempty"`
+ RefreshToken string `protobuf:"bytes,4,opt,name=refresh_token,json=refreshToken" json:"refresh_token,omitempty"`
+ Errcode string `protobuf:"bytes,5,opt,name=errcode" json:"errcode,omitempty"`
+ Error string `protobuf:"bytes,6,opt,name=error" json:"error,omitempty"`
+}
+
+func (m *LoginResponse) Reset() { *m = LoginResponse{} }
+func (m *LoginResponse) String() string { return proto.CompactTextString(m) }
+func (*LoginResponse) ProtoMessage() {}
+func (*LoginResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *LoginResponse) GetAccessToken() string {
+ if m != nil {
+ return m.AccessToken
+ }
+ return ""
+}
+
+func (m *LoginResponse) GetHomeServer() string {
+ if m != nil {
+ return m.HomeServer
+ }
+ return ""
+}
+
+func (m *LoginResponse) GetUserId() string {
+ if m != nil {
+ return m.UserId
+ }
+ return ""
+}
+
+func (m *LoginResponse) GetRefreshToken() string {
+ if m != nil {
+ return m.RefreshToken
+ }
+ return ""
+}
+
+func (m *LoginResponse) GetErrcode() string {
+ if m != nil {
+ return m.Errcode
+ }
+ return ""
+}
+
+func (m *LoginResponse) GetError() string {
+ if m != nil {
+ return m.Error
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*VersionsResponse)(nil), "matrixProtos.VersionsResponse")
+ proto.RegisterType((*Version)(nil), "matrixProtos.Version")
+ proto.RegisterType((*LoginRequest)(nil), "matrixProtos.LoginRequest")
+ proto.RegisterType((*LoginResponse)(nil), "matrixProtos.LoginResponse")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// Client API for LoginService service
+
+type LoginServiceClient interface {
+ Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginResponse, error)
+}
+
+type loginServiceClient struct {
+ cc *grpc.ClientConn
+}
+
+func NewLoginServiceClient(cc *grpc.ClientConn) LoginServiceClient {
+ return &loginServiceClient{cc}
+}
+
+func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginResponse, error) {
+ out := new(LoginResponse)
+ err := grpc.Invoke(ctx, "/matrixProtos.LoginService/Login", in, out, c.cc, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// Server API for LoginService service
+
+type LoginServiceServer interface {
+ Login(context.Context, *LoginRequest) (*LoginResponse, error)
+}
+
+func RegisterLoginServiceServer(s *grpc.Server, srv LoginServiceServer) {
+ s.RegisterService(&_LoginService_serviceDesc, srv)
+}
+
+func _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(LoginRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(LoginServiceServer).Login(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/matrixProtos.LoginService/Login",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(LoginServiceServer).Login(ctx, req.(*LoginRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _LoginService_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "matrixProtos.LoginService",
+ HandlerType: (*LoginServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Login",
+ Handler: _LoginService_Login_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "matrix.proto",
+}
+
+func init() { proto.RegisterFile("matrix.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+ // 319 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xcd, 0x4e, 0xc2, 0x40,
+ 0x10, 0x80, 0x53, 0x81, 0x16, 0x87, 0x92, 0x98, 0x8d, 0x3f, 0x1b, 0x3c, 0x88, 0xe5, 0xc2, 0x89,
+ 0x44, 0x7c, 0x01, 0x2f, 0x1e, 0x4c, 0x3c, 0x90, 0x6a, 0xbc, 0x92, 0xda, 0x8e, 0xd2, 0x98, 0xb2,
+ 0x75, 0xa6, 0xa0, 0xde, 0x7d, 0x31, 0xdf, 0xcc, 0xec, 0xee, 0x94, 0x60, 0xe2, 0x6d, 0xbf, 0x6f,
+ 0x7f, 0xfa, 0x75, 0x5b, 0x88, 0xab, 0xac, 0xa1, 0xf2, 0x73, 0x56, 0x93, 0x69, 0x8c, 0x12, 0x5a,
+ 0x58, 0xe0, 0xe4, 0x16, 0x8e, 0x9e, 0x90, 0xb8, 0x34, 0x6b, 0x4e, 0x91, 0x6b, 0xb3, 0x66, 0x54,
+ 0x57, 0xd0, 0xdf, 0x8a, 0xd3, 0xc1, 0xb8, 0x33, 0x1d, 0xcc, 0x4f, 0x66, 0xfb, 0x9b, 0x66, 0xb2,
+ 0x23, 0xdd, 0x2d, 0x4b, 0x26, 0x10, 0x89, 0x54, 0x1a, 0x22, 0xd1, 0x3a, 0x18, 0x07, 0xd3, 0xc3,
+ 0xb4, 0xc5, 0xe4, 0x3b, 0x80, 0xf8, 0xde, 0xbc, 0x96, 0xeb, 0x14, 0xdf, 0x37, 0xc8, 0x8d, 0x52,
+ 0xd0, 0x6d, 0xbe, 0x6a, 0x94, 0x75, 0x6e, 0x6c, 0xdd, 0x86, 0x91, 0xf4, 0x81, 0x77, 0x76, 0xac,
+ 0x46, 0xd0, 0xaf, 0x33, 0xe6, 0x0f, 0x43, 0x85, 0xee, 0x38, 0xbf, 0x63, 0x75, 0x0a, 0x61, 0x85,
+ 0x45, 0xb9, 0xa9, 0x74, 0xd7, 0xcd, 0x08, 0xd9, 0x8c, 0xac, 0x28, 0x08, 0x99, 0x75, 0xcf, 0x67,
+ 0x08, 0x26, 0x3f, 0x01, 0x0c, 0x25, 0x43, 0x5e, 0xf8, 0x12, 0xe2, 0x2c, 0xcf, 0x91, 0x79, 0xd9,
+ 0x98, 0x37, 0x6c, 0xbb, 0x07, 0xde, 0x3d, 0x5a, 0xa5, 0x2e, 0x60, 0xb0, 0x32, 0x15, 0x2e, 0x19,
+ 0x69, 0xbb, 0xab, 0x03, 0xab, 0x1e, 0x9c, 0x51, 0x67, 0x10, 0xd9, 0xd6, 0x65, 0xd9, 0x26, 0x86,
+ 0x16, 0xef, 0x0a, 0x35, 0x81, 0x21, 0xe1, 0x0b, 0x21, 0xaf, 0xe4, 0x74, 0xdf, 0x19, 0x8b, 0xf4,
+ 0xc7, 0x6b, 0x88, 0x90, 0x28, 0x37, 0x05, 0xb6, 0xb5, 0x82, 0xea, 0x18, 0x7a, 0x48, 0x64, 0x48,
+ 0x87, 0xce, 0x7b, 0x98, 0x2f, 0xe4, 0x26, 0xed, 0xc3, 0xcb, 0x1c, 0xd5, 0x0d, 0xf4, 0x1c, 0xab,
+ 0xd1, 0xdf, 0x2f, 0xb5, 0x7f, 0xdd, 0xa3, 0xf3, 0x7f, 0xe7, 0xfc, 0x1d, 0x3c, 0x87, 0xee, 0xef,
+ 0xb8, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x37, 0x21, 0x76, 0xf7, 0x2d, 0x02, 0x00, 0x00,
+}
diff --git a/src/github.com/Nordgedanken/MatrixProtoBuf/matrixProtos/matrix.proto b/src/github.com/Nordgedanken/MatrixProtoBuf/matrixProtos/matrix.proto
@@ -0,0 +1,31 @@
+syntax = "proto3";
+package matrixProtos;
+
+message VersionsResponse {
+ repeated Version versions = 1;
+}
+
+message Version {
+ string version = 1;
+}
+
+service LoginService {
+ rpc Login (LoginRequest) returns (LoginResponse);
+}
+
+message LoginRequest {
+ string type = 1;
+ string user = 2;
+ string password = 3;
+ string medium = 4;
+ string address = 5;
+}
+
+message LoginResponse {
+ string access_token = 1;
+ string home_server = 2;
+ string user_id = 3;
+ string refresh_token = 4;
+ string errcode = 5;
+ string error = 6;
+}
+\ No newline at end of file
diff --git a/src/github.com/Nordgedanken/MatrixProtoBuf/protobufS/protoServer.go b/src/github.com/Nordgedanken/MatrixProtoBuf/protobufS/protoServer.go
@@ -0,0 +1,52 @@
+package protobufS
+
+import (
+ "fmt"
+ pb "github.com/Nordgedanken/MatrixProtoBuf/matrixProtos"
+ "github.com/golang/protobuf/proto"
+ "log"
+ "net"
+ "os"
+)
+
+func StartProtoServer() {
+ log.Println("Started ProtoBuf Server")
+ c := make(chan *pb.Version)
+ //Listen to the TCP port
+ listener, err := net.Listen("tcp", "127.0.0.1:2110")
+ checkError(err)
+ for {
+ if conn, err := listener.Accept(); err == nil {
+ //If err is nil then that means that data is available for us so we take up this data and pass it to a new goroutine
+ go handleProtoClient(conn, c)
+ } else {
+ continue
+ }
+ }
+}
+
+func handleProtoClient(conn net.Conn, c chan *pb.Version) {
+ fmt.Println("Connection established")
+ //Close the connection when the function exits
+ defer conn.Close()
+ //Create a data buffer of type byte slice with capacity of 4096
+ data := make([]byte, 4096)
+ //Read the data waiting on the connection and put it in the data buffer
+ n, err := conn.Read(data)
+ checkError(err)
+ fmt.Println("Decoding Protobuf message")
+ //Create an struct pointer of type ProtobufTest.TestMessage struct
+ protodata := new(pb.Version)
+ //Convert all the data retrieved into the ProtobufTest.TestMessage struct type
+ err = proto.Unmarshal(data[0:n], protodata)
+ checkError(err)
+ //Push the protobuf message into a channel
+ c <- protodata
+}
+
+func checkError(err error) {
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
+ os.Exit(1)
+ }
+}
diff --git a/src/github.com/Nordgedanken/MatrixProtoBuf/rpc/rpcServer.go b/src/github.com/Nordgedanken/MatrixProtoBuf/rpc/rpcServer.go
@@ -0,0 +1,37 @@
+package rpc
+
+import (
+ pb "github.com/Nordgedanken/MatrixProtoBuf/matrixProtos"
+ "golang.org/x/net/context"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/reflection"
+ "log"
+ "net"
+)
+
+const (
+ port = ":50051"
+)
+
+// server is used to implement helloworld.GreeterServer.
+type server struct{}
+
+// SayHello implements helloworld.GreeterServer
+func (s *server) Login(_ context.Context, r *pb.LoginRequest) (*pb.LoginResponse, error) {
+ return &pb.LoginResponse{"test", "localhost", r.User, "test", "", ""}, nil
+}
+
+func StartRPCServer() {
+ log.Println("Started RPC Proxy")
+ lis, err := net.Listen("tcp", port)
+ if err != nil {
+ log.Fatalf("failed to listen: %v", err)
+ }
+ s := grpc.NewServer()
+ pb.RegisterLoginServiceServer(s, &server{})
+ // Register reflection service on gRPC server.
+ reflection.Register(s)
+ if err := s.Serve(lis); err != nil {
+ log.Fatalf("failed to serve: %v", err)
+ }
+}
diff --git a/src/github.com/Nordgedanken/MatrixProtoBuf/server.go b/src/github.com/Nordgedanken/MatrixProtoBuf/server.go
@@ -0,0 +1,16 @@
+package main
+
+import (
+ "github.com/Nordgedanken/MatrixProtoBuf/protobufS"
+ "github.com/Nordgedanken/MatrixProtoBuf/rpc"
+ "sync"
+)
+
+func main() {
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go rpc.StartRPCServer()
+ wg.Add(1)
+ go protobufS.StartProtoServer()
+ wg.Wait()
+}
diff --git a/src/github.com/Nordgedanken/mpbClient/client.go b/src/github.com/Nordgedanken/mpbClient/client.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+ "log"
+
+ pb "github.com/Nordgedanken/MatrixProtoBuf/matrixProtos"
+ "golang.org/x/net/context"
+ "google.golang.org/grpc"
+)
+
+const (
+ address = "localhost:50051"
+)
+
+func main() {
+ // Set up a connection to the server.
+ conn, err := grpc.Dial(address, grpc.WithInsecure())
+ if err != nil {
+ log.Fatalf("did not connect: %v", err)
+ }
+ defer conn.Close()
+ c := pb.NewLoginServiceClient(conn)
+
+ // Contact the server and print out its response.
+ r, err := c.Login(context.Background(), &pb.LoginRequest{"m.password", "test", "", "", ""})
+ if err != nil {
+ log.Fatalf("could not greet: %v", err)
+ }
+ log.Printf("Greeting: %s", r.String())
+}
diff --git a/vendor/manifest b/vendor/manifest
@@ -0,0 +1,142 @@
+{
+ "version": 0,
+ "dependencies": [
+ {
+ "importpath": "cloud.google.com/go/compute/metadata",
+ "repository": "https://code.googlesource.com/gocloud",
+ "revision": "58d5b92c85a97c78b82bdcb43e8d192c4ab0a239",
+ "branch": "master",
+ "path": "/compute/metadata"
+ },
+ {
+ "importpath": "github.com/golang/glog",
+ "repository": "https://github.com/golang/glog",
+ "revision": "23def4e6c14b4da8ac2ed8007337bc5eb5007998",
+ "branch": "master"
+ },
+ {
+ "importpath": "github.com/golang/mock/gomock",
+ "repository": "https://github.com/golang/mock",
+ "revision": "cd1f5ca28400ea81f03fbc828a052ab46c33fcf9",
+ "branch": "master",
+ "path": "/gomock"
+ },
+ {
+ "importpath": "github.com/golang/protobuf/proto",
+ "repository": "https://github.com/golang/protobuf",
+ "revision": "11b8df160996e00fd4b55cbaafb3d84ec6d50fa8",
+ "branch": "master",
+ "path": "/proto"
+ },
+ {
+ "importpath": "github.com/golang/protobuf/protoc-gen-go/descriptor",
+ "repository": "https://github.com/golang/protobuf",
+ "revision": "11b8df160996e00fd4b55cbaafb3d84ec6d50fa8",
+ "branch": "master",
+ "path": "/protoc-gen-go/descriptor"
+ },
+ {
+ "importpath": "github.com/golang/protobuf/ptypes",
+ "repository": "https://github.com/golang/protobuf",
+ "revision": "11b8df160996e00fd4b55cbaafb3d84ec6d50fa8",
+ "branch": "master",
+ "path": "/ptypes"
+ },
+ {
+ "importpath": "golang.org/x/net/context",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/context"
+ },
+ {
+ "importpath": "golang.org/x/net/http2",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/http2"
+ },
+ {
+ "importpath": "golang.org/x/net/idna",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/idna"
+ },
+ {
+ "importpath": "golang.org/x/net/internal/timeseries",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/internal/timeseries"
+ },
+ {
+ "importpath": "golang.org/x/net/lex/httplex",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/lex/httplex"
+ },
+ {
+ "importpath": "golang.org/x/net/trace",
+ "repository": "https://go.googlesource.com/net",
+ "revision": "8351a756f30f1297fe94bbf4b767ec589c6ea6d0",
+ "branch": "master",
+ "path": "/trace"
+ },
+ {
+ "importpath": "golang.org/x/oauth2",
+ "repository": "https://go.googlesource.com/oauth2",
+ "revision": "13449ad91cb26cb47661c1b080790392170385fd",
+ "branch": "master"
+ },
+ {
+ "importpath": "golang.org/x/text/secure/bidirule",
+ "repository": "https://go.googlesource.com/text",
+ "revision": "1cbadb444a806fd9430d14ad08967ed91da4fa0a",
+ "branch": "master",
+ "path": "/secure/bidirule"
+ },
+ {
+ "importpath": "golang.org/x/text/transform",
+ "repository": "https://go.googlesource.com/text",
+ "revision": "1cbadb444a806fd9430d14ad08967ed91da4fa0a",
+ "branch": "master",
+ "path": "/transform"
+ },
+ {
+ "importpath": "golang.org/x/text/unicode/bidi",
+ "repository": "https://go.googlesource.com/text",
+ "revision": "1cbadb444a806fd9430d14ad08967ed91da4fa0a",
+ "branch": "master",
+ "path": "/unicode/bidi"
+ },
+ {
+ "importpath": "golang.org/x/text/unicode/norm",
+ "repository": "https://go.googlesource.com/text",
+ "revision": "1cbadb444a806fd9430d14ad08967ed91da4fa0a",
+ "branch": "master",
+ "path": "/unicode/norm"
+ },
+ {
+ "importpath": "google.golang.org/genproto/googleapis/rpc/status",
+ "repository": "https://github.com/google/go-genproto",
+ "revision": "595979c8a7bf586b2d293fb42246bf91a0b893d9",
+ "branch": "master",
+ "path": "/googleapis/rpc/status"
+ },
+ {
+ "importpath": "google.golang.org/grpc",
+ "repository": "https://github.com/grpc/grpc-go",
+ "revision": "bb78878767b96d411e740439ac820f118e95ae2f",
+ "branch": "master"
+ },
+ {
+ "importpath": "google.golang.org/grpc/testdata",
+ "repository": "https://github.com/grpc/grpc-go",
+ "revision": "bb78878767b96d411e740439ac820f118e95ae2f",
+ "branch": "master",
+ "path": "/testdata"
+ }
+ ]
+}