aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2019-11-28 18:22:38 +0000
committerChristine Dodrill <me@christine.website>2019-11-28 18:24:54 +0000
commit389f7b5a7764e3d0ca050d440393daadac8d176d (patch)
tree1b6e9d1d4829e3ee15a6705d48510fc96057a561
parent2dfde39f006f8e6fa69d68dd72dd10d67e9b1cfd (diff)
downloadx-389f7b5a7764e3d0ca050d440393daadac8d176d.tar.xz
x-389f7b5a7764e3d0ca050d440393daadac8d176d.zip
web: move useragent to its own package
-rw-r--r--internal/internal.go9
-rw-r--r--web/user_agent.go40
-rw-r--r--web/useragent/user_agent.go43
-rw-r--r--web/useragent/user_agent_test.go (renamed from web/user_agent_test.go)2
-rw-r--r--web/x.md4
5 files changed, 50 insertions, 48 deletions
diff --git a/internal/internal.go b/internal/internal.go
index d84b212..1c78d60 100644
--- a/internal/internal.go
+++ b/internal/internal.go
@@ -14,15 +14,14 @@ import (
"within.website/ln/opname"
"within.website/x/internal/flagenv"
"within.website/x/internal/manpage"
+ "within.website/x/web/useragent"
// Debug routes
+ "net/http"
_ "net/http/pprof"
// Older projects use .env files, shim in compatibility
_ "github.com/joho/godotenv/autoload"
-
- // User agent init hook
- _ "within.website/x/web"
)
var (
@@ -80,3 +79,7 @@ func HandleStartup() {
manpage.Spew()
}
}
+
+func init() {
+ http.DefaultTransport = useragent.Transport("within.website-x", "https://within.website/.x.botinfo", http.DefaultTransport)
+}
diff --git a/web/user_agent.go b/web/user_agent.go
deleted file mode 100644
index 249f6b7..0000000
--- a/web/user_agent.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package web
-
-import (
- "fmt"
- "net/http"
- "os"
- "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
- }
-}
-
-// 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://within.website/.x.botinfo) 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 {
- rt http.RoundTripper
-}
-
-func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) {
- r.Header.Set("User-Agent", GenUserAgent())
- return uat.rt.RoundTrip(r)
-}
diff --git a/web/useragent/user_agent.go b/web/useragent/user_agent.go
new file mode 100644
index 0000000..0f521c9
--- /dev/null
+++ b/web/useragent/user_agent.go
@@ -0,0 +1,43 @@
+package useragent
+
+import (
+ "fmt"
+ "net/http"
+ "os"
+ "runtime"
+)
+
+var (
+ hostname = "<unknown>"
+)
+
+func init() {
+ name, _ := os.Hostname()
+ if name != "" {
+ hostname = name
+ }
+}
+
+// GenUserAgent creates a unique User-Agent string for outgoing HTTP requests.
+func GenUserAgent(prefix, infoURL string) string {
+ return fmt.Sprintf(
+ "%s (%s/%s/%s; %s; +%s) Hostname/%s",
+ prefix, runtime.Version(), runtime.GOOS, runtime.GOARCH, infoURL,
+ os.Args[0], hostname,
+ )
+}
+
+// Transport wraps a http transport with user agent information.
+func Transport(prefix, infoURL string, rt http.RoundTripper) http.RoundTripper {
+ return userAgentTransport{prefix: prefix, rt: rt}
+}
+
+type userAgentTransport struct {
+ prefix, infoURL string
+ rt http.RoundTripper
+}
+
+func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) {
+ r.Header.Set("User-Agent", GenUserAgent(uat.prefix))
+ return uat.rt.RoundTrip(r)
+}
diff --git a/web/user_agent_test.go b/web/useragent/user_agent_test.go
index c2ecb6e..702bcf7 100644
--- a/web/user_agent_test.go
+++ b/web/useragent/user_agent_test.go
@@ -1,4 +1,4 @@
-package web
+package useragent
import "testing"
diff --git a/web/x.md b/web/x.md
deleted file mode 100644
index 09a7165..0000000
--- a/web/x.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# x repo bots
-
-Hello, if you are reading this, you have found this URL in your access logs.
-If one of these programs is doing something you don't want them to do, please [contact me](https://christine.website/contact) or open an issue [on this repo](https://github.com/Xe/x).