github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/config/storage.go (about) 1 package config 2 3 import ( 4 "encoding/json" 5 "os" 6 "path" 7 8 "github.com/kubeshop/testkube/pkg/oauth" 9 ) 10 11 const ( 12 APIServerName string = "testkube-api-server" 13 APIServerPort int = 8088 14 DashboardName string = "testkube-dashboard" 15 DashboardPort int = 8080 16 EnterpriseUiName string = "testkube-enterprise-ui" 17 EnterpriseUiPort int = 8080 18 EnterpriseApiName string = "testkube-enterprise-api" 19 EnterpriseApiPort int = 8088 20 EnterpriseApiForwardingPort int = 8090 21 EnterpriseDexName string = "testkube-enterprise-dex" 22 EnterpriseDexPort int = 5556 23 EnterpriseDexForwardingPort int = 5556 24 25 configDirName = ".testkube" 26 configFile = "config.json" 27 ) 28 29 var DefaultConfig = Data{ 30 TelemetryEnabled: true, 31 Namespace: "testkube", 32 APIURI: "http://localhost:8088", 33 APIServerName: APIServerName, 34 APIServerPort: APIServerPort, 35 DashboardName: DashboardName, 36 DashboardPort: DashboardPort, 37 OAuth2Data: OAuth2Data{ 38 Provider: oauth.GithubProviderType, 39 }, 40 } 41 42 func GetStorage(dir string) (Storage, error) { 43 storage := Storage{Dir: dir} 44 err := storage.Init() 45 return storage, err 46 } 47 48 type Storage struct { 49 Dir string 50 } 51 52 func (c *Storage) Load() (data Data, err error) { 53 path, err := c.getPath() 54 if err != nil { 55 return data, err 56 } 57 d, err := os.ReadFile(path) 58 if err != nil { 59 return data, err 60 } 61 err = json.Unmarshal(d, &data) 62 return data, err 63 } 64 65 func (c *Storage) Save(data Data) error { 66 d, err := json.Marshal(data) 67 if err != nil { 68 return err 69 } 70 path, err := c.getPath() 71 if err != nil { 72 return err 73 } 74 return os.WriteFile(path, d, 0700) 75 } 76 77 func (c *Storage) Init() error { 78 var defaultConfig = DefaultConfig 79 // create ConfigWriter dir if not exists 80 dir, err := c.getDir() 81 if err != nil { 82 return err 83 } 84 _, err = os.Stat(dir) 85 if os.IsNotExist(err) { 86 err := os.Mkdir(dir, 0700) 87 if err != nil { 88 return err 89 } 90 } else if err != nil { 91 return err 92 } 93 94 // create empty JSON file if not exists 95 path, err := c.getPath() 96 if err != nil { 97 return err 98 } 99 _, err = os.Stat(path) 100 if os.IsNotExist(err) { 101 f, err := os.Create(path) 102 if err != nil { 103 return err 104 } 105 f.Close() 106 107 return c.Save(defaultConfig) 108 } else if err != nil { 109 return err 110 } 111 112 return nil 113 } 114 115 func (c *Storage) getDir() (string, error) { 116 var err error 117 var dir string 118 if c.Dir != "" { 119 dir = c.Dir 120 } else { 121 dir, err = os.UserHomeDir() 122 if err != nil { 123 return "", err 124 } 125 } 126 127 return path.Join(dir, configDirName), nil 128 } 129 130 func (c *Storage) getPath() (string, error) { 131 dir, err := c.getDir() 132 if err != nil { 133 return "", err 134 } 135 return path.Join(dir, configFile), nil 136 }