package services import ( "fmt" "os" "path/filepath" "strings" ) type ConfigManager struct { cfgDir string } func NewConfigManager(cfgDir string) *ConfigManager { return &ConfigManager{cfgDir: cfgDir} } type ConfigInfo struct { Name string `json:"name"` Size int64 `json:"size"` } func (cm *ConfigManager) List() ([]ConfigInfo, error) { entries, err := os.ReadDir(cm.cfgDir) if err != nil { if os.IsNotExist(err) { return []ConfigInfo{}, nil } return nil, err } var configs []ConfigInfo for _, e := range entries { if !e.IsDir() && strings.HasSuffix(e.Name(), ".cfg") { info, _ := e.Info() configs = append(configs, ConfigInfo{ Name: strings.TrimSuffix(e.Name(), ".cfg"), Size: info.Size(), }) } } return configs, nil } func (cm *ConfigManager) Get(name string) (string, error) { path := cm.path(name) data, err := os.ReadFile(path) if err != nil { if os.IsNotExist(err) { return "", fmt.Errorf("config not found") } return "", err } return string(data), nil } func (cm *ConfigManager) Create(name, content string) error { path := cm.path(name) if _, err := os.Stat(path); err == nil { return fmt.Errorf("config already exists") } return os.WriteFile(path, []byte(content), 0644) } func (cm *ConfigManager) Update(name, content string) error { return os.WriteFile(cm.path(name), []byte(content), 0644) } func (cm *ConfigManager) Delete(name string) error { return os.Remove(cm.path(name)) } func (cm *ConfigManager) Duplicate(name, newName string) error { content, err := cm.Get(name) if err != nil { return err } return cm.Create(newName, content) } func (cm *ConfigManager) path(name string) string { return filepath.Join(cm.cfgDir, sanitizeConfigName(name)+".cfg") } func sanitizeConfigName(name string) string { name = filepath.Base(name) name = strings.TrimSuffix(name, ".cfg") return name }