147 lines
3.3 KiB
Go
147 lines
3.3 KiB
Go
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
|
||
|
|
"gopkg.in/yaml.v3"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Config struct {
|
||
|
|
Server ServerConfig `yaml:"server"`
|
||
|
|
Database DatabaseConfig `yaml:"database"`
|
||
|
|
Nginx NginxConfig `yaml:"nginx"`
|
||
|
|
ACME ACMEConfig `yaml:"acme"`
|
||
|
|
Autarch AutarchConfig `yaml:"autarch"`
|
||
|
|
Float FloatConfig `yaml:"float"`
|
||
|
|
Backups BackupsConfig `yaml:"backups"`
|
||
|
|
Logging LoggingConfig `yaml:"logging"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type ServerConfig struct {
|
||
|
|
Host string `yaml:"host"`
|
||
|
|
Port int `yaml:"port"`
|
||
|
|
TLS bool `yaml:"tls"`
|
||
|
|
Cert string `yaml:"cert"`
|
||
|
|
Key string `yaml:"key"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type DatabaseConfig struct {
|
||
|
|
Path string `yaml:"path"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type NginxConfig struct {
|
||
|
|
SitesAvailable string `yaml:"sites_available"`
|
||
|
|
SitesEnabled string `yaml:"sites_enabled"`
|
||
|
|
Snippets string `yaml:"snippets"`
|
||
|
|
Webroot string `yaml:"webroot"`
|
||
|
|
CertbotWebroot string `yaml:"certbot_webroot"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type ACMEConfig struct {
|
||
|
|
Email string `yaml:"email"`
|
||
|
|
Staging bool `yaml:"staging"`
|
||
|
|
AccountDir string `yaml:"account_dir"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type AutarchConfig struct {
|
||
|
|
InstallDir string `yaml:"install_dir"`
|
||
|
|
GitRepo string `yaml:"git_repo"`
|
||
|
|
GitBranch string `yaml:"git_branch"`
|
||
|
|
WebPort int `yaml:"web_port"`
|
||
|
|
DNSPort int `yaml:"dns_port"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type FloatConfig struct {
|
||
|
|
Enabled bool `yaml:"enabled"`
|
||
|
|
MaxSessions int `yaml:"max_sessions"`
|
||
|
|
SessionTTL string `yaml:"session_ttl"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type BackupsConfig struct {
|
||
|
|
Dir string `yaml:"dir"`
|
||
|
|
MaxAgeDays int `yaml:"max_age_days"`
|
||
|
|
MaxCount int `yaml:"max_count"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type LoggingConfig struct {
|
||
|
|
Level string `yaml:"level"`
|
||
|
|
File string `yaml:"file"`
|
||
|
|
MaxSizeMB int `yaml:"max_size_mb"`
|
||
|
|
MaxBackups int `yaml:"max_backups"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func DefaultConfig() *Config {
|
||
|
|
return &Config{
|
||
|
|
Server: ServerConfig{
|
||
|
|
Host: "0.0.0.0",
|
||
|
|
Port: 9090,
|
||
|
|
TLS: true,
|
||
|
|
Cert: "/opt/setec-manager/data/acme/manager.crt",
|
||
|
|
Key: "/opt/setec-manager/data/acme/manager.key",
|
||
|
|
},
|
||
|
|
Database: DatabaseConfig{
|
||
|
|
Path: "/opt/setec-manager/data/setec.db",
|
||
|
|
},
|
||
|
|
Nginx: NginxConfig{
|
||
|
|
SitesAvailable: "/etc/nginx/sites-available",
|
||
|
|
SitesEnabled: "/etc/nginx/sites-enabled",
|
||
|
|
Snippets: "/etc/nginx/snippets",
|
||
|
|
Webroot: "/var/www",
|
||
|
|
CertbotWebroot: "/var/www/certbot",
|
||
|
|
},
|
||
|
|
ACME: ACMEConfig{
|
||
|
|
Email: "",
|
||
|
|
Staging: false,
|
||
|
|
AccountDir: "/opt/setec-manager/data/acme",
|
||
|
|
},
|
||
|
|
Autarch: AutarchConfig{
|
||
|
|
InstallDir: "/var/www/autarch",
|
||
|
|
GitRepo: "https://github.com/DigijEth/autarch.git",
|
||
|
|
GitBranch: "main",
|
||
|
|
WebPort: 8181,
|
||
|
|
DNSPort: 53,
|
||
|
|
},
|
||
|
|
Float: FloatConfig{
|
||
|
|
Enabled: false,
|
||
|
|
MaxSessions: 10,
|
||
|
|
SessionTTL: "24h",
|
||
|
|
},
|
||
|
|
Backups: BackupsConfig{
|
||
|
|
Dir: "/opt/setec-manager/data/backups",
|
||
|
|
MaxAgeDays: 30,
|
||
|
|
MaxCount: 50,
|
||
|
|
},
|
||
|
|
Logging: LoggingConfig{
|
||
|
|
Level: "info",
|
||
|
|
File: "/var/log/setec-manager.log",
|
||
|
|
MaxSizeMB: 100,
|
||
|
|
MaxBackups: 3,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Load(path string) (*Config, error) {
|
||
|
|
cfg := DefaultConfig()
|
||
|
|
|
||
|
|
data, err := os.ReadFile(path)
|
||
|
|
if err != nil {
|
||
|
|
if os.IsNotExist(err) {
|
||
|
|
return cfg, nil
|
||
|
|
}
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return cfg, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (c *Config) Save(path string) error {
|
||
|
|
data, err := yaml.Marshal(c)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return os.WriteFile(path, data, 0600)
|
||
|
|
}
|