Add rewrites.go
All checks were successful
Gitea Actions Demo / Run-Python-Script (push) Successful in 7s

This commit is contained in:
2025-05-07 15:33:47 +02:00
parent 4405744f56
commit 571c985251

86
rewrites.go Normal file
View File

@@ -0,0 +1,86 @@
package main
import (
"fmt"
)
type Rewrite struct {
Domain string `yaml:"domain" json:"domain"`
Answer string `yaml:"answer" json:"answer"`
}
func MergeRewrites(existing, desired []Rewrite) []Rewrite {
existingMap := make(map[string]string)
for _, r := range existing {
existingMap[r.Domain] = r.Answer
}
desiredMap := make(map[string]string)
for _, r := range desired {
desiredMap[r.Domain] = r.Answer
}
updated := make([]Rewrite, 0)
// Add or update
for domain, ip := range desiredMap {
if existingIP, found := existingMap[domain]; found {
if existingIP != ip {
fmt.Printf("Ändere %s: %s -> %s\n", domain, existingIP, ip)
}
} else {
fmt.Printf("Füge hinzu: %s -> %s\n", domain, ip)
}
updated = append(updated, Rewrite{Domain: domain, Answer: ip})
}
// Delete outdated
for domain, ip := range existingMap {
if _, ok := desiredMap[domain]; !ok {
fmt.Printf("Lösche: %s : %s\n", domain, ip)
}
}
return updated
}
func (c *AdGuardClient) ApplyRewrites(desired []Rewrite) error {
existing, err := c.GetRewrites()
if err != nil {
return err
}
existingMap := make(map[string]string)
for _, r := range existing {
existingMap[r.Domain] = r.Answer
}
desiredMap := make(map[string]string)
for _, r := range desired {
desiredMap[r.Domain] = r.Answer
}
for domain, ip := range desiredMap {
if existingIP, ok := existingMap[domain]; ok {
if existingIP != ip {
if err := c.UpdateRewrite(Rewrite{Domain: domain, Answer: existingIP}, Rewrite{Domain: domain, Answer: ip}); err != nil {
return err
}
}
} else {
if err := c.AddRewrite(Rewrite{Domain: domain, Answer: ip}); err != nil {
return err
}
}
}
for domain, ip := range existingMap {
if _, ok := desiredMap[domain]; !ok {
if err := c.DeleteRewrite(Rewrite{Domain: domain, Answer: ip}); err != nil {
return err
}
}
}
return nil
}