search.go raw
1 package rest
2
3 import (
4 "encoding/json"
5 "fmt"
6 "net/http"
7
8 "gopkg.in/ns1/ns1-go.v2/rest/model/dns"
9 )
10
11 // RecordSearchService handles 'dns/record/search' endpoint.
12 type RecordSearchService service
13
14 // Find takes query parameters and returns matching DNS records.
15 func (s *RecordSearchService) Search(params string) (*dns.RecordSearchResult, *http.Response, error) {
16 path := fmt.Sprintf("dns/record/search?%s", params)
17
18 req, err := s.client.NewRequest("GET", path, nil)
19 if err != nil {
20 return nil, nil, err
21 }
22
23 var r dns.RecordSearchResult
24 resp, err := s.client.Do(req, &r)
25 if err != nil {
26 return nil, resp, err
27 }
28
29 for _, record := range r.Results {
30 for _, answer := range record.Answers {
31 if err := processSearchAnswer(answer); err != nil {
32 fmt.Printf("error processing search answer: %v", err)
33 continue
34 }
35 }
36 }
37
38 return &r, resp, nil
39 }
40
41 func processSearchAnswer(answer *dns.SearchAnswer) error {
42 if len(answer.Raw) == 0 {
43 return nil
44 }
45
46 var rawArray []interface{}
47 if err := json.Unmarshal(answer.Raw, &rawArray); err != nil {
48 return err
49 }
50
51 answer.Rdata = make([]string, len(rawArray))
52 for i, v := range rawArray {
53 switch val := v.(type) {
54 case string:
55 answer.Rdata[i] = val
56 case float64:
57 answer.Rdata[i] = fmt.Sprintf("%.0f", val)
58 case int:
59 answer.Rdata[i] = fmt.Sprintf("%d", val)
60 default:
61 answer.Rdata[i] = fmt.Sprintf("%v", val)
62 }
63 }
64
65 return nil
66 }
67
68 // ZoneSearchService handles 'dns/zone/search' endpoint.
69 type ZoneSearchService service
70
71 func (s *ZoneSearchService) Search(params string) (*dns.ZoneSearchResult, *http.Response, error) {
72 path := fmt.Sprintf("dns/zone/search?%s", params)
73
74 req, err := s.client.NewRequest("GET", path, nil)
75 if err != nil {
76 return nil, nil, err
77 }
78
79 var result dns.ZoneSearchResult
80 resp, err := s.client.Do(req, &result)
81 if err != nil {
82 return nil, resp, err
83 }
84
85 return &result, resp, nil
86 }
87