+ clients: config: save/restore clients info array
This commit is contained in:
parent
5fb7e44e79
commit
8f7aff93d7
54
config.go
54
config.go
|
@ -27,6 +27,17 @@ type logSettings struct {
|
||||||
Verbose bool `yaml:"verbose"` // If true, verbose logging is enabled
|
Verbose bool `yaml:"verbose"` // If true, verbose logging is enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type clientObject struct {
|
||||||
|
Name string `yaml:"name"`
|
||||||
|
IP string `yaml:"ip"`
|
||||||
|
MAC string `yaml:"mac"`
|
||||||
|
UseGlobalSettings bool `yaml:"use_global_settings"`
|
||||||
|
FilteringEnabled bool `yaml:"filtering_enabled"`
|
||||||
|
ParentalEnabled bool `yaml:"parental_enabled"`
|
||||||
|
SafeSearchEnabled bool `yaml:"safebrowsing_enabled"`
|
||||||
|
SafeBrowsingEnabled bool `yaml:"safesearch_enabled"`
|
||||||
|
}
|
||||||
|
|
||||||
// configuration is loaded from YAML
|
// configuration is loaded from YAML
|
||||||
// field ordering is important -- yaml fields will mirror ordering from here
|
// field ordering is important -- yaml fields will mirror ordering from here
|
||||||
type configuration struct {
|
type configuration struct {
|
||||||
|
@ -54,6 +65,9 @@ type configuration struct {
|
||||||
UserRules []string `yaml:"user_rules"`
|
UserRules []string `yaml:"user_rules"`
|
||||||
DHCP dhcpd.ServerConfig `yaml:"dhcp"`
|
DHCP dhcpd.ServerConfig `yaml:"dhcp"`
|
||||||
|
|
||||||
|
// Note: this array is filled only before file read/write and then it's cleared
|
||||||
|
Clients []clientObject `yaml:"clients"`
|
||||||
|
|
||||||
logSettings `yaml:",inline"`
|
logSettings `yaml:",inline"`
|
||||||
|
|
||||||
sync.RWMutex `yaml:"-"`
|
sync.RWMutex `yaml:"-"`
|
||||||
|
@ -206,6 +220,25 @@ func parseConfig() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientsInit()
|
||||||
|
for _, cy := range config.Clients {
|
||||||
|
cli := Client{
|
||||||
|
Name: cy.Name,
|
||||||
|
IP: cy.IP,
|
||||||
|
MAC: cy.MAC,
|
||||||
|
UseOwnSettings: !cy.UseGlobalSettings,
|
||||||
|
FilteringEnabled: cy.FilteringEnabled,
|
||||||
|
ParentalEnabled: cy.ParentalEnabled,
|
||||||
|
SafeSearchEnabled: cy.SafeSearchEnabled,
|
||||||
|
SafeBrowsingEnabled: cy.SafeBrowsingEnabled,
|
||||||
|
}
|
||||||
|
_, err = clientAdd(cli)
|
||||||
|
if err != nil {
|
||||||
|
log.Tracef("clientAdd: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
config.Clients = nil
|
||||||
|
|
||||||
// Deduplicate filters
|
// Deduplicate filters
|
||||||
deduplicateFilters()
|
deduplicateFilters()
|
||||||
|
|
||||||
|
@ -233,9 +266,30 @@ func readConfigFile() ([]byte, error) {
|
||||||
func (c *configuration) write() error {
|
func (c *configuration) write() error {
|
||||||
c.Lock()
|
c.Lock()
|
||||||
defer c.Unlock()
|
defer c.Unlock()
|
||||||
|
|
||||||
|
clientsList := clientsGetList()
|
||||||
|
for _, cli := range clientsList {
|
||||||
|
ip := cli.IP
|
||||||
|
if len(cli.MAC) != 0 {
|
||||||
|
ip = ""
|
||||||
|
}
|
||||||
|
cy := clientObject{
|
||||||
|
Name: cli.Name,
|
||||||
|
IP: ip,
|
||||||
|
MAC: cli.MAC,
|
||||||
|
UseGlobalSettings: !cli.UseOwnSettings,
|
||||||
|
FilteringEnabled: cli.FilteringEnabled,
|
||||||
|
ParentalEnabled: cli.ParentalEnabled,
|
||||||
|
SafeSearchEnabled: cli.SafeSearchEnabled,
|
||||||
|
SafeBrowsingEnabled: cli.SafeBrowsingEnabled,
|
||||||
|
}
|
||||||
|
config.Clients = append(config.Clients, cy)
|
||||||
|
}
|
||||||
|
|
||||||
configFile := config.getConfigFilename()
|
configFile := config.getConfigFilename()
|
||||||
log.Debug("Writing YAML file: %s", configFile)
|
log.Debug("Writing YAML file: %s", configFile)
|
||||||
yamlText, err := yaml.Marshal(&config)
|
yamlText, err := yaml.Marshal(&config)
|
||||||
|
config.Clients = nil
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Couldn't generate YAML file: %s", err)
|
log.Error("Couldn't generate YAML file: %s", err)
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue