96 lines
2.6 KiB
Go
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
|
|
}
|