aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-04-08 16:05:06 +0000
committerChristine Dodrill <me@christine.website>2019-04-08 16:12:50 +0000
commitf5e9eded374394b7510b2492dc729d7952083a53 (patch)
tree6f196022eee050068151a4971734f0b3940b60f2
parent9f53168d9af58b206fadbb1636e9ea0772f8730f (diff)
downloadx-1.0.3.tar.xz
x-1.0.3.zip
dnsd: include user agent with requestsv1.0.3
-rw-r--r--cmd/dnsd/main.go16
-rw-r--r--web/user_agent.go22
-rw-r--r--web/user_agent_test.go2
3 files changed, 35 insertions, 5 deletions
diff --git a/cmd/dnsd/main.go b/cmd/dnsd/main.go
index eefa518..d6e4df4 100644
--- a/cmd/dnsd/main.go
+++ b/cmd/dnsd/main.go
@@ -9,7 +9,9 @@ import (
"os/signal"
"syscall"
"time"
+ "fmt"
+ "github.com/Xe/x/web"
"github.com/Xe/x/internal"
"github.com/miekg/dns"
"github.com/mmikulicic/stringlist"
@@ -75,6 +77,12 @@ func main() {
log.Printf("conf: -forward-server=%s", *server)
rrs := []dns.RR{}
+ ns := []dns.RR{}
+
+ txt, err := dns.NewRR("user-agent. 10 CH TXT " + fmt.Sprintf("%q", web.GenUserAgent()))
+ if err != nil {
+ log.Fatal(err)
+ }
for _, zurl := range *zoneURLs {
resp, err := http.Get(zurl)
@@ -88,6 +96,11 @@ func main() {
zp := dns.NewZoneParser(reader, "", zurl)
for rr, ok := zp.Next(); ok; rr, ok = zp.Next() {
rrs = append(rrs, rr)
+
+ if rr.Header().Rrtype == dns.TypeNS {
+ ns = append(ns, rr)
+ }
+
i++
}
@@ -126,6 +139,9 @@ func main() {
for _, a := range resolver(*server, q.Name, q.Qtype) {
answers = append(answers, a)
}
+ } else {
+ m.Ns = ns
+ m.Extra = []dns.RR{txt}
}
for _, a := range answers {
m.Answer = append(m.Answer, a)
diff --git a/web/user_agent.go b/web/user_agent.go
index 8e4bd4c..99885a4 100644
--- a/web/user_agent.go
+++ b/web/user_agent.go
@@ -4,16 +4,30 @@ import (
"fmt"
"net/http"
"os"
- "path/filepath"
"runtime"
+ "time"
+
+ "github.com/celrenheit/sandflake"
+)
+
+var (
+ startID = sandflake.Next()
+ hostname = "<unknown>"
+ started = time.Now()
)
func init() {
http.DefaultTransport = &userAgentTransport{http.DefaultTransport}
+
+ name, _ := os.Hostname()
+ if name != "" {
+ hostname = name
+ }
}
-func genUserAgent() string {
- return fmt.Sprintf("github.com-Xe-x (%s/%s/%s; %s/bot; +https://github.com/Xe/x/blob/master/web/x.md)", runtime.Version(), runtime.GOOS, runtime.GOARCH, filepath.Base(os.Args[0]))
+// GenUserAgent creates a unique User-Agent string for outgoing HTTP requests.
+func GenUserAgent() string {
+ return fmt.Sprintf("github.com-Xe-x (%s/%s/%s; %s; +https://github.com/Xe/x/blob/master/web/x.md) Alive (%s; sandflake) Hostname/%s Started (%s)", runtime.Version(), runtime.GOOS, runtime.GOARCH, os.Args[0], startID.String(), hostname, started.Format(time.RFC3339))
}
type userAgentTransport struct {
@@ -21,6 +35,6 @@ type userAgentTransport struct {
}
func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) {
- r.Header.Set("User-Agent", genUserAgent())
+ r.Header.Set("User-Agent", GenUserAgent())
return uat.rt.RoundTrip(r)
}
diff --git a/web/user_agent_test.go b/web/user_agent_test.go
index e2ffca0..c2ecb6e 100644
--- a/web/user_agent_test.go
+++ b/web/user_agent_test.go
@@ -3,7 +3,7 @@ package web
import "testing"
func TestGenUserAgent(t *testing.T) {
- ua := genUserAgent()
+ ua := GenUserAgent()
if ua == "" {
t.Fatal("no user agent generated")
}