@zerops/zcli 1.0.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/package.json +12 -7
  2. package/{tools/npm → utils}/binary.js +8 -4
  3. package/{tools/npm → utils}/install.js +0 -0
  4. package/{tools/npm → utils}/run.js +0 -0
  5. package/{tools/npm → utils}/uninstall.js +0 -0
  6. package/.github/workflows/master.yml +0 -36
  7. package/.github/workflows/tag.yml +0 -67
  8. package/.golangci.yaml +0 -58
  9. package/LICENSE +0 -1
  10. package/README.md +0 -2
  11. package/bin/.gitignore +0 -2
  12. package/cmd/deploy.go +0 -65
  13. package/cmd/di.go +0 -65
  14. package/cmd/login.go +0 -48
  15. package/cmd/root.go +0 -70
  16. package/cmd/startVpn.go +0 -59
  17. package/cmd/stopVpn.go +0 -36
  18. package/go.mod +0 -21
  19. package/go.sum +0 -230
  20. package/main.go +0 -13
  21. package/src/command/deploy/handler.go +0 -43
  22. package/src/command/deploy/handler_checkProcess.go +0 -38
  23. package/src/command/deploy/handler_run.go +0 -126
  24. package/src/command/login/handler.go +0 -128
  25. package/src/command/login/handler_parseRestApiError.go +0 -48
  26. package/src/command/startVpn/handler.go +0 -150
  27. package/src/command/startVpn/handler_clean_linux.go +0 -24
  28. package/src/command/startVpn/handler_clean_linux_macos.go +0 -19
  29. package/src/command/startVpn/handler_generateKeys.go +0 -26
  30. package/src/command/startVpn/handler_isVpnAlive.go +0 -23
  31. package/src/command/startVpn/handler_setVpn_linux.go +0 -97
  32. package/src/command/startVpn/handler_setVpn_macos.go +0 -98
  33. package/src/command/startVpn/handler_startVpnClient.go +0 -27
  34. package/src/command/stopVpn/handler.go +0 -55
  35. package/src/command/stopVpn/handler_clean_linux.go +0 -24
  36. package/src/command/stopVpn/handler_clean_linux_macos.go +0 -19
  37. package/src/command/userInfo/handler.go +0 -21
  38. package/src/helpers/cmdRunner/run.go +0 -40
  39. package/src/helpers/grpcErrors.go +0 -40
  40. package/src/helpers/ip.go +0 -11
  41. package/src/service/certReader/handler.go +0 -97
  42. package/src/service/httpClient/handler.go +0 -90
  43. package/src/service/logger/handler.go +0 -32
  44. package/src/service/logger/interface.go +0 -8
  45. package/src/service/params/handler.go +0 -111
  46. package/src/service/storage/handler.go +0 -71
  47. package/src/service/sudoers/handler.go +0 -49
  48. package/src/service/tlsConfig/handler.go +0 -36
  49. package/src/service/zipClient/handler.go +0 -144
  50. package/src/service/zipClient/test/var/www/dir/file2.1.txt +0 -1
  51. package/src/service/zipClient/test/var/www/dir/file2.2.txt +0 -0
  52. package/src/service/zipClient/test/var/www/dir/subDir/file3.1.txt +0 -0
  53. package/src/service/zipClient/test/var/www/dir/subDir/file3.2.txt +0 -0
  54. package/src/service/zipClient/test/var/www/file1.1.txt +0 -0
  55. package/src/service/zipClient/test/zip_test.go +0 -289
  56. package/src/zeropsApiProtocol/build-pb +0 -13
  57. package/src/zeropsApiProtocol/build-pb-generate.go +0 -3
  58. package/src/zeropsApiProtocol/protocol_extra.go +0 -19
  59. package/src/zeropsApiProtocol/zeropsApiProtocol.pb.go +0 -5518
  60. package/src/zeropsApiProtocol/zeropsApiProtocol.proto +0 -819
  61. package/src/zeropsVpnProtocol/build-pb +0 -13
  62. package/src/zeropsVpnProtocol/build-pb-generate.go +0 -3
  63. package/src/zeropsVpnProtocol/protocol_extra.go +0 -45
  64. package/src/zeropsVpnProtocol/zeropsVpnProtocol.pb.go +0 -578
  65. package/src/zeropsVpnProtocol/zeropsVpnProtocol.proto +0 -58
  66. package/tools/gomodrun.go +0 -60
  67. package/tools/install.sh +0 -40
  68. package/tools/npm/match-version.js +0 -12
