1
0

config.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package config
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. )
  7. // Config holds the CLI configuration
  8. type Config struct {
  9. ServerURL string `json:"server_url"`
  10. Token string `json:"token"`
  11. UserEmail string `json:"user_email"`
  12. }
  13. // configPath returns the path to the config file
  14. func configPath() (string, error) {
  15. homeDir, err := os.UserHomeDir()
  16. if err != nil {
  17. return "", err
  18. }
  19. return filepath.Join(homeDir, ".arp_cli", "config.json"), nil
  20. }
  21. // Load reads the configuration from disk
  22. func Load() (*Config, error) {
  23. path, err := configPath()
  24. if err != nil {
  25. return nil, err
  26. }
  27. data, err := os.ReadFile(path)
  28. if err != nil {
  29. if os.IsNotExist(err) {
  30. return &Config{}, nil
  31. }
  32. return nil, err
  33. }
  34. var cfg Config
  35. if err := json.Unmarshal(data, &cfg); err != nil {
  36. return nil, err
  37. }
  38. return &cfg, nil
  39. }
  40. // Save writes the configuration to disk
  41. func Save(cfg *Config) error {
  42. path, err := configPath()
  43. if err != nil {
  44. return err
  45. }
  46. // Ensure directory exists
  47. dir := filepath.Dir(path)
  48. if err := os.MkdirAll(dir, 0700); err != nil {
  49. return err
  50. }
  51. data, err := json.MarshalIndent(cfg, "", " ")
  52. if err != nil {
  53. return err
  54. }
  55. return os.WriteFile(path, data, 0600)
  56. }
  57. // Clear removes the stored token but keeps the server URL
  58. func Clear() error {
  59. cfg, err := Load()
  60. if err != nil {
  61. return err
  62. }
  63. cfg.Token = ""
  64. cfg.UserEmail = ""
  65. return Save(cfg)
  66. }
  67. // SetServerURL updates the server URL in the config
  68. func SetServerURL(url string) error {
  69. cfg, err := Load()
  70. if err != nil {
  71. return err
  72. }
  73. cfg.ServerURL = url
  74. return Save(cfg)
  75. }
  76. // SetToken updates the token and user email in the config
  77. func SetToken(token, email string) error {
  78. cfg, err := Load()
  79. if err != nil {
  80. return err
  81. }
  82. cfg.Token = token
  83. cfg.UserEmail = email
  84. return Save(cfg)
  85. }