rpcServer.go (2127B)
1 package rpc 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/Nordgedanken/MatrixProtoBuf/jsonTypes" 7 "github.com/Nordgedanken/MatrixProtoBuf/matrix/noAuth" 8 pb "github.com/Nordgedanken/MatrixProtoBuf/matrixProtos" 9 "golang.org/x/net/context" 10 "google.golang.org/grpc" 11 "google.golang.org/grpc/reflection" 12 "io/ioutil" 13 "log" 14 "net" 15 "net/http" 16 ) 17 18 const ( 19 port = ":50051" 20 ) 21 22 // server is used to implement pb.LoginServiceServer. 23 type loginServ struct{} 24 25 // Login implements pb.VersionsServiceServer 26 func (s *loginServ) Login(_ context.Context, r *pb.LoginRequest) (*pb.LoginResponse, error) { 27 var hsLoginResp jsonTypes.RespLogin 28 hsLoginReq := jsonTypes.ReqLogin{ 29 Type: r.Type, 30 User: r.User, 31 Password: r.Password, 32 } 33 34 noAuth.Login(r.Address, &hsLoginReq, &hsLoginResp) 35 36 return &pb.LoginResponse{AccessToken: hsLoginResp.AccessToken, HomeServer: hsLoginResp.HomeServer, UserId: hsLoginResp.UserID, RefreshToken: hsLoginResp.RefreshToken}, nil 37 } 38 39 // server is used to implement pb.LoginServiceServer. 40 type versionsServ struct{} 41 42 // Login implements pb.VersionsServiceServer 43 func (s *versionsServ) Versions(_ context.Context, r *pb.VersionRequest) (*pb.VersionsResponse, error) { 44 var hsVersions jsonTypes.HSVersions 45 reqresp, err := http.Get("https://" + r.Address + "/_matrix/client/versions") 46 if err != nil { 47 panic(err) 48 } 49 defer reqresp.Body.Close() 50 body, err := ioutil.ReadAll(reqresp.Body) 51 52 if err = json.Unmarshal(body, &hsVersions); err != nil { 53 fmt.Println(err) 54 } 55 56 resp := &pb.VersionsResponse{ 57 Versions: []*pb.Version{}, 58 } 59 60 for _, k := range hsVersions.Versions { 61 resp.Versions = append(resp.Versions, &pb.Version{Version: k}) 62 } 63 64 return resp, nil 65 } 66 67 func StartRPCServer() { 68 log.Println("Started RPC Proxy") 69 lis, err := net.Listen("tcp", port) 70 if err != nil { 71 log.Fatalf("failed to listen: %v", err) 72 } 73 s := grpc.NewServer() 74 pb.RegisterLoginServiceServer(s, &loginServ{}) 75 pb.RegisterVersionsServiceServer(s, &versionsServ{}) 76 // Register reflection service on gRPC server. 77 reflection.Register(s) 78 if err := s.Serve(lis); err != nil { 79 log.Fatalf("failed to serve: %v", err) 80 } 81 }