Skip to content

Commit dc32190

Browse files
query: begin implement query package
Signed-off-by: Bruno Schaatsbergen <[email protected]>
1 parent 91e3a55 commit dc32190

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

internal/query/query.go

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package query
2+
3+
import (
4+
"github.com/hashicorp/go-hclog"
5+
"github.com/miekg/dns"
6+
"os"
7+
)
8+
9+
// Querier is an interface for querying DNS records
10+
type Querier interface {
11+
Query(domain string, qtype uint16) (*dns.Msg, error)
12+
}
13+
14+
// Query implements the Querier interface
15+
type Query struct {
16+
Server string
17+
hclog.Logger
18+
}
19+
20+
// NewQuerier creates a new Querier with the specified server
21+
func NewQuerier(server string, logger hclog.Logger) Querier {
22+
if logger == nil {
23+
logger = hclog.New(&hclog.LoggerOptions{
24+
Name: "zns",
25+
Level: hclog.LevelFromString(os.Getenv("ZNS_LOG_LEVEL")),
26+
Color: hclog.AutoColor,
27+
DisableTime: true,
28+
})
29+
logger.Warn("no logger provided, using default 'zns' logger")
30+
}
31+
return &Query{Server: server, Logger: logger}
32+
}
33+
34+
// Query performs the DNS query and returns the response and any error encountered
35+
func (q *Query) Query(domain string, qtype uint16) (*dns.Msg, error) {
36+
msg := new(dns.Msg)
37+
msg.SetQuestion(dns.Fqdn(domain), qtype)
38+
39+
client := new(dns.Client)
40+
resp, _, err := client.Exchange(msg, q.Server)
41+
if err != nil {
42+
return nil, err
43+
}
44+
45+
return resp, nil
46+
}

0 commit comments

Comments
 (0)