Przeglądaj źródła

refactor: split rpc into seperate package and improve general api

Mustafa Arici 8 lat temu
rodzic
commit
75f18d4dd2
5 zmienionych plików z 41 dodań i 39 usunięć
  1. 21 20
      api/rpc.go
  2. 0 1
      cmd/ovpm/main.go
  3. 3 2
      cmd/ovpmd/main.go
  4. 2 2
      user.go
  5. 15 14
      vpn.go

+ 21 - 20
rpcapi.go → api/rpc.go

@@ -1,22 +1,23 @@
 //go:generate protoc -I pb/ pb/user.proto pb/vpn.proto --go_out=plugins=grpc:pb
 
-package ovpm
+package api
 
 import (
 	"os"
 	"time"
 
 	"github.com/Sirupsen/logrus"
+	"github.com/cad/ovpm"
 	"github.com/cad/ovpm/pb"
 	"golang.org/x/net/context"
 )
 
-type UserSvc struct{}
+type UserService struct{}
 
-func (s *UserSvc) List(ctx context.Context, req *pb.UserListRequest) (*pb.UserResponse, error) {
+func (s *UserService) List(ctx context.Context, req *pb.UserListRequest) (*pb.UserResponse, error) {
 	var ut []*pb.UserResponse_User
 
-	users, err := GetAllUsers()
+	users, err := ovpm.GetAllUsers()
 	if err != nil {
 		logrus.Errorf("users can not be fetched: %v", err)
 		os.Exit(1)
@@ -33,9 +34,9 @@ func (s *UserSvc) List(ctx context.Context, req *pb.UserListRequest) (*pb.UserRe
 	return &pb.UserResponse{Users: ut}, nil
 }
 
-func (s *UserSvc) Create(ctx context.Context, req *pb.UserCreateRequest) (*pb.UserResponse, error) {
+func (s *UserService) Create(ctx context.Context, req *pb.UserCreateRequest) (*pb.UserResponse, error) {
 	var ut []*pb.UserResponse_User
-	user, err := CreateNewUser(req.Username, req.Password)
+	user, err := ovpm.CreateNewUser(req.Username, req.Password)
 	if err != nil {
 		return nil, err
 	}
@@ -49,9 +50,9 @@ func (s *UserSvc) Create(ctx context.Context, req *pb.UserCreateRequest) (*pb.Us
 	return &pb.UserResponse{Users: ut}, nil
 }
 
-func (s *UserSvc) Delete(ctx context.Context, req *pb.UserDeleteRequest) (*pb.UserResponse, error) {
+func (s *UserService) Delete(ctx context.Context, req *pb.UserDeleteRequest) (*pb.UserResponse, error) {
 	var ut []*pb.UserResponse_User
-	user, err := GetUser(req.Username)
+	user, err := ovpm.GetUser(req.Username)
 	if err != nil {
 		return nil, err
 	}
@@ -70,9 +71,9 @@ func (s *UserSvc) Delete(ctx context.Context, req *pb.UserDeleteRequest) (*pb.Us
 	return &pb.UserResponse{Users: ut}, nil
 }
 
-func (s *UserSvc) Renew(ctx context.Context, req *pb.UserRenewRequest) (*pb.UserResponse, error) {
+func (s *UserService) Renew(ctx context.Context, req *pb.UserRenewRequest) (*pb.UserResponse, error) {
 	var ut []*pb.UserResponse_User
-	user, err := GetUser(req.Username)
+	user, err := ovpm.GetUser(req.Username)
 	if err != nil {
 		return nil, err
 	}
@@ -91,12 +92,12 @@ func (s *UserSvc) Renew(ctx context.Context, req *pb.UserRenewRequest) (*pb.User
 	return &pb.UserResponse{Users: ut}, nil
 }
 
-func (s *UserSvc) GenConfig(ctx context.Context, req *pb.UserGenConfigRequest) (*pb.UserGenConfigResponse, error) {
-	user, err := GetUser(req.Username)
+func (s *UserService) GenConfig(ctx context.Context, req *pb.UserGenConfigRequest) (*pb.UserGenConfigResponse, error) {
+	user, err := ovpm.GetUser(req.Username)
 	if err != nil {
 		return nil, err
 	}
-	configBlob, err := sDumpUserOVPNConf(user.GetUsername())
+	configBlob, err := ovpm.DumpsClientConfig(user.GetUsername())
 	if err != nil {
 		return nil, err
 	}
@@ -104,10 +105,10 @@ func (s *UserSvc) GenConfig(ctx context.Context, req *pb.UserGenConfigRequest) (
 	return &pb.UserGenConfigResponse{ClientConfig: configBlob}, nil
 }
 
-type VPNSvc struct{}
+type VPNService struct{}
 
-func (s *VPNSvc) Status(ctx context.Context, req *pb.VPNStatusRequest) (*pb.VPNStatusResponse, error) {
-	server, err := GetServerInstance()
+func (s *VPNService) Status(ctx context.Context, req *pb.VPNStatusRequest) (*pb.VPNStatusResponse, error) {
+	server, err := ovpm.GetServerInstance()
 	if err != nil {
 		return nil, err
 	}
@@ -126,15 +127,15 @@ func (s *VPNSvc) Status(ctx context.Context, req *pb.VPNStatusRequest) (*pb.VPNS
 	return &response, nil
 }
 
-func (s *VPNSvc) Init(ctx context.Context, req *pb.VPNInitRequest) (*pb.VPNInitResponse, error) {
-	if err := InitServer("default", req.Hostname, req.Port); err != nil {
+func (s *VPNService) Init(ctx context.Context, req *pb.VPNInitRequest) (*pb.VPNInitResponse, error) {
+	if err := ovpm.Initialize("default", req.Hostname, req.Port); err != nil {
 		logrus.Errorf("server can not be created: %v", err)
 	}
 	return &pb.VPNInitResponse{}, nil
 }
 
-func (s *VPNSvc) Apply(ctx context.Context, req *pb.VPNApplyRequest) (*pb.VPNApplyResponse, error) {
-	if err := Emit(); err != nil {
+func (s *VPNService) Apply(ctx context.Context, req *pb.VPNApplyRequest) (*pb.VPNApplyResponse, error) {
+	if err := ovpm.Emit(); err != nil {
 		logrus.Errorf("can not apply configuration: %v", err)
 		return nil, err
 	}

+ 0 - 1
cmd/ovpm/main.go

@@ -48,7 +48,6 @@ func main() {
 					Usage: "List VPN users.",
 					Action: func(c *cli.Context) error {
 						action = "user:list"
-						//conn := getConn(c.String("port"))
 						conn := getConn(c.GlobalString("daemon-port"))
 						defer conn.Close()
 						userSvc := pb.NewUserServiceClient(conn)

+ 3 - 2
cmd/ovpmd/main.go

@@ -10,6 +10,7 @@ import (
 
 	"github.com/Sirupsen/logrus"
 	"github.com/cad/ovpm"
+	"github.com/cad/ovpm/api"
 	"github.com/cad/ovpm/pb"
 	"github.com/urfave/cli"
 )
@@ -48,8 +49,8 @@ func main() {
 			logrus.Fatalf("could not listen to port %s: %v", port, err)
 		}
 		s := grpc.NewServer()
-		pb.RegisterUserServiceServer(s, &ovpm.UserSvc{})
-		pb.RegisterVPNServiceServer(s, &ovpm.VPNSvc{})
+		pb.RegisterUserServiceServer(s, &api.UserService{})
+		pb.RegisterVPNServiceServer(s, &api.VPNService{})
 		logrus.Infof("OVPM is running :%s ...", port)
 		s.Serve(lis)
 		return nil

+ 2 - 2
user.go

@@ -65,7 +65,7 @@ func GetAllUsers() ([]*DBUser, error) {
 // It also generates the necessary client keys and signs certificates with the current
 // server's CA.
 func CreateNewUser(username, password string) (*DBUser, error) {
-	if !CheckBootstrapped() {
+	if !IsInitialized() {
 		return nil, fmt.Errorf("you first need to create server")
 	}
 	// Validate user input.
@@ -151,7 +151,7 @@ func (u *DBUser) ResetPassword(newPassword string) error {
 // This is often used to sign users when the current CA is changed while there are
 // still  existing users in the database.
 func (u *DBUser) Sign() error {
-	if !CheckBootstrapped() {
+	if !IsInitialized() {
 		return fmt.Errorf("you first need to create server")
 	}
 	ca, err := GetSystemCA()

+ 15 - 14
vpn.go

@@ -64,10 +64,10 @@ type _VPNServerConfig struct {
 	Port         string
 }
 
-// InitServer regenerates keys and certs for a Root CA, and saves them in the database.
-func InitServer(serverName string, hostname string, port string) error {
-	if CheckBootstrapped() {
-		if err := DeleteServer("default"); err != nil {
+// Initialize regenerates keys and certs for a Root CA, and saves them in the database.
+func Initialize(serverName string, hostname string, port string) error {
+	if IsInitialized() {
+		if err := DeInitialize("default"); err != nil {
 			logrus.Errorf("server can not be deleted: %v", err)
 			return err
 		}
@@ -123,9 +123,9 @@ func InitServer(serverName string, hostname string, port string) error {
 	return nil
 }
 
-// DeleteServer deletes the server with the given serverName from the database.
-func DeleteServer(serverName string) error {
-	if !CheckBootstrapped() {
+// DeInitialize deletes the server with the given serverName from the database and frees the allocated resources.
+func DeInitialize(serverName string) error {
+	if !IsInitialized() {
 		return fmt.Errorf("server not found")
 	}
 
@@ -134,7 +134,8 @@ func DeleteServer(serverName string) error {
 	return nil
 }
 
-func sDumpUserOVPNConf(username string) (string, error) {
+// DumpsClientConfig generates .ovpn file for the given vpn user and returns it as a string.
+func DumpsClientConfig(username string) (string, error) {
 	var result bytes.Buffer
 	user, err := GetUser(username)
 	if err != nil {
@@ -177,9 +178,9 @@ func sDumpUserOVPNConf(username string) (string, error) {
 	return result.String(), nil
 }
 
-// DumpUserOVPNConf combines a specially generated config for the client with CA's and Client's certs and Clients key then dumps them to the specified path.
-func DumpUserOVPNConf(username, outPath string) error {
-	result, err := sDumpUserOVPNConf(username)
+// DumpClientConfig generates .ovpn file for the given vpn user and dumps it to outPath.
+func DumpClientConfig(username, outPath string) error {
+	result, err := DumpsClientConfig(username)
 	if err != nil {
 		return err
 	}
@@ -220,7 +221,7 @@ func Emit() error {
 		return fmt.Errorf("iptables executable can not be found")
 	}
 
-	if !CheckBootstrapped() {
+	if !IsInitialized() {
 		return fmt.Errorf("you should create a server first. e.g. $ ovpm vpn create-server")
 	}
 
@@ -332,8 +333,8 @@ func GetServerInstance() (*DBServer, error) {
 	return &server, nil
 }
 
-// CheckBootstrapped checks if there is a default server in the database or not.
-func CheckBootstrapped() bool {
+// IsInitialized checks if there is a default server in the database or not.
+func IsInitialized() bool {
 	var server DBServer
 	db.First(&server)
 	if db.NewRecord(server) {