78 lines
1.7 KiB
Go
78 lines
1.7 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"`
|
|
RuleDir string `json:"rule_dir"`
|
|
}
|
|
|
|
// 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
|
|
}
|