termcloud/internal/cli/config.go
2025-08-07 19:10:13 +01:00

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 != ""
}