|
|
|
package dns
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"darvaza.org/core"
|
|
|
|
"github.com/libdns/libdns"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Show shows current DNS entries
|
|
|
|
func (mgr *Manager) Show(ctx context.Context, names ...string) error {
|
|
|
|
recs, err := mgr.GetRecords(ctx, names...)
|
|
|
|
if err != nil {
|
|
|
|
return core.Wrap(err, "GetRecords")
|
|
|
|
}
|
|
|
|
|
|
|
|
SortRecords(recs)
|
|
|
|
return writeRecords(recs, os.Stdout)
|
|
|
|
}
|
|
|
|
|
|
|
|
func writeRecords(recs []libdns.Record, w io.Writer) error {
|
|
|
|
var buf bytes.Buffer
|
|
|
|
|
|
|
|
for _, rr := range recs {
|
|
|
|
_ = fmtRecord(&buf, rr)
|
|
|
|
_, _ = buf.WriteRune('\n')
|
|
|
|
}
|
|
|
|
_, _ = fmt.Fprintf(&buf, "; %v records\n", len(recs))
|
|
|
|
|
|
|
|
_, err := buf.WriteTo(w)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func fmtRecord(w io.Writer, rr libdns.Record) error {
|
|
|
|
ttl := int(rr.TTL / time.Second)
|
|
|
|
if ttl < 1 {
|
|
|
|
ttl = 1
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := fmt.Fprintf(w, "%s\t%v\tIN\t%s\t%s",
|
|
|
|
rr.Name,
|
|
|
|
ttl,
|
|
|
|
rr.Type,
|
|
|
|
rr.Value)
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
if rr.ID != "" {
|
|
|
|
_, err = fmt.Fprintf(w, "\t; %s", rr.ID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|