diff options
author | sinanmohd <sinan@sinanmohd.com> | 2024-07-07 15:20:11 +0530 |
---|---|---|
committer | sinanmohd <sinan@sinanmohd.com> | 2024-07-07 15:52:59 +0530 |
commit | e0f32fb48caf9397ac87fdd6c6597d888f9a8a40 (patch) | |
tree | 0a9c5ccabf13192264d7967533a4d8a0ddb16529 /api/dns.go | |
parent | 60aa1b7adbd133a5b1679ab2feac4ec17e3b48b5 (diff) |
api/dns: init
Diffstat (limited to 'api/dns.go')
-rw-r--r-- | api/dns.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/api/dns.go b/api/dns.go new file mode 100644 index 0000000..f8d345c --- /dev/null +++ b/api/dns.go @@ -0,0 +1,64 @@ +package api + +import ( + "encoding/json" + "log" + "net" + + "sinanmohd.com/redq/dns" +) + +type DnsResp map[string]string + +func handleDnsBlock(conn net.Conn, d *dns.Dns, domains []string) { + resp := make(DnsResp) + + for _, domain := range domains { + err := d.Block(domain) + if err != nil { + resp[domain] = err.Error() + } else { + resp[domain] = "blocked" + } + } + + buf, err := json.Marshal(resp) + if err != nil { + log.Printf("marshaling json: %s", err) + return + } + + conn.Write(buf) +} + +func handleDnsUnblock(conn net.Conn, d *dns.Dns, domains []string) { + resp := make(DnsResp) + + for _, domain := range domains { + err := d.Unblock(domain) + if err != nil { + resp[domain] = err.Error() + } else { + resp[domain] = "unblocked" + } + } + + buf, err := json.Marshal(resp) + if err != nil { + log.Printf("marshaling json: %s", err) + return + } + + conn.Write(buf) +} + +func handleDns(conn net.Conn, d *dns.Dns, domains []string, action string) { + switch action { + case "block": + handleDnsBlock(conn, d, domains) + case "unblock": + handleDnsUnblock(conn, d, domains) + default: + log.Printf("handling dns: invalid action '%s'", action) + } +} |