84 lines
1.5 KiB
Go
84 lines
1.5 KiB
Go
package cli
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Config struct {
|
|
ServerURL string `json:"serverUrl"`
|
|
AccessToken string `json:"accessToken"`
|
|
AccountNumber string `json:"accountNumber"`
|
|
}
|
|
|
|
func GetConfigDir() (string, error) {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
configDir := filepath.Join(home, ".tcman")
|
|
if err := os.MkdirAll(configDir, 0755); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return configDir, nil
|
|
}
|
|
|
|
func GetConfigPath() (string, error) {
|
|
configDir, err := GetConfigDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return filepath.Join(configDir, "config.json"), nil
|
|
}
|
|
|
|
func LoadConfig() (*Config, error) {
|
|
configPath, err := GetConfigPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return &Config{
|
|
ServerURL: "http://localhost:8080",
|
|
}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
var config Config
|
|
if err := json.Unmarshal(data, &config); err != nil {
|
|
return nil, fmt.Errorf("invalid config file: %w", err)
|
|
}
|
|
|
|
if config.ServerURL == "" {
|
|
config.ServerURL = "http://localhost:8080"
|
|
}
|
|
|
|
return &config, nil
|
|
}
|
|
|
|
func (c *Config) Save() error {
|
|
configPath, err := GetConfigPath()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data, err := json.MarshalIndent(c, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(configPath, data, 0644)
|
|
}
|
|
|
|
func (c *Config) IsAuthenticated() bool {
|
|
return c.AccessToken != "" && c.AccountNumber != ""
|
|
}
|