aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-05-17 23:39:10 +0700
committerShulhan <ms@kilabit.info>2022-05-17 23:51:00 +0700
commitbb08b5bb6ad6cf3e1c409db7d69ace4364e7bc8d (patch)
tree5fed4b58027ada9acafb5af0795e2acc1868325d /client.go
parentbe96c68a070474364690f0655b26dc8823eea293 (diff)
downloadrescached-bb08b5bb6ad6cf3e1c409db7d69ace4364e7bc8d.tar.xz
cmd/resolver: implement command to delete record on zone
Given the following command $ resolver zone.d rr delete <zone> <"@" | subdomain> <type> <class> <value> It will delete the record in zone by given subdomain, type, class, and value.
Diffstat (limited to 'client.go')
-rw-r--r--client.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/client.go b/client.go
index ca1297c..24e7fb6 100644
--- a/client.go
+++ b/client.go
@@ -570,3 +570,49 @@ func (cl *Client) ZonedRecordAdd(name string, rreq dns.ResourceRecord) (rres *dn
return rres, nil
}
+
+// ZonedRecordDelete delete record from zone file.
+func (cl *Client) ZonedRecordDelete(name string, rreq dns.ResourceRecord) (zoneRecords dns.ZoneRecords, err error) {
+ var (
+ logp = "ZonedRecordDelete"
+ params = url.Values{}
+
+ res *libhttp.EndpointResponse
+ vstr string
+ rawb []byte
+ ok bool
+ )
+
+ params.Set(paramNameName, name)
+
+ vstr, ok = dns.RecordTypeNames[rreq.Type]
+ if !ok {
+ return nil, fmt.Errorf("%s: unknown record type: %d", logp, rreq.Type)
+ }
+ params.Set(paramNameType, vstr)
+
+ rawb, err = json.Marshal(rreq)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+ vstr = base64.StdEncoding.EncodeToString(rawb)
+ params.Set(paramNameRecord, vstr)
+
+ _, rawb, err = cl.Delete(apiZonedRR, nil, params)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+
+ res = &libhttp.EndpointResponse{
+ Data: &zoneRecords,
+ }
+ err = json.Unmarshal(rawb, res)
+ if err != nil {
+ return nil, fmt.Errorf("%s: %w", logp, err)
+ }
+ if res.Code != http.StatusOK {
+ return nil, fmt.Errorf("%s: %d %s", logp, res.Code, res.Message)
+ }
+
+ return zoneRecords, nil
+}