gofirewall/config.go

76 lines
1.6 KiB
Go

package main
import (
"encoding/json"
"log"
"os"
)
// Config 防火墙配置结构
type Config struct {
LogLevel LogLevel `json:"log_level"`
CaptureInterface string `json:"capture_interface"`
ForwardEnabled bool `json:"forward_enabled"`
MaxPacketSize int `json:"max_packet_size"`
ConfigFile string `json:"config_file"`
}
// NewConfig 创建新的配置实例
func NewConfig() *Config {
return &Config{
LogLevel: LogLevelInfo,
CaptureInterface: "",
ForwardEnabled: false,
MaxPacketSize: 65536,
ConfigFile: "firewall.json",
}
}
// Load 从配置文件加载配置
func (c *Config) Load() error {
// 检查文件是否存在
if _, err := os.Stat(c.ConfigFile); os.IsNotExist(err) {
// 文件不存在,使用默认配置并保存
log.Println("Config file not found, creating default config")
return c.Save()
}
// 读取文件内容
data, err := os.ReadFile(c.ConfigFile)
if err != nil {
return err
}
// 解析JSON
if err := json.Unmarshal(data, c); err != nil {
return err
}
log.Println("Config loaded successfully")
return nil
}
// Save 将配置保存到文件
func (c *Config) Save() error {
// 转换为JSON
data, err := json.MarshalIndent(c, "", " ")
if err != nil {
return err
}
// 写入文件
if err := os.WriteFile(c.ConfigFile, data, 0644); err != nil {
return err
}
log.Println("Config saved successfully")
return nil
}
// Update 更新配置参数
func (c *Config) Update(newConfig *Config) {
c.LogLevel = newConfig.LogLevel
c.CaptureInterface = newConfig.CaptureInterface
c.ForwardEnabled = newConfig.ForwardEnabled
c.MaxPacketSize = newConfig.MaxPacketSize
}