rpc.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. })
  26. }
  27. return &pb.UserResponse{Users: ut}, nil
  28. }
  29. func (s *UserService) Create(ctx context.Context, req *pb.UserCreateRequest) (*pb.UserResponse, error) {
  30. logrus.Debugf("rpc call: user create: %s", req.Username)
  31. var ut []*pb.UserResponse_User
  32. user, err := ovpm.CreateNewUser(req.Username, req.Password)
  33. if err != nil {
  34. return nil, err
  35. }
  36. pbUser := pb.UserResponse_User{
  37. Username: user.GetUsername(),
  38. ServerSerialNumber: user.GetServerSerialNumber(),
  39. }
  40. ut = append(ut, &pbUser)
  41. return &pb.UserResponse{Users: ut}, nil
  42. }
  43. func (s *UserService) Delete(ctx context.Context, req *pb.UserDeleteRequest) (*pb.UserResponse, error) {
  44. logrus.Debugf("rpc call: user delete: %s", req.Username)
  45. var ut []*pb.UserResponse_User
  46. user, err := ovpm.GetUser(req.Username)
  47. if err != nil {
  48. return nil, err
  49. }
  50. pbUser := pb.UserResponse_User{
  51. Username: user.GetUsername(),
  52. ServerSerialNumber: user.GetServerSerialNumber(),
  53. }
  54. ut = append(ut, &pbUser)
  55. err = user.Delete()
  56. if err != nil {
  57. return nil, err
  58. }
  59. return &pb.UserResponse{Users: ut}, nil
  60. }
  61. func (s *UserService) Renew(ctx context.Context, req *pb.UserRenewRequest) (*pb.UserResponse, error) {
  62. logrus.Debugf("rpc call: user renew cert: %s", req.Username)
  63. var ut []*pb.UserResponse_User
  64. user, err := ovpm.GetUser(req.Username)
  65. if err != nil {
  66. return nil, err
  67. }
  68. pbUser := pb.UserResponse_User{
  69. Username: user.GetUsername(),
  70. ServerSerialNumber: user.GetServerSerialNumber(),
  71. }
  72. ut = append(ut, &pbUser)
  73. err = user.Renew()
  74. if err != nil {
  75. return nil, err
  76. }
  77. return &pb.UserResponse{Users: ut}, nil
  78. }
  79. func (s *UserService) GenConfig(ctx context.Context, req *pb.UserGenConfigRequest) (*pb.UserGenConfigResponse, error) {
  80. logrus.Debugf("rpc call: user genconfig: %s", req.Username)
  81. user, err := ovpm.GetUser(req.Username)
  82. if err != nil {
  83. return nil, err
  84. }
  85. configBlob, err := ovpm.DumpsClientConfig(user.GetUsername())
  86. if err != nil {
  87. return nil, err
  88. }
  89. return &pb.UserGenConfigResponse{ClientConfig: configBlob}, nil
  90. }
  91. type VPNService struct{}
  92. func (s *VPNService) Status(ctx context.Context, req *pb.VPNStatusRequest) (*pb.VPNStatusResponse, error) {
  93. logrus.Debugf("rpc call: vpn status")
  94. server, err := ovpm.GetServerInstance()
  95. if err != nil {
  96. return nil, err
  97. }
  98. response := pb.VPNStatusResponse{
  99. Name: server.Name,
  100. SerialNumber: server.SerialNumber,
  101. Hostname: server.Hostname,
  102. Port: server.Port,
  103. Cert: server.Cert,
  104. CACert: server.CACert,
  105. Net: server.Net,
  106. Mask: server.Mask,
  107. CreatedAt: server.CreatedAt.Format(time.UnixDate),
  108. }
  109. return &response, nil
  110. }
  111. func (s *VPNService) Init(ctx context.Context, req *pb.VPNInitRequest) (*pb.VPNInitResponse, error) {
  112. logrus.Debugf("rpc call: vpn init")
  113. if err := ovpm.Init(req.Hostname, req.Port); err != nil {
  114. logrus.Errorf("server can not be created: %v", err)
  115. }
  116. return &pb.VPNInitResponse{}, nil
  117. }