func zoneRecords(c *cli.Context) { var zone string if len(c.Args()) > 0 { zone = c.Args()[0] } else if c.String("zone") != "" { zone = c.String("zone") } else { cli.ShowSubcommandHelp(c) return } // Create a an empty record for searching for records rr := cloudflare.DNSRecord{} var records []cloudflare.DNSRecord if c.String("id") != "" { rec, err := api.DNSRecord(zone, c.String("id")) if err != nil { fmt.Println(err) return } records = append(records, rec) } else { if c.String("name") != "" { rr.Name = c.String("name") } if c.String("content") != "" { rr.Name = c.String("content") } var err error records, err = api.DNSRecords(zone, rr) if err != nil { fmt.Println(err) return } } var output []table for _, r := range records { switch r.Type { case "MX": r.Content = fmt.Sprintf("%d %s", r.Priority, r.Content) case "SRV": dp := reflect.ValueOf(r.Data).Interface().(map[string]interface{}) r.Content = fmt.Sprintf("%.f %s", dp["priority"], r.Content) // CloudFlare's API, annoyingly, automatically prepends the weight // and port into content, separated by tabs. // XXX: File this as a bug. LOC doesn't do this. r.Content = strings.Replace(r.Content, "\t", " ", -1) } output = append(output, table{ "ID": r.ID, "Type": r.Type, "Name": r.Name, "Content": r.Content, "Proxied": fmt.Sprintf("%t", r.Proxied), "TTL": fmt.Sprintf("%d", r.TTL), }) } makeTable(output, "ID", "Type", "Name", "Content", "Proxied", "TTL") }