@@ -1,150 +0,0 @@
1
- package startVpn
2
-
3
- import (
4
- "context"
5
- "errors"
6
- "net"
7
-
8
- "github.com/zerops-io/zcli/src/helpers"
9
-
10
- "github.com/zerops-io/zcli/src/service/logger"
11
- "github.com/zerops-io/zcli/src/service/storage"
12
- "github.com/zerops-io/zcli/src/service/sudoers"
13
- "github.com/zerops-io/zcli/src/zeropsApiProtocol"
14
- "github.com/zerops-io/zcli/src/zeropsVpnProtocol"
15
- )
16
-
17
- const wireguardPort = "51820"
18
- const vpnApiGrpcPort = ":64510"
19
-
20
- type Config struct {
21
- VpnAddress string
22
- UserId string
23
- }
24
-
25
- type RunConfig struct {
26
- ProjectName string
27
- }
28
-
29
- type Handler struct {
30
- config Config
31
- logger logger.Logger
32
- apiGrpcClient zeropsApiProtocol.ZeropsApiProtocolClient
33
- sudoers *sudoers.Handler
34
- storage *storage.Handler
35
- }
36
-
37
- func New(
38
- config Config,
39
- logger logger.Logger,
40
- apiGrpcClient zeropsApiProtocol.ZeropsApiProtocolClient,
41
- sudoers *sudoers.Handler,
42
- storage *storage.Handler,
43
- ) *Handler {
44
- return &Handler{
45
- config: config,
46
- logger: logger,
47
- apiGrpcClient: apiGrpcClient,
48
- sudoers: sudoers,
49
- storage: storage,
50
- }
51
- }
52
-
53
- func (h *Handler) Run(ctx context.Context, config RunConfig) error {
54
-
55
- if config.ProjectName == "" {
56
- return errors.New("project name must be filled")
57
- }
58
-
59
- projectsResponse, err := h.apiGrpcClient.GetProjectsByName(ctx, &zeropsApiProtocol.GetProjectsByNameRequest{
60
- Name: config.ProjectName,
61
- })
62
- if err := helpers.HandleGrpcApiError(projectsResponse, err); err != nil {
63
- return err
64
- }
65
-
66
- projectsResponse.GetOutput().GetProjects()
67
-
68
- projects := projectsResponse.GetOutput().GetProjects()
69
- if len(projects) == 0 {
70
- return errors.New("project not found")
71
- }
72
- if len(projects) > 1 {
73
- return errors.New("there are multiple project with same name")
74
- }
75
- project := projects[0]
76
-
77
- if h.storage.Data.ProjectId != "" && project.GetId() != h.storage.Data.ProjectId {
78
- if h.isVpnAlive() {
79
- return errors.New("vpn is started for another project, use stopVpn first")
80
- }
81
- }
82
-
83
- err = h.cleanVpn()
84
- if err != nil {
85
- return err
86
- }
87
-
88
- publicKey, privateKey, err := h.generateKeys()
89
- if err != nil {
90
- return err
91
- }
92
-
93
- apiVpnRequestResponse, err := h.apiGrpcClient.PostVpnRequest(ctx, &zeropsApiProtocol.PostVpnRequestRequest{
94
- Id: project.GetId(),
95
- ClientPublicKey: publicKey,
96
- })
97
- if err := helpers.HandleGrpcApiError(apiVpnRequestResponse, err); err != nil {
98
- return err
99
- }
100
-
101
- expiry := zeropsApiProtocol.FromProtoTimestamp(apiVpnRequestResponse.GetOutput().GetExpiry())
102
- signature := apiVpnRequestResponse.GetOutput().GetSignature()
103
-
104
- ipRecords, err := net.LookupIP(h.config.VpnAddress)
105
- if err != nil {
106
- return err
107
- }
108
-
109
- vpnAddress := ""
110
- for _, ip := range ipRecords {
111
- vpnAddress = helpers.IpToString(ip)
112
- break
113
- }
114
-
115
- vpnGrpcClient, closeFunc, err := h.startVpnClient(ctx, vpnAddress)
116
- if err != nil {
117
- return err
118
- }
119
- defer closeFunc()
120
-
121
- startVpnResponse, err := vpnGrpcClient.StartVpn(ctx, &zeropsVpnProtocol.StartVpnRequest{
122
- InstanceId: project.GetId(),
123
- UserId: h.config.UserId,
124
- ClientPublicKey: publicKey,
125
- Signature: signature,
126
- Expiry: zeropsVpnProtocol.ToProtoTimestamp(expiry),
127
- })
128
- if err := helpers.HandleVpnApiError(startVpnResponse, err); err != nil {
129
- return err
130
- }
131
-
132
- err = h.setVpn(vpnAddress, privateKey, startVpnResponse)
133
- if err != nil {
134
- return err
135
- }
136
-
137
- if h.isVpnAlive() {
138
- h.logger.Info("\nvpn connection is established\n")
139
- } else {
140
- return errors.New("vpn is not connected")
141
- }
142
-
143
- h.storage.Data.ProjectId = project.GetId()
144
- err = h.storage.Save()
145
- if err != nil {
146
- return err
147
- }
148
-
149
- return nil
150
- }
@@ -1,24 +0,0 @@
1
- // +build linux
2
-
3
- package startVpn
4
-
5
- import (
6
- "errors"
7
- "os/exec"
8
-
9
- "github.com/zerops-io/zcli/src/service/sudoers"
10
- )
11
-
12
- func (h *Handler) cleanVpn() error {
13
-
14
- var err error
15
-
16
- _, err = h.sudoers.RunCommand(exec.Command("ip", "link", "del", "dev", "wg0"))
17
- if err != nil {
18
- if !errors.Is(err, sudoers.CannotFindDeviceErr) {
19
- return err
20
- }
21
- }
22
-
23
- return nil
24
- }
@@ -1,19 +0,0 @@
1
- // +build darwin
2
-
3
- package startVpn
4
-
5
- import "os/exec"
6
-
7
- func (h *Handler) cleanVpn() error {
8
-
9
- var err error
10
-
11
- cmd := "ps aux | grep wireguard | grep -v grep | awk '{print $2}' | xargs sudo kill"
12
-
13
- _, err = h.sudoers.RunCommand(exec.Command("bash", "-c", cmd))
14
- if err != nil {
15
- return err
16
- }
17
-
18
- return nil
19
- }
@@ -1,26 +0,0 @@
1
- package startVpn
2
-
3
- import (
4
- "bytes"
5
- "os/exec"
6
- )
7
-
8
- func (h *Handler) generateKeys() (public, private string, err error) {
9
-
10
- privateKeyOutput, err := h.sudoers.RunCommand(exec.Command("wg", "genkey"))
11
- if err != nil {
12
- return
13
- }
14
- privateKey := privateKeyOutput[0 : len(privateKeyOutput)-1]
15
-
16
- cmd := exec.Command("wg", "pubkey")
17
- cmd.Stdin = bytes.NewReader(privateKey)
18
- publicKeyOutput, err := h.sudoers.RunCommand(cmd)
19
- if err != nil {
20
- return
21
- }
22
-
23
- publicKey := publicKeyOutput[0 : len(publicKeyOutput)-1]
24
-
25
- return string(publicKey), string(privateKey), nil
26
- }
@@ -1,23 +0,0 @@
1
- package startVpn
2
-
3
- import (
4
- "os/exec"
5
- )
6
-
7
- func (h *Handler) isVpnAlive() bool {
8
-
9
- if h.storage.Data.ServerIp == "" {
10
- return false
11
- }
12
-
13
- for i := 0; i < 3; i++ {
14
- _, err := exec.Command("ping6", h.storage.Data.ServerIp, "-c", "1").Output()
15
- if err != nil {
16
- continue
17
- }
18
-
19
- return true
20
- }
21
-
22
- return false
23
- }
@@ -1,97 +0,0 @@
1
- // +build linux
2
-
3
- package startVpn
4
-
5
- import (
6
- "errors"
7
- "io/ioutil"
8
- "os"
9
- "os/exec"
10
- "path"
11
- "strconv"
12
-
13
- "github.com/google/uuid"
14
- "github.com/zerops-io/zcli/src/service/sudoers"
15
- "github.com/zerops-io/zcli/src/zeropsVpnProtocol"
16
- )
17
-
18
- func (h *Handler) setVpn(selectedVpnAddress, privateKey string, response *zeropsVpnProtocol.StartVpnResponse) error {
19
- var err error
20
-
21
- _, err = h.sudoers.RunCommand(exec.Command("ip", "link", "add", "wg0", "type", "wireguard"))
22
- if err != nil {
23
- if !errors.Is(err, sudoers.IpAlreadySetErr) {
24
- return err
25
- }
26
- }
27
-
28
- _, err = h.sudoers.RunCommand(exec.Command("ip", "link", "set", "mtu", "1420", "up", "dev", "wg0"))
29
- if err != nil {
30
- return err
31
- }
32
-
33
- {
34
- privateKeyName := uuid.New().String()
35
- tempPrivateKeyFile := path.Join(os.TempDir(), privateKeyName)
36
- err = ioutil.WriteFile(tempPrivateKeyFile, []byte(privateKey), 0755)
37
- if err != nil {
38
- return err
39
- }
40
- _, err = h.sudoers.RunCommand(exec.Command("wg", "set", "wg0", "private-key", tempPrivateKeyFile))
41
- if err != nil {
42
- return err
43
- }
44
- err = os.Remove(tempPrivateKeyFile)
45
- if err != nil {
46
- return err
47
- }
48
- }
49
-
50
- _, err = h.sudoers.RunCommand(exec.Command("ip", "link", "set", "wg0", "up"))
51
- if err != nil {
52
- return err
53
- }
54
-
55
- _, err = h.sudoers.RunCommand(exec.Command("wg", "set", "wg0", "listen-port", wireguardPort))
56
- if err != nil {
57
- return err
58
- }
59
-
60
- clientIp := zeropsVpnProtocol.FromProtoIP(response.GetVpn().GetAssignedClientIp())
61
- serverIp := zeropsVpnProtocol.FromProtoIP(response.GetVpn().GetServerIp())
62
- vpnRange := zeropsVpnProtocol.FromProtoIPRange(response.GetVpn().GetVpnIpRange())
63
-
64
- args := []string{
65
- "set", "wg0",
66
- "peer", response.GetVpn().GetServerPublicKey(),
67
- "allowed-ips", vpnRange.String(),
68
- "endpoint", selectedVpnAddress + ":" + strconv.Itoa(int(response.GetVpn().GetPort())),
69
- "persistent-keepalive", "25",
70
- }
71
- _, err = h.sudoers.RunCommand(exec.Command("wg", args...))
72
- if err != nil {
73
- if !errors.Is(err, sudoers.IpAlreadySetErr) {
74
- panic(err)
75
- }
76
- }
77
-
78
- _, err = h.sudoers.RunCommand(exec.Command("ip", "-6", "address", "add", clientIp.String(), "dev", "wg0"))
79
- if err != nil {
80
- return err
81
- }
82
-
83
- _, err = h.sudoers.RunCommand(exec.Command("ip", "route", "add", vpnRange.String(), "dev", "wg0"))
84
- if err != nil {
85
- return err
86
- }
87
-
88
- h.logger.Debug("assigned client address: " + clientIp.String())
89
- h.logger.Debug("assigned vpn server: " + selectedVpnAddress + ":" + strconv.Itoa(int(response.GetVpn().GetPort())))
90
- h.logger.Debug("server public key: " + response.GetVpn().GetServerPublicKey())
91
- h.logger.Debug("serverIp address: " + serverIp.String())
92
- h.logger.Debug("vpnRange: " + vpnRange.String())
93
-
94
- h.storage.Data.ServerIp = serverIp.String()
95
-
96
- return nil
97
- }
@@ -1,98 +0,0 @@
1
- // +build darwin
2
-
3
- package startVpn
4
-
5
- import (
6
- "errors"
7
- "fmt"
8
- "io/ioutil"
9
- "os"
10
- "os/exec"
11
- "path"
12
- "regexp"
13
- "strconv"
14
-
15
- "github.com/zerops-io/zcli/src/service/sudoers"
16
-
17
- "github.com/google/uuid"
18
- "github.com/zerops-io/zcli/src/zeropsVpnProtocol"
19
- )
20
-
21
- func (h *Handler) setVpn(selectedVpnAddress, privateKey string, response *zeropsVpnProtocol.StartVpnResponse) error {
22
- var err error
23
-
24
- output, err := h.sudoers.RunCommand(exec.Command("wireguard-go", "utun"))
25
- if err != nil {
26
- return err
27
- }
28
-
29
- re := regexp.MustCompile(`INFO: \((.*)\)`)
30
- submatches := re.FindSubmatch(output)
31
- if len(submatches) != 2 {
32
- return errors.New("vpn interface not found")
33
- }
34
-
35
- interfaceName := string(submatches[1])
36
-
37
- {
38
- privateKeyName := uuid.New().String()
39
- tempPrivateKeyFile := path.Join(os.TempDir(), privateKeyName)
40
-
41
- fmt.Println(tempPrivateKeyFile)
42
- err = ioutil.WriteFile(tempPrivateKeyFile, []byte(privateKey), 0755)
43
- if err != nil {
44
- return err
45
- }
46
- _, err = h.sudoers.RunCommand(exec.Command("wg", "set", interfaceName, "private-key", tempPrivateKeyFile))
47
- if err != nil {
48
- return err
49
- }
50
- err = os.Remove(tempPrivateKeyFile)
51
- if err != nil {
52
- return err
53
- }
54
- }
55
-
56
- _, err = h.sudoers.RunCommand(exec.Command("wg", "set", interfaceName, "listen-port", wireguardPort))
57
- if err != nil {
58
- return err
59
- }
60
-
61
- clientIp := zeropsVpnProtocol.FromProtoIP(response.GetVpn().GetAssignedClientIp())
62
- serverIp := zeropsVpnProtocol.FromProtoIP(response.GetVpn().GetServerIp())
63
- vpnRange := zeropsVpnProtocol.FromProtoIPRange(response.GetVpn().GetVpnIpRange())
64
-
65
- args := []string{
66
- "set", interfaceName,
67
- "peer", response.GetVpn().GetServerPublicKey(),
68
- "allowed-ips", vpnRange.String(),
69
- "endpoint", selectedVpnAddress + ":" + strconv.Itoa(int(response.GetVpn().GetPort())),
70
- "persistent-keepalive", "25",
71
- }
72
- _, err = h.sudoers.RunCommand(exec.Command("wg", args...))
73
- if err != nil {
74
- if !errors.Is(err, sudoers.IpAlreadySetErr) {
75
- panic(err)
76
- }
77
- }
78
-
79
- _, err = h.sudoers.RunCommand(exec.Command("ifconfig", interfaceName, "inet6", clientIp.String(), "mtu", "1420"))
80
- if err != nil {
81
- return err
82
- }
83
-
84
- _, err = h.sudoers.RunCommand(exec.Command("route", "add", "-inet6", vpnRange.String(), serverIp.String()))
85
- if err != nil {
86
- return err
87
- }
88
-
89
- h.logger.Debug("assigned client address: " + clientIp.String())
90
- h.logger.Debug("assigned vpn server: " + selectedVpnAddress + ":" + strconv.Itoa(int(response.GetVpn().GetPort())))
91
- h.logger.Debug("server public key: " + response.GetVpn().GetServerPublicKey())
92
- h.logger.Debug("serverIp address: " + serverIp.String())
93
- h.logger.Debug("vpnRange: " + vpnRange.String())
94
-
95
- h.storage.Data.ServerIp = serverIp.String()
96
-
97
- return nil
98
- }
@@ -1,27 +0,0 @@
1
- package startVpn
2
-
3
- import (
4
- "context"
5
-
6
- "github.com/zerops-io/zcli/src/zeropsVpnProtocol"
7
- "google.golang.org/grpc"
8
- )
9
-
10
- func (h *Handler) startVpnClient(ctx context.Context, targetAddress string) (_ zeropsVpnProtocol.ZeropsVpnProtocolClient, closeFunc func(), _ error) {
11
-
12
- var dialOpts []grpc.DialOption
13
- dialOpts = append(dialOpts, grpc.WithInsecure())
14
-
15
- connection, err := grpc.DialContext(
16
- ctx,
17
- targetAddress+vpnApiGrpcPort,
18
- dialOpts...,
19
- )
20
- if err != nil {
21
- return nil, nil, err
22
- }
23
-
24
- return zeropsVpnProtocol.NewZeropsVpnProtocolClient(connection), func() {
25
- _ = connection.Close()
26
- }, nil
27
- }
@@ -1,55 +0,0 @@
1
- package stopVpn
2
-
3
- import (
4
- "context"
5
-
6
- "github.com/zerops-io/zcli/src/service/logger"
7
- "github.com/zerops-io/zcli/src/service/storage"
8
- "github.com/zerops-io/zcli/src/service/sudoers"
9
- )
10
-
11
- type Config struct {
12
- }
13
-
14
- type RunConfig struct {
15
- }
16
-
17
- type Handler struct {
18
- config Config
19
- logger logger.Logger
20
- sudoers *sudoers.Handler
21
- storage *storage.Handler
22
- }
23
-
24
- func New(
25
- config Config,
26
- logger logger.Logger,
27
- sudoers *sudoers.Handler,
28
- storage *storage.Handler,
29
- ) *Handler {
30
- return &Handler{
31
- config: config,
32
- logger: logger,
33
- sudoers: sudoers,
34
- storage: storage,
35
- }
36
- }
37
-
38
- func (h *Handler) Run(_ context.Context, _ RunConfig) error {
39
-
40
- err := h.cleanVpn()
41
- if err != nil {
42
- return err
43
- }
44
-
45
- h.storage.Data.ProjectId = ""
46
- h.storage.Data.ServerIp = ""
47
- err = h.storage.Save()
48
- if err != nil {
49
- return err
50
- }
51
-
52
- h.logger.Info("\nvpn connection was closed\n")
53
-
54
- return nil
55
- }
@@ -1,24 +0,0 @@
1
- // +build linux
2
-
3
- package stopVpn
4
-
5
- import (
6
- "errors"
7
- "os/exec"
8
-
9
- "github.com/zerops-io/zcli/src/service/sudoers"
10
- )
11
-
12
- func (h *Handler) cleanVpn() error {
13
-
14
- var err error
15
-
16
- _, err = h.sudoers.RunCommand(exec.Command("ip", "link", "del", "dev", "wg0"))
17
- if err != nil {
18
- if !errors.Is(err, sudoers.CannotFindDeviceErr) {
19
- return err
20
- }
21
- }
22
-
23
- return nil
24
- }
@@ -1,19 +0,0 @@
1
- // +build darwin
2
-
3
- package stopVpn
4
-
5
- import "os/exec"
6
-
7
- func (h *Handler) cleanVpn() error {
8
-
9
- var err error
10
-
11
- cmd := "ps aux | grep wireguard | grep -v grep | awk '{print $2}' | xargs sudo kill"
12
-
13
- _, err = h.sudoers.RunCommand(exec.Command("bash", "-c", cmd))
14
- if err != nil {
15
- return err
16
- }
17
-
18
- return nil
19
- }
@@ -1,21 +0,0 @@
1
- package userInfo
2
-
3
- import (
4
- "context"
5
- "fmt"
6
-
7
- "github.com/zerops-io/zcli/src/helpers"
8
- "github.com/zerops-io/zcli/src/zeropsApiProtocol"
9
- )
10
-
11
- func Run(ctx context.Context, apiGrpcClient zeropsApiProtocol.ZeropsApiProtocolClient) error {
12
-
13
- userInfoResponse, err := apiGrpcClient.GetUserInfo(ctx, &zeropsApiProtocol.GetUserInfoRequest{})
14
- if err := helpers.HandleGrpcApiError(userInfoResponse, err); err != nil {
15
- return err
16
- }
17
-
18
- fmt.Println(userInfoResponse.GetOutput())
19
-
20
- return nil
21
- }
@@ -1,40 +0,0 @@
1
- package cmdRunner
2
-
3
- import (
4
- "bytes"
5
- "errors"
6
- "os/exec"
7
- "strings"
8
- )
9
-
10
- var IpAlreadySetErr = errors.New("RTNETLINK answers: File exists")
11
- var CannotFindDeviceErr = errors.New(`Cannot find device "wg0"`)
12
- var OperationNotPermitted = errors.New(`Operation not permitted`)
13
-
14
- func Run(cmd *exec.Cmd) ([]byte, error) {
15
- output := &bytes.Buffer{}
16
- errOutput := &bytes.Buffer{}
17
- cmd.Stdout = output
18
- cmd.Stderr = errOutput
19
-
20
- if err := cmd.Run(); err != nil {
21
-
22
-
23
- if errOutput.Len() > 0 {
24
- errOutputString := string(errOutput.Bytes()[0 : errOutput.Len()-1])
25
-
26
- if strings.Contains(errOutputString, OperationNotPermitted.Error()) {
27
- return nil, OperationNotPermitted
28
- }
29
-
30
- for _, e := range []error{IpAlreadySetErr, CannotFindDeviceErr} {
31
- if errOutputString == e.Error() {
32
- return nil, e
33
- }
34
- }
35
- }
36
- return nil, err
37
- }
38
-
39
- return output.Bytes(), nil
40
- }
@@ -1,40 +0,0 @@
1
- package helpers
2
-
3
- import (
4
- "errors"
5
-
6
- "github.com/zerops-io/zcli/src/zeropsApiProtocol"
7
- "github.com/zerops-io/zcli/src/zeropsVpnProtocol"
8
- )
9
-
10
- func HandleGrpcApiError(
11
- response interface {
12
- GetError() *zeropsApiProtocol.Error
13
- },
14
- err error,
15
- ) error {
16
- if err != nil {
17
- return err
18
- }
19
- if response.GetError().GetCode() != zeropsApiProtocol.ErrorCode_NO_ERROR {
20
- return errors.New(response.GetError().GetMessage())
21
- }
22
-
23
- return nil
24
- }
25
-
26
- func HandleVpnApiError(
27
- response interface {
28
- GetError() *zeropsVpnProtocol.Error
29
- },
30
- err error,
31
- ) error {
32
- if err != nil {
33
- return err
34
- }
35
- if response.GetError().GetCode() != zeropsVpnProtocol.ErrorCode_NO_ERROR {
36
- return errors.New(response.GetError().GetMessage())
37
- }
38
-
39
- return nil
40
- }
package/src/helpers/ip.go DELETED
@@ -1,11 +0,0 @@
1
- package helpers
2
-
3
- import "net"
4
-
5
- func IpToString(ip net.IP) string {
6
- if ip.To16() != nil {
7
- return "[" + ip.String() + "]"
8
- }
9
-
10
- return ip.String()
11
- }