rpc.go 3.9 KB

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