From bb08b5bb6ad6cf3e1c409db7d69ace4364e7bc8d Mon Sep 17 00:00:00 2001 From: Shulhan Date: Tue, 17 May 2022 23:39:10 +0700 Subject: cmd/resolver: implement command to delete record on zone Given the following command $ resolver zone.d rr delete <"@" | subdomain> It will delete the record in zone by given subdomain, type, class, and value. --- client.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'client.go') 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 +} -- cgit v1.3