diff options
Diffstat (limited to '')
| -rw-r--r-- | main.go | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -59,6 +59,11 @@ func main() { w := bufio.NewWriter(f) defer w.Flush() + if _, err := fmt.Fprintln(w, "server:"); err != nil { + slog.Error("failed to write header", "error", err) + os.Exit(1) + } + domains := make(map[string]struct{}) for i, url := range urls { slog.Info("fetching domains", "url", url, "progress", fmt.Sprintf("%d/%d", i+1, len(urls))) @@ -104,7 +109,6 @@ func fetchDomainsAndWrite(url string, w *bufio.Writer, seen map[string]struct{}) } defer resp.Body.Close() - fmt.Fprint(w, "server:\n") var count int scanner := bufio.NewScanner(resp.Body) for scanner.Scan() { @@ -127,6 +131,10 @@ func fetchDomainsAndWrite(url string, w *bufio.Writer, seen map[string]struct{}) // Normalize and validate domain format domain = strings.ToLower(strings.TrimSpace(domain)) + if idx := strings.Index(domain, "$"); idx != -1 { + domain = domain[:idx] + } + domain = strings.Trim(domain, "|^") if domain == "" || !strings.Contains(domain, ".") || strings.HasPrefix(domain, ".") || strings.HasSuffix(domain, ".") { continue } @@ -138,7 +146,7 @@ func fetchDomainsAndWrite(url string, w *bufio.Writer, seen map[string]struct{}) seen[domain] = struct{}{} count++ - if _, err := fmt.Fprintf(w, " local-zone: %q refuse\n", domain); err != nil { + if _, err := fmt.Fprintf(w, "\tlocal-zone: %q refuse\n", domain); err != nil { return fmt.Errorf("failed to write domain: %w", err) } } @@ -147,6 +155,10 @@ func fetchDomainsAndWrite(url string, w *bufio.Writer, seen map[string]struct{}) return fmt.Errorf("scanner error: %w", err) } + if err := w.Flush(); err != nil { + return fmt.Errorf("failed to flush writer: %w", err) + } + slog.Info("processed url", "url", url, "new_domains", count) return nil } |