Files
honeydany/app/dashboard/config_manager.go
T
2025-09-28 21:28:39 +01:00

96 lines
2.6 KiB
Go

package dashboard
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
)
// ConfigManager manages web services configuration
type ConfigManager struct {
configPath string
}
// NewConfigManager creates a new config manager
func NewConfigManager(configPath string) *ConfigManager {
return &ConfigManager{
configPath: configPath,
}
}
// GetWebServices returns the current web services configuration
func (cm *ConfigManager) GetWebServices() []WebServiceConfig {
// Try to read from config file
if data, err := os.ReadFile(cm.configPath); err == nil {
var config struct {
WebServices struct {
Generic []WebServiceConfig `json:"generic"`
} `json:"web_services"`
}
if err := json.Unmarshal(data, &config); err == nil {
// If web services section exists, return it (even if empty)
return config.WebServices.Generic
}
}
// Only return default configuration on first run (when config doesn't exist)
// Check if this is truly the first run by looking for any config file
if _, err := os.Stat(cm.configPath); os.IsNotExist(err) {
// First run - create default configuration
defaultServices := []WebServiceConfig{
{
Enabled: false,
Port: 9001,
Name: "admin-panel",
Path: "/admin",
TemplateName: "admin-login.html",
UseHTTPS: false,
},
}
// Save the default configuration so it can be modified later
cm.SaveWebServices(defaultServices)
return defaultServices
}
// Config file exists but web_services section is missing or corrupted
// Return empty slice to allow full user control
return []WebServiceConfig{}
}
// SaveWebServices saves the web services configuration
func (cm *ConfigManager) SaveWebServices(services []WebServiceConfig) error {
// Read existing config
var config map[string]interface{}
if data, err := os.ReadFile(cm.configPath); err == nil {
json.Unmarshal(data, &config)
} else {
config = make(map[string]interface{})
}
// Update web services section
if config["web_services"] == nil {
config["web_services"] = make(map[string]interface{})
}
webServices := config["web_services"].(map[string]interface{})
webServices["generic"] = services
// Write back to file
data, err := json.MarshalIndent(config, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal config: %w", err)
}
// Ensure directory exists
if err := os.MkdirAll(filepath.Dir(cm.configPath), 0755); err != nil {
return fmt.Errorf("failed to create config directory: %w", err)
}
if err := os.WriteFile(cm.configPath, data, 0644); err != nil {
return fmt.Errorf("failed to write config file: %w", err)
}
return nil
}