@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,97 +0,0 @@
1
- package certReader
2
-
3
- import (
4
- "crypto/x509"
5
- "encoding/asn1"
6
- "encoding/base64"
7
- "encoding/pem"
8
- "errors"
9
- "strconv"
10
- "strings"
11
- )
12
-
13
- var userIdType = asn1.ObjectIdentifier([]int{1, 2, 3, 1})
14
-
15
- type Config struct {
16
- Token string
17
- }
18
-
19
- type Handler struct {
20
- config Config
21
-
22
- CaData, CertData, KeyData []byte
23
-
24
- UserId string
25
- }
26
-
27
- func New(config Config) (h *Handler, err error) {
28
-
29
- h = &Handler{
30
- config: config,
31
- }
32
-
33
- tokens := strings.Split(config.Token, ";")
34
- if len(tokens) != 3 {
35
- return h, errors.New("invalid credentials, try `login` command")
36
- }
37
-
38
- if h.CaData, err = readData(tokens[0]); err != nil {
39
- return
40
- }
41
- if h.KeyData, err = readData(tokens[1]); err != nil {
42
- return
43
- }
44
- if h.CertData, err = readData(tokens[2]); err != nil {
45
- return
46
- }
47
-
48
- roots := x509.NewCertPool()
49
- ok := roots.AppendCertsFromPEM(h.CertData)
50
- if !ok {
51
- return nil, errors.New("failed to parse root certificate")
52
- }
53
-
54
- block, _ := pem.Decode(h.CertData)
55
- if block == nil {
56
- return nil, errors.New("failed to parse certificate PEM")
57
- }
58
- cert, err := x509.ParseCertificate(block.Bytes)
59
- if err != nil {
60
- return nil, errors.New("failed to parse certificate: " + err.Error())
61
- }
62
-
63
- h.UserId, err = func(cert *x509.Certificate) (string, error) {
64
- for _, name := range cert.Subject.Names {
65
- switch {
66
- case name.Type.Equal(userIdType):
67
- return name.Value.(string), nil
68
- }
69
- }
70
- return "", errors.New("bad certificate, try contact support")
71
- }(cert)
72
- if err != nil {
73
- return
74
- }
75
-
76
- return
77
- }
78
-
79
- func readData(value string) (data []byte, err error) {
80
- valueB, err := base64.StdEncoding.DecodeString(value)
81
- if err != nil {
82
- return nil, err
83
- }
84
- value = string(valueB)
85
-
86
- if strings.Contains(value, `\n`) && !strings.HasPrefix(value, `"`) {
87
- value = `"` + value + `"`
88
- }
89
- if !strings.HasPrefix(value, `"`) {
90
- return []byte(value), err
91
- }
92
- valueCaUnquote, err := strconv.Unquote(value)
93
- if err != nil {
94
- return nil, err
95
- }
96
- return []byte(valueCaUnquote), nil
97
- }
@@ -1,90 +0,0 @@
1
- package httpClient
2
-
3
- import (
4
- "bytes"
5
- "io/ioutil"
6
- "net/http"
7
- "time"
8
- )
9
-
10
- type Config struct {
11
- HttpTimeout time.Duration
12
- }
13
-
14
- type Response struct {
15
- StatusCode int
16
- Body []byte
17
- }
18
-
19
- type Handler struct {
20
- config Config
21
- }
22
-
23
- func New(config Config) *Handler {
24
- return &Handler{
25
- config: config,
26
- }
27
- }
28
-
29
- type Option func(cfg *optionConfig)
30
-
31
- func ContentType(contentType string) Option {
32
- return func(cfg *optionConfig) {
33
- cfg.headers["Content-Type"] = contentType
34
- }
35
- }
36
-
37
- func BearerAuthorization(token string) Option {
38
- return func(cfg *optionConfig) {
39
- cfg.headers["Authorization"] = "Bearer " + token
40
- }
41
- }
42
-
43
- type optionConfig struct {
44
- headers map[string]string
45
- }
46
-
47
- func (h *Handler) Put(url string, data []byte, options ...Option) (Response, error) {
48
- return h.do("PUT", url, data, options...)
49
- }
50
-
51
- func (h *Handler) Post(url string, data []byte, options ...Option) (Response, error) {
52
- return h.do("POST", url, data, options...)
53
- }
54
-
55
- func (h *Handler) do(method string, url string, data []byte, options ...Option) (Response, error) {
56
- cfg := &optionConfig{
57
- headers: map[string]string{
58
- "Content-Type": "application/json",
59
- },
60
- }
61
- for _, o := range options {
62
- o(cfg)
63
- }
64
-
65
- client := &http.Client{Timeout: h.config.HttpTimeout}
66
- req, err := http.NewRequest(method, url, bytes.NewReader(data))
67
- if err != nil {
68
- return Response{}, err
69
- }
70
-
71
- for key, value := range cfg.headers {
72
- req.Header.Add(key, value)
73
- }
74
-
75
- resp, err := client.Do(req)
76
- if err != nil {
77
- return Response{}, err
78
- }
79
- defer resp.Body.Close()
80
-
81
- bodyBytes, err := ioutil.ReadAll(resp.Body)
82
- if err != nil {
83
- return Response{}, err
84
- }
85
-
86
- return Response{
87
- StatusCode: resp.StatusCode,
88
- Body: bodyBytes,
89
- }, nil
90
- }
@@ -1,32 +0,0 @@
1
- package logger
2
-
3
- import "fmt"
4
-
5
- type Config struct {
6
- }
7
-
8
- type Handler struct {
9
- config Config
10
- }
11
-
12
- func New(config Config) *Handler {
13
- return &Handler{
14
- config: config,
15
- }
16
- }
17
-
18
- func (h *Handler) Info(a ...interface{}) {
19
- fmt.Println(a...)
20
- }
21
-
22
- func (h *Handler) Warning(a ...interface{}) {
23
- fmt.Println(a...)
24
- }
25
-
26
- func (h *Handler) Error(a ...interface{}) {
27
- fmt.Println(a...)
28
- }
29
-
30
- func (h *Handler) Debug(a ...interface{}) {
31
- fmt.Println(a...)
32
- }
@@ -1,8 +0,0 @@
1
- package logger
2
-
3
- type Logger interface {
4
- Info(a ...interface{})
5
- Warning(a ...interface{})
6
- Error(a ...interface{})
7
- Debug(a ...interface{})
8
- }
@@ -1,111 +0,0 @@
1
- package params
2
-
3
- import (
4
- "os"
5
-
6
- "github.com/zerops-io/zcli/src/service/storage"
7
-
8
- "github.com/spf13/cobra"
9
- "github.com/spf13/viper"
10
- loggerPackage "github.com/zerops-io/zcli/src/service/logger"
11
- )
12
-
13
- type Handler struct {
14
- logger loggerPackage.Logger
15
- storage *storage.Handler
16
-
17
- params map[string]interface{}
18
- viper *viper.Viper
19
- }
20
-
21
- func New(
22
- logger loggerPackage.Logger,
23
- storage *storage.Handler,
24
- ) *Handler {
25
- return &Handler{
26
- logger: logger,
27
- storage: storage,
28
-
29
- params: make(map[string]interface{}),
30
- viper: viper.New(),
31
- }
32
- }
33
-
34
- type Option func(cfg *optionConfig)
35
-
36
- func Persistent() Option {
37
- return func(cfg *optionConfig) {
38
- cfg.persistent = true
39
- }
40
- }
41
-
42
- func FromTempData(f func(data *storage.Data) interface{}) Option {
43
- return func(cfg *optionConfig) {
44
- cfg.loadFromTempData = f
45
- }
46
- }
47
-
48
- type optionConfig struct {
49
- persistent bool
50
- loadFromTempData func(data *storage.Data) interface{}
51
- }
52
-
53
- func (h *Handler) RegisterString(cmd *cobra.Command, name, defaultValue, description string, options ...Option) {
54
- var paramValue string
55
-
56
- cfg := &optionConfig{}
57
- for _, o := range options {
58
- o(cfg)
59
- }
60
-
61
- if cfg.persistent {
62
- cmd.PersistentFlags().StringVar(&paramValue, name, "", description)
63
- h.viper.BindPFlags(cmd.PersistentFlags())
64
- } else {
65
- cmd.Flags().StringVar(&paramValue, name, "", description)
66
- }
67
-
68
- h.params[name] = func() string {
69
- if paramValue != "" {
70
- return paramValue
71
- }
72
- if cfg.loadFromTempData != nil {
73
- value := cfg.loadFromTempData(h.storage.Data)
74
- if v, ok := value.(string); ok {
75
- return v
76
- }
77
- }
78
- if h.viper.GetString(name) != "" {
79
- return h.viper.GetString(name)
80
- }
81
-
82
- return defaultValue
83
- }
84
- }
85
-
86
- func (h *Handler) GetString(name string) string {
87
- if param, exists := h.params[name]; exists {
88
- if v, ok := param.(func() string); ok {
89
- return v()
90
- }
91
- return ""
92
- }
93
- return ""
94
- }
95
-
96
- func (h *Handler) InitViper() error {
97
-
98
- path, err := os.Getwd()
99
- if err != nil {
100
- return err
101
- }
102
- h.viper.AddConfigPath(path)
103
- h.viper.SetConfigName("zcli.config")
104
- h.viper.AutomaticEnv()
105
-
106
- if err := h.viper.ReadInConfig(); err == nil {
107
- h.logger.Info("Using config file:", h.viper.ConfigFileUsed())
108
- }
109
-
110
- return nil
111
- }
@@ -1,71 +0,0 @@
1
- package storage
2
-
3
- import (
4
- "encoding/json"
5
- "io/ioutil"
6
- "os"
7
- )
8
-
9
- type Config struct {
10
- FilePath string
11
- }
12
-
13
- type Handler struct {
14
- config Config
15
-
16
- Data *Data
17
- }
18
-
19
- type Data struct {
20
- ProjectId string
21
- ServerIp string
22
- Token string
23
- }
24
-
25
- func New(config Config) (*Handler, error) {
26
-
27
- h := &Handler{
28
- config: config,
29
- Data: &Data{},
30
- }
31
-
32
- if fileExists(config.FilePath) {
33
- f, err := os.Open(config.FilePath)
34
- if err != nil {
35
- return nil, err
36
- }
37
- defer f.Close()
38
-
39
- bytes, err := ioutil.ReadAll(f)
40
- if err != nil {
41
- return nil, err
42
- }
43
-
44
- err = json.Unmarshal(bytes, &h.Data)
45
- if err != nil {
46
- return nil, err
47
- }
48
- }
49
-
50
- return h, nil
51
- }
52
-
53
- func (h *Handler) Save() error {
54
- data, err := json.Marshal(h.Data)
55
- if err != nil {
56
- return err
57
- }
58
- err = ioutil.WriteFile(h.config.FilePath, data, 0644)
59
- if err != nil {
60
- return err
61
- }
62
- return err
63
- }
64
-
65
- func fileExists(filename string) bool {
66
- info, err := os.Stat(filename)
67
- if os.IsNotExist(err) {
68
- return false
69
- }
70
- return !info.IsDir()
71
- }
@@ -1,49 +0,0 @@
1
- package sudoers
2
-
3
- import (
4
- "errors"
5
- "os/exec"
6
-
7
- "github.com/zerops-io/zcli/src/helpers/cmdRunner"
8
- )
9
-
10
- var IpAlreadySetErr = cmdRunner.IpAlreadySetErr
11
- var CannotFindDeviceErr = cmdRunner.CannotFindDeviceErr
12
- var OperationNotPermitted = cmdRunner.OperationNotPermitted
13
-
14
- type Config struct {
15
- }
16
-
17
- type Handler struct {
18
- config Config
19
- }
20
-
21
- func New(config Config) *Handler {
22
- return &Handler{
23
- config: config,
24
- }
25
- }
26
-
27
- // command with installation if operation is not permitted
28
- func (h *Handler) RunCommand(cmd *exec.Cmd) ([]byte, error) {
29
-
30
- sudoCmd := exec.Command("sudo", cmd.Args...)
31
- sudoCmd.Env = cmd.Env
32
- sudoCmd.Stdin = cmd.Stdin
33
- sudoCmd.Stderr = cmd.Stderr
34
- sudoCmd.Stdout = cmd.Stdout
35
- sudoCmd.Dir = cmd.Dir
36
-
37
- output, err := cmdRunner.Run(sudoCmd)
38
- if err != nil {
39
- if errors.Is(err, OperationNotPermitted) {
40
-
41
- newCmd := exec.Command("sudo", cmd.Args...)
42
-
43
- output, err = cmdRunner.Run(newCmd)
44
- }
45
- }
46
-
47
- return output, err
48
-
49
- }
@@ -1,36 +0,0 @@
1
- package tlsConfig
2
-
3
- import (
4
- "crypto/tls"
5
- "crypto/x509"
6
- "errors"
7
-
8
- "github.com/zerops-io/zcli/src/service/certReader"
9
- )
10
-
11
- func CreateTlsConfig(certReader *certReader.Handler) (tlsConfig *tls.Config, err error) {
12
- tlsConfig = &tls.Config{}
13
- tlsConfig.InsecureSkipVerify = true
14
- tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert
15
-
16
- var crt tls.Certificate
17
- crt, err = tls.X509KeyPair(certReader.CertData, certReader.KeyData)
18
- if err != nil {
19
- return nil, err
20
- }
21
-
22
- tlsConfig.Certificates = []tls.Certificate{crt}
23
-
24
- var caCertPool *x509.CertPool
25
- caCertPool, err = x509.SystemCertPool()
26
- if err != nil {
27
- return nil, err
28
- }
29
- if ok := caCertPool.AppendCertsFromPEM(certReader.CaData); !ok {
30
- return nil, errors.New("error append cert from PEM")
31
- }
32
- tlsConfig.RootCAs = caCertPool
33
- tlsConfig.ClientCAs = caCertPool
34
-
35
- return
36
- }
@@ -1,144 +0,0 @@
1
- package zipClient
2
-
3
- import (
4
- "archive/zip"
5
- "errors"
6
- "io"
7
- "os"
8
- "path"
9
- "path/filepath"
10
- "strings"
11
-
12
- "github.com/zerops-io/zcli/src/service/logger"
13
- )
14
-
15
- type Config struct {
16
- }
17
-
18
- type Handler struct {
19
- config Config
20
- logger logger.Logger
21
- }
22
-
23
- func New(config Config, logger logger.Logger) *Handler {
24
- return &Handler{
25
- config: config,
26
- logger: logger,
27
- }
28
- }
29
-
30
- func (h *Handler) Zip(w io.Writer, workingDir string, sources ...string) error {
31
- archive := zip.NewWriter(w)
32
- defer archive.Close()
33
-
34
- workingDir, err := filepath.Abs(workingDir)
35
- if err != nil {
36
- return err
37
- }
38
-
39
- h.logger.Info("working directory: " + workingDir)
40
-
41
- for _, source := range sources {
42
-
43
- parts := strings.Split(source, "*")
44
- if len(parts) > 2 {
45
- return errors.New("only one *(asterisk) is allowed")
46
- }
47
- if len(parts) == 1 {
48
- parts = []string{
49
- "", parts[0],
50
- }
51
- }
52
-
53
- source := path.Join(workingDir, path.Join(parts...))
54
- source, err := filepath.Abs(source)
55
- if err != nil {
56
- return err
57
- }
58
-
59
- trimPart := path.Join(workingDir, parts[0])
60
-
61
- fileInfo, err := os.Lstat(source)
62
- if err != nil {
63
- return err
64
- }
65
-
66
- if fileInfo.IsDir() {
67
- h.logger.Info("packing directory: " + source)
68
- } else {
69
- h.logger.Info("packing file: " + source)
70
- }
71
-
72
- err = filepath.Walk(source, func(filePath string, info os.FileInfo, err error) error {
73
- if err != nil {
74
- return err
75
- }
76
-
77
- header, err := zip.FileInfoHeader(info)
78
- if err != nil {
79
- return err
80
- }
81
-
82
- header.Name = strings.TrimPrefix(func(filePath string) string {
83
- if info.IsDir() {
84
- filePath += "/"
85
- }
86
-
87
- filePath = strings.TrimPrefix(filePath, trimPart)
88
-
89
- if filePath == parts[0] {
90
- return ""
91
- }
92
- return strings.TrimPrefix(filePath, parts[0])
93
-
94
- }(filePath), "/")
95
-
96
- if header.Name == "" {
97
- return nil
98
- }
99
-
100
- if !info.IsDir() {
101
- header.Method = zip.Deflate
102
- }
103
-
104
- writer, err := archive.CreateHeader(header)
105
- if err != nil {
106
- return err
107
- }
108
-
109
- if info.IsDir() {
110
- return nil
111
- }
112
-
113
- if header.FileInfo().Mode()&os.ModeSymlink != 0 {
114
- symlink, err := os.Readlink(filePath)
115
- if err != nil {
116
- return err
117
- }
118
-
119
- _, err = writer.Write([]byte(symlink))
120
- if err != nil {
121
- return err
122
- }
123
- } else {
124
- file, err := os.Open(filePath)
125
- if err != nil {
126
- return err
127
- }
128
- defer file.Close()
129
- _, err = io.Copy(writer, file)
130
- if err != nil {
131
- return err
132
- }
133
- }
134
-
135
- return nil
136
- })
137
-
138
- if err != nil {
139
- return err
140
- }
141
- }
142
-
143
- return nil
144
- }
File without changes