mirror of
https://github.com/StarFleetCPTN/GoMFT.git
synced 2026-09-08 15:41:20 +02:00
88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Config struct {
|
|
ServerAddress string `json:"server_address"`
|
|
DataDir string `json:"data_dir"`
|
|
BackupDir string `json:"backup_dir"`
|
|
JWTSecret string `json:"jwt_secret"`
|
|
Email EmailConfig `json:"email"`
|
|
BaseURL string `json:"base_url"` // Base URL for generating links in emails
|
|
}
|
|
|
|
type EmailConfig struct {
|
|
Enabled bool `json:"enabled"`
|
|
Host string `json:"host"`
|
|
Port int `json:"port"`
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
FromEmail string `json:"from_email"`
|
|
FromName string `json:"from_name"`
|
|
ReplyTo string `json:"reply_to,omitempty"`
|
|
EnableTLS bool `json:"enable_tls"`
|
|
RequireAuth bool `json:"require_auth"`
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
// Default configuration
|
|
cfg := &Config{
|
|
ServerAddress: ":8080",
|
|
DataDir: filepath.Join("./data", "gomft"),
|
|
BackupDir: filepath.Join("./data", "gomft", "backups"),
|
|
JWTSecret: "change_this_to_a_secure_random_string",
|
|
BaseURL: "http://localhost:8080",
|
|
Email: EmailConfig{
|
|
Enabled: false,
|
|
Host: "smtp.example.com",
|
|
Port: 587,
|
|
Username: "user@example.com",
|
|
Password: "your-password",
|
|
FromEmail: "gomft@example.com",
|
|
FromName: "GoMFT",
|
|
EnableTLS: true,
|
|
RequireAuth: true,
|
|
},
|
|
}
|
|
|
|
// Check if config file exists
|
|
configPath := filepath.Join(cfg.DataDir, "config.json")
|
|
if _, err := os.Stat(configPath); err == nil {
|
|
// Read configuration file
|
|
data, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Parse configuration
|
|
if err := json.Unmarshal(data, cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
} else if !os.IsNotExist(err) {
|
|
return nil, err
|
|
}
|
|
|
|
// Ensure data directory exists
|
|
if err := os.MkdirAll(cfg.DataDir, 0755); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Save configuration if it doesn't exist
|
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
data, err := json.MarshalIndent(cfg, "", " ")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := os.WriteFile(configPath, data, 0644); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|