aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2025-03-26 22:21:03 -0700
committerMax Resnick <max@ofmax.li>2025-03-26 22:21:03 -0700
commit3a9d7a36a85cf8ae1098f213186ef83bbc3c56ba (patch)
tree96866fc8b7fdd80f4f04bad2631f267ba5671d9c /main.go
parent45220cc2793915008ae7b41f6f533ae86f1c56c3 (diff)
downloadunbound-adblock-config-0.1.0.tar.gz
fix: domain normalization, output formatHEAD0.1.0master
Diffstat (limited to '')
-rw-r--r--main.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/main.go b/main.go
index 051e6cd..c7e4212 100644
--- a/main.go
+++ b/main.go
@@ -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
}