From 12a8011fb30e4d57ef0d9d59c830e85dad69c621 Mon Sep 17 00:00:00 2001 From: Eugene Bujak Date: Tue, 27 Nov 2018 16:48:57 +0300 Subject: [PATCH] Get rid of unnecessary duplicate type coreDnsFilter. --- config.go | 107 +++++++++++++++++++++++------------------------------ control.go | 18 ++++----- 2 files changed, 55 insertions(+), 70 deletions(-) diff --git a/config.go b/config.go index 3d02128a..f60a9040 100644 --- a/config.go +++ b/config.go @@ -50,40 +50,35 @@ type configuration struct { sync.RWMutex `yaml:"-"` } -type coreDnsFilter struct { - ID int64 `yaml:"-"` - Path string `yaml:"-"` -} - type coreDNSConfig struct { binaryFile string coreFile string - Filters []coreDnsFilter `yaml:"-"` - Port int `yaml:"port"` - ProtectionEnabled bool `yaml:"protection_enabled"` - FilteringEnabled bool `yaml:"filtering_enabled"` - SafeBrowsingEnabled bool `yaml:"safebrowsing_enabled"` - SafeSearchEnabled bool `yaml:"safesearch_enabled"` - ParentalEnabled bool `yaml:"parental_enabled"` - ParentalSensitivity int `yaml:"parental_sensitivity"` - BlockedResponseTTL int `yaml:"blocked_response_ttl"` - QueryLogEnabled bool `yaml:"querylog_enabled"` - Ratelimit int `yaml:"ratelimit"` - RefuseAny bool `yaml:"refuse_any"` - Pprof string `yaml:"-"` - Cache string `yaml:"-"` - Prometheus string `yaml:"-"` - BootstrapDNS string `yaml:"bootstrap_dns"` - UpstreamDNS []string `yaml:"upstream_dns"` + Filters []filter `yaml:"-"` + Port int `yaml:"port"` + ProtectionEnabled bool `yaml:"protection_enabled"` + FilteringEnabled bool `yaml:"filtering_enabled"` + SafeBrowsingEnabled bool `yaml:"safebrowsing_enabled"` + SafeSearchEnabled bool `yaml:"safesearch_enabled"` + ParentalEnabled bool `yaml:"parental_enabled"` + ParentalSensitivity int `yaml:"parental_sensitivity"` + BlockedResponseTTL int `yaml:"blocked_response_ttl"` + QueryLogEnabled bool `yaml:"querylog_enabled"` + Ratelimit int `yaml:"ratelimit"` + RefuseAny bool `yaml:"refuse_any"` + Pprof string `yaml:"-"` + Cache string `yaml:"-"` + Prometheus string `yaml:"-"` + BootstrapDNS string `yaml:"bootstrap_dns"` + UpstreamDNS []string `yaml:"upstream_dns"` } type filter struct { - ID int64 `json:"id" yaml:"id"` // auto-assigned when filter is added (see NextFilterId) - URL string `json:"url"` - Name string `json:"name" yaml:"name"` - Enabled bool `json:"enabled"` - RulesCount int `json:"rulesCount" yaml:"-"` - contents []byte + ID int64 `json:"id" yaml:"id"` // auto-assigned when filter is added (see NextFilterId) + URL string `json:"url"` + Name string `json:"name" yaml:"name"` + Enabled bool `json:"enabled"` + RulesCount int `json:"rulesCount" yaml:"-"` + Contents []byte `json:"-" yaml:"-"` LastUpdated time.Time `json:"lastUpdated" yaml:"last_updated"` } @@ -120,7 +115,7 @@ var config = configuration{ } // Creates a helper object for working with the user rules -func getUserFilter() filter { +func userFilter() filter { // TODO: This should be calculated when UserRules are set var contents []byte for _, rule := range config.UserRules { @@ -131,7 +126,7 @@ func getUserFilter() filter { userFilter := filter{ // User filter always has constant ID=0 ID: UserFilterId, - contents: contents, + Contents: contents, Enabled: true, } @@ -199,7 +194,7 @@ func writeConfig() error { return err } - userFilter := getUserFilter() + userFilter := userFilter() err = userFilter.save() if err != nil { log.Printf("Couldn't save the user filter: %s", err) @@ -243,27 +238,25 @@ func writeAllConfigs() error { } const coreDNSConfigTemplate = `.:{{.Port}} { - {{if .ProtectionEnabled}}dnsfilter { - {{if .SafeBrowsingEnabled}}safebrowsing{{end}} - {{if .ParentalEnabled}}parental {{.ParentalSensitivity}}{{end}} - {{if .SafeSearchEnabled}}safesearch{{end}} - {{if .QueryLogEnabled}}querylog{{end}} - blocked_ttl {{.BlockedResponseTTL}} - {{if .FilteringEnabled}} - {{range .Filters}} + {{if .ProtectionEnabled}}dnsfilter { + {{if .SafeBrowsingEnabled}}safebrowsing{{end}} + {{if .ParentalEnabled}}parental {{.ParentalSensitivity}}{{end}} + {{if .SafeSearchEnabled}}safesearch{{end}} + {{if .QueryLogEnabled}}querylog{{end}} + blocked_ttl {{.BlockedResponseTTL}} + {{if .FilteringEnabled}}{{range .Filters}}{{if and .Enabled .Contents}} filter {{.ID}} "{{.Path}}" - {{end}} - {{end}} - }{{end}} - {{.Pprof}} + {{end}}{{end}}{{end}} + }{{end}} + {{.Pprof}} {{if .RefuseAny}}refuseany{{end}} {{if gt .Ratelimit 0}}ratelimit {{.Ratelimit}}{{end}} hosts { - fallthrough - } - {{if .UpstreamDNS}}upstream {{range .UpstreamDNS}}{{.}} {{end}} { bootstrap {{.BootstrapDNS}} }{{end}} - {{.Cache}} - {{.Prometheus}} + fallthrough + } + {{if .UpstreamDNS}}upstream {{range .UpstreamDNS}}{{.}} {{end}} { bootstrap {{.BootstrapDNS}} }{{end}} + {{.Cache}} + {{.Prometheus}} } ` @@ -280,24 +273,16 @@ func generateCoreDNSConfigText() (string, error) { var configBytes bytes.Buffer temporaryConfig := config.CoreDNS - // fill the list of filters - filters := make([]coreDnsFilter, 0) + // generate temporary filter list, needed to put userfilter in coredns config + filters := []filter{} // first of all, append the user filter - userFilter := getUserFilter() + userFilter := userFilter() - if len(userFilter.contents) > 0 { - filters = append(filters, coreDnsFilter{ID: userFilter.ID, Path: userFilter.getFilterFilePath()}) - } + filters = append(filters, userFilter) // then go through other filters - for i := range config.Filters { - filter := &config.Filters[i] - - if filter.Enabled && len(filter.contents) > 0 { - filters = append(filters, coreDnsFilter{ID: filter.ID, Path: filter.getFilterFilePath()}) - } - } + filters = append(filters, config.Filters...) temporaryConfig.Filters = filters // run the template diff --git a/control.go b/control.go index 821d0942..f61272a2 100644 --- a/control.go +++ b/control.go @@ -424,7 +424,7 @@ func handleFilteringRemoveURL(w http.ResponseWriter, r *http.Request) { newFilters = append(newFilters, filter) } else { // Remove the filter file - err := os.Remove(filter.getFilterFilePath()) + err := os.Remove(filter.Path()) if err != nil { errorText := fmt.Sprintf("Couldn't remove the filter file: %s", err) http.Error(w, errorText, http.StatusInternalServerError) @@ -647,24 +647,24 @@ func (filter *filter) update(force bool) (bool, error) { } // Check if the filter has been really changed - if bytes.Equal(filter.contents, body) { + if bytes.Equal(filter.Contents, body) { log.Printf("The filter %d text has not changed", filter.ID) return false, nil } log.Printf("Filter %d has been updated: %d bytes, %d rules", filter.ID, len(body), rulesCount) filter.RulesCount = rulesCount - filter.contents = body + filter.Contents = body return true, nil } // saves filter contents to the file in config.ourDataDir func (filter *filter) save() error { - filterFilePath := filter.getFilterFilePath() + filterFilePath := filter.Path() log.Printf("Saving filter %d contents to: %s", filter.ID, filterFilePath) - err := writeFileSafe(filterFilePath, filter.contents) + err := writeFileSafe(filterFilePath, filter.Contents) if err != nil { return err } @@ -679,7 +679,7 @@ func (filter *filter) load() error { return nil } - filterFilePath := filter.getFilterFilePath() + filterFilePath := filter.Path() log.Printf("Loading filter %d contents to: %s", filter.ID, filterFilePath) if _, err := os.Stat(filterFilePath); os.IsNotExist(err) { @@ -693,17 +693,17 @@ func (filter *filter) load() error { } log.Printf("Filter %d length is %d", filter.ID, len(filterFileContents)) - filter.contents = filterFileContents + filter.Contents = filterFileContents // Now extract the rules count - rulesCount, _ := parseFilterContents(filter.contents) + rulesCount, _ := parseFilterContents(filter.Contents) filter.RulesCount = rulesCount return nil } // Path to the filter contents -func (filter *filter) getFilterFilePath() string { +func (filter *filter) Path() string { return filepath.Join(config.ourBinaryDir, config.ourDataDir, FiltersDir, strconv.FormatInt(filter.ID, 10)+".txt") }