rpc.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package api
  2. import (
  3. "os"
  4. "time"
  5. "github.com/Sirupsen/logrus"
  6. "github.com/cad/ovpm"
  7. "github.com/cad/ovpm/pb"
  8. "golang.org/x/net/context"
  9. )
  10. type UserService struct{}
  11. func (s *UserService) List(ctx context.Context, req *pb.UserListRequest) (*pb.UserResponse, error) {
  12. logrus.Debug("rpc call: user list")
  13. var ut []*pb.UserResponse_User
  14. users, err := ovpm.GetAllUsers()
  15. if err != nil {
  16. logrus.Errorf("users can not be fetched: %v", err)
  17. os.Exit(1)
  18. return nil, err
  19. }
  20. for _, user := range users {
  21. ut = append(ut, &pb.UserResponse_User{
  22. ServerSerialNumber: user.GetServerSerialNumber(),
  23. Username: user.GetUsername(),
  24. CreatedAt: user.GetCreatedAt(),
  25. IPNet: user.GetIPNet(),
  26. NoGW: user.IsNoGW(),
  27. })
  28. }
  29. return &pb.UserResponse{Users: ut}, nil
  30. }
  31. func (s *UserService) Create(ctx context.Context, req *pb.UserCreateRequest) (*pb.UserResponse, error) {
  32. logrus.Debugf("rpc call: user create: %s", req.Username)
  33. var ut []*pb.UserResponse_User
  34. user, err := ovpm.CreateNewUser(req.Username, req.Password, req.NoGW)
  35. if err != nil {
  36. return nil, err
  37. }
  38. pbUser := pb.UserResponse_User{
  39. Username: user.GetUsername(),
  40. ServerSerialNumber: user.GetServerSerialNumber(),
  41. NoGW: user.IsNoGW(),
  42. }
  43. ut = append(ut, &pbUser)
  44. return &pb.UserResponse{Users: ut}, nil
  45. }
  46. func (s *UserService) Update(ctx context.Context, req *pb.UserUpdateRequest) (*pb.UserResponse, error) {
  47. logrus.Debugf("rpc call: user update: %s", req.Username)
  48. var ut []*pb.UserResponse_User
  49. user, err := ovpm.GetUser(req.Username)
  50. if err != nil {
  51. return nil, err
  52. }
  53. var noGW bool
  54. switch req.Gwpref {
  55. case pb.UserUpdateRequest_NOGW:
  56. noGW = false
  57. case pb.UserUpdateRequest_GW:
  58. noGW = true
  59. default:
  60. noGW = user.NoGW
  61. }
  62. user.Update(req.Password, noGW)
  63. pbUser := pb.UserResponse_User{
  64. Username: user.GetUsername(),
  65. ServerSerialNumber: user.GetServerSerialNumber(),
  66. NoGW: user.IsNoGW(),
  67. }
  68. ut = append(ut, &pbUser)
  69. return &pb.UserResponse{Users: ut}, nil
  70. }
  71. func (s *UserService) Delete(ctx context.Context, req *pb.UserDeleteRequest) (*pb.UserResponse, error) {
  72. logrus.Debugf("rpc call: user delete: %s", req.Username)
  73. var ut []*pb.UserResponse_User
  74. user, err := ovpm.GetUser(req.Username)
  75. if err != nil {
  76. return nil, err
  77. }
  78. pbUser := pb.UserResponse_User{
  79. Username: user.GetUsername(),
  80. ServerSerialNumber: user.GetServerSerialNumber(),
  81. }
  82. ut = append(ut, &pbUser)
  83. err = user.Delete()
  84. if err != nil {
  85. return nil, err
  86. }
  87. return &pb.UserResponse{Users: ut}, nil
  88. }
  89. func (s *UserService) Renew(ctx context.Context, req *pb.UserRenewRequest) (*pb.UserResponse, error) {
  90. logrus.Debugf("rpc call: user renew cert: %s", req.Username)
  91. var ut []*pb.UserResponse_User
  92. user, err := ovpm.GetUser(req.Username)
  93. if err != nil {
  94. return nil, err
  95. }
  96. pbUser := pb.UserResponse_User{
  97. Username: user.GetUsername(),
  98. ServerSerialNumber: user.GetServerSerialNumber(),
  99. }
  100. ut = append(ut, &pbUser)
  101. err = user.Renew()
  102. if err != nil {
  103. return nil, err
  104. }
  105. return &pb.UserResponse{Users: ut}, nil
  106. }
  107. func (s *UserService) GenConfig(ctx context.Context, req *pb.UserGenConfigRequest) (*pb.UserGenConfigResponse, error) {
  108. logrus.Debugf("rpc call: user genconfig: %s", req.Username)
  109. user, err := ovpm.GetUser(req.Username)
  110. if err != nil {
  111. return nil, err
  112. }
  113. configBlob, err := ovpm.DumpsClientConfig(user.GetUsername())
  114. if err != nil {
  115. return nil, err
  116. }
  117. return &pb.UserGenConfigResponse{ClientConfig: configBlob}, nil
  118. }
  119. type VPNService struct{}
  120. func (s *VPNService) Status(ctx context.Context, req *pb.VPNStatusRequest) (*pb.VPNStatusResponse, error) {
  121. logrus.Debugf("rpc call: vpn status")
  122. server, err := ovpm.GetServerInstance()
  123. if err != nil {
  124. return nil, err
  125. }
  126. response := pb.VPNStatusResponse{
  127. Name: server.Name,
  128. SerialNumber: server.SerialNumber,
  129. Hostname: server.Hostname,
  130. Port: server.Port,
  131. Cert: server.Cert,
  132. CACert: server.CACert,
  133. Net: server.Net,
  134. Mask: server.Mask,
  135. CreatedAt: server.CreatedAt.Format(time.UnixDate),
  136. }
  137. return &response, nil
  138. }
  139. func (s *VPNService) Init(ctx context.Context, req *pb.VPNInitRequest) (*pb.VPNInitResponse, error) {
  140. logrus.Debugf("rpc call: vpn init")
  141. if err := ovpm.Init(req.Hostname, req.Port); err != nil {
  142. logrus.Errorf("server can not be created: %v", err)
  143. }
  144. return &pb.VPNInitResponse{}, nil
  145. }