matrixprotobuf

git clone git://archive.git.mtrnord.blog/MTRNord/matrixprotobuf.git
Log | Files | Refs | README | LICENSE

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 }