No One Can Stop Me Now
This commit is contained in:
146
services/setec-manager/internal/config/config.go
Normal file
146
services/setec-manager/internal/config/config.go
Normal file
@@ -0,0 +1,146 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user