zoraxy-waf/config.go

72 lines
1.3 KiB
Go

package main
import (
"encoding/json"
"log"
"os"
"path/filepath"
"sync"
)
// Config holds all Firewall plugin settings.
type Config struct {
Enabled bool `json:"enabled"`
WAFURL string `json:"waf_url"`
HealthInterval int `json:"health_interval"`
TimeoutMs int `json:"timeout_ms"`
}
func configPath() string {
exe, err := os.Executable()
if err != nil {
return "/opt/zoraxy/plugins/zoraxy-waf/waf_config.json"
}
return filepath.Join(filepath.Dir(exe), "waf_config.json")
}
var (
cfg Config
cfgMu sync.RWMutex
)
func defaultConfig() Config {
return Config{
Enabled: false,
WAFURL: "http://10.1.0.11:8081",
HealthInterval: 5,
TimeoutMs: 3000,
}
}
func loadConfig() {
cfgMu.Lock()
defer cfgMu.Unlock()
f, err := os.Open(configPath())
if err != nil {
cfg = defaultConfig()
return
}
defer f.Close()
if err := json.NewDecoder(f).Decode(&cfg); err != nil {
log.Printf("WARN: corrupt config, using defaults: %v", err)
cfg = defaultConfig()
}
}
func saveConfig() error {
cfgMu.RLock()
data, err := json.MarshalIndent(cfg, "", " ")
cfgMu.RUnlock()
if err != nil {
return err
}
return os.WriteFile(configPath(), data, 0644)
}
func getConfig() Config {
cfgMu.RLock()
defer cfgMu.RUnlock()
return cfg
}