Skip to content

Commit

Permalink
Merge pull request #68 from osspkg/add_dns
Browse files Browse the repository at this point in the history
add dns server & client
  • Loading branch information
markus621 committed Dec 24, 2023
2 parents 3ee12c7 + b7fc1a5 commit 816908e
Show file tree
Hide file tree
Showing 16 changed files with 412 additions and 5 deletions.
11 changes: 8 additions & 3 deletions examples/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ replace (
go.osspkg.com/goppy/web => ../web
go.osspkg.com/goppy/ws => ../ws
go.osspkg.com/goppy/xc => ../xc
go.osspkg.com/goppy/xdns => ../xdns
go.osspkg.com/goppy/xlog => ../xlog
go.osspkg.com/goppy/xnet => ../xnet
go.osspkg.com/goppy/xtest => ../xtest
Expand All @@ -42,14 +43,15 @@ require (
go.osspkg.com/goppy/ormmysql v0.1.0
go.osspkg.com/goppy/ormpgsql v0.1.0
go.osspkg.com/goppy/ormsqlite v0.1.0
go.osspkg.com/goppy/plugins v0.1.0
go.osspkg.com/goppy/plugins v0.1.1
go.osspkg.com/goppy/routine v0.1.2
go.osspkg.com/goppy/syscall v0.1.0
go.osspkg.com/goppy/udp v0.0.2
go.osspkg.com/goppy/unixsocket v0.1.0
go.osspkg.com/goppy/web v0.1.4
go.osspkg.com/goppy/web v0.1.5
go.osspkg.com/goppy/ws v0.1.0
go.osspkg.com/goppy/xc v0.1.0
go.osspkg.com/goppy/xdns v0.0.0-00010101000000-000000000000
go.osspkg.com/goppy/xlog v0.1.4
)

Expand All @@ -63,10 +65,11 @@ require (
github.com/lib/pq v1.10.9 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-sqlite3 v1.14.19 // indirect
github.com/miekg/dns v1.1.57 // indirect
github.com/oschwald/geoip2-golang v1.9.0 // indirect
github.com/oschwald/maxminddb-golang v1.11.0 // indirect
go.osspkg.com/algorithms v1.3.0 // indirect
go.osspkg.com/goppy/encryption v0.1.2 // indirect
go.osspkg.com/goppy/encryption v0.1.3 // indirect
go.osspkg.com/goppy/errors v0.1.0 // indirect
go.osspkg.com/goppy/iofile v0.1.3 // indirect
go.osspkg.com/goppy/ioutil v0.1.0 // indirect
Expand All @@ -75,9 +78,11 @@ require (
go.osspkg.com/goppy/sqlcommon v0.1.4 // indirect
go.osspkg.com/goppy/xnet v0.1.1 // indirect
go.osspkg.com/static v1.4.0 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/oauth2 v0.13.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand Down
7 changes: 7 additions & 0 deletions examples/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-sqlite3 v1.14.19 h1:fhGleo2h1p8tVChob4I9HpmVFIAkKGpiukdrgQbWfGI=
github.com/mattn/go-sqlite3 v1.14.19/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc=
github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y=
github.com/oschwald/maxminddb-golang v1.11.0 h1:aSXMqYR/EPNjGE8epgqwDay+P30hCBZIveY0WZbAWh0=
Expand All @@ -35,17 +37,22 @@ go.osspkg.com/algorithms v1.3.0/go.mod h1:J2SXxHdqBK9ALGYJomA9XGvTOhIwMK0fvVw+Ku
go.osspkg.com/static v1.4.0 h1:2uy4/11c0QP+QLMucKQZbAU+e6lhVHKw5dWJPTk/DBg=
go.osspkg.com/static v1.4.0/go.mod h1:94YydVU3qUtb1J534486lpm+qg6CviQjqtxKlkpSppM=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
Expand Down
7 changes: 7 additions & 0 deletions examples/goppy/demo-dns-server/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
SHELL=/bin/bash

run:
go run main.go --config=config.yaml

check:
nslookup -port=11053 google.com 127.0.0.1
7 changes: 7 additions & 0 deletions examples/goppy/demo-dns-server/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
env: dev
level: 4
log: /dev/stdout

dns:
addr: 0.0.0.0:11053
timeout: 5s
19 changes: 19 additions & 0 deletions examples/goppy/demo-dns-server/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2022-2023 Mikhail Knyazhev <markus621@yandex.ru>. All rights reserved.
* Use of this source code is governed by a BSD 3-Clause license that can be found in the LICENSE file.
*/

package main

import (
"go.osspkg.com/goppy"
"go.osspkg.com/goppy/xdns"
)

func main() {
app := goppy.New()
app.Plugins(
xdns.WithDNSServer(),
)
app.Run()
}
1 change: 1 addition & 0 deletions go.work
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ use (
./web
./ws
./xc
./xdns
./xlog
./xnet
./xtest
Expand Down
21 changes: 19 additions & 2 deletions go.work.sum
Original file line number Diff line number Diff line change
@@ -1,31 +1,48 @@
cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA=
cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw=
github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o=
google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao=
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM=
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
85 changes: 85 additions & 0 deletions xdns/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package xdns

import (
"fmt"
"time"

"github.com/miekg/dns"
"go.osspkg.com/goppy/errors"
"go.osspkg.com/goppy/iosync"
)

type (
Client struct {
cli *dns.Client
resolver ZoneResolver
mux iosync.Lock
}

ClientOption func(*dns.Client)
)

func ClientOptionNetTCP() ClientOption {
return func(client *dns.Client) {
client.Net = "tcp"
}
}

func ClientOptionNetUDP() ClientOption {
return func(client *dns.Client) {
client.Net = "udp"
}
}

func ClientOptionNetDOT() ClientOption {
return func(client *dns.Client) {
client.Net = "tcp-tls"
}
}

func NewClient(opts ...ClientOption) *Client {
cli := &Client{
cli: &dns.Client{
Net: "udp",
ReadTimeout: time.Second * 5,
WriteTimeout: time.Second * 5,
},
mux: iosync.NewLock(),
}

for _, opt := range opts {
opt(cli.cli)
}

return cli
}

func (v *Client) SetZoneResolver(r ZoneResolver) {
v.resolver = r
}

func (v *Client) Exchange(q []dns.Question) ([]dns.RR, error) {
var errs error
result := make([]dns.RR, 0, len(q))

for _, question := range q {
address := v.resolver.Resolve(question.Name)
msg := new(dns.Msg).SetQuestion(question.Name, question.Qtype)

resp, _, err := v.cli.Exchange(msg, address)
if err != nil {
errs = errors.Wrap(errs, errors.Wrapf(err, "name: %s, dns: %s", question.String(), address))
continue
}

if len(resp.Answer) == 0 {
errs = errors.Wrap(errs,
errors.Wrapf(fmt.Errorf("empty answer"), "name: %s, dns: %s", question.String(), address))
continue
}

result = append(result, resp.Answer...)
}

return result, errs
}
13 changes: 13 additions & 0 deletions xdns/common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package xdns

import (
"github.com/miekg/dns"
)

type Exchanger interface {
Exchange(q []dns.Question) ([]dns.RR, error)
}

type ZoneResolver interface {
Resolve(name string) string
}
18 changes: 18 additions & 0 deletions xdns/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package xdns

import "time"

type (
Config struct {
DNS ConfigItem `yaml:"dns"`
}
ConfigItem struct {
Addr string `yaml:"addr"`
Timeout time.Duration `yaml:"timeout"`
}
)

func (v *Config) Default() {
v.DNS.Addr = "0.0.0.0:53"
v.DNS.Timeout = 5 * time.Second
}
31 changes: 31 additions & 0 deletions xdns/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module go.osspkg.com/goppy/xdns

go 1.18

replace (
go.osspkg.com/goppy/errors => ../errors
go.osspkg.com/goppy/iosync => ../iosync
go.osspkg.com/goppy/plugins => ../plugins
go.osspkg.com/goppy/xc => ../xc
go.osspkg.com/goppy/xlog => ../xlog
go.osspkg.com/goppy/xnet => ../xnet
)

require (
github.com/miekg/dns v1.1.57
go.osspkg.com/goppy/errors v0.1.0
go.osspkg.com/goppy/iosync v0.1.2
go.osspkg.com/goppy/plugins v0.1.1
go.osspkg.com/goppy/xc v0.1.0
go.osspkg.com/goppy/xlog v0.1.4
go.osspkg.com/goppy/xnet v0.1.1
)

require (
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/tools v0.13.0 // indirect
)
16 changes: 16 additions & 0 deletions xdns/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
go.osspkg.com/goppy/xtest v0.1.2 h1:rbUzEnWZW9vkGa24owydA9icQcfOaROJWSym1l0mCtU=
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
11 changes: 11 additions & 0 deletions xdns/plugin_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package xdns

import "go.osspkg.com/goppy/plugins"

func WithDNSClient(opts ...ClientOption) plugins.Plugin {
return plugins.Plugin{
Inject: func() *Client {
return NewClient(opts...)
},
}
}
15 changes: 15 additions & 0 deletions xdns/plugin_server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package xdns

import (
"go.osspkg.com/goppy/plugins"
"go.osspkg.com/goppy/xlog"
)

func WithDNSServer() plugins.Plugin {
return plugins.Plugin{
Config: &Config{},
Inject: func(c *Config, l xlog.Logger) *Server {
return NewServer(c.DNS, l)
},
}
}
Loading

0 comments on commit 816908e

Please sign in to comment.