summaryrefslogtreecommitdiff
path: root/contrib/sharedhost/replacement.go
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sharedhost/replacement.go')
-rw-r--r--contrib/sharedhost/replacement.go47
1 files changed, 0 insertions, 47 deletions
diff --git a/contrib/sharedhost/replacement.go b/contrib/sharedhost/replacement.go
deleted file mode 100644
index cabc6b1..0000000
--- a/contrib/sharedhost/replacement.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package sharedhost
-
-import (
- "context"
- "crypto/tls"
- "net/url"
- "path"
-
- sr "tildegit.org/tjp/sliderule"
-)
-
-// ReplaceTilde builds a middleware which substitutes a leading '~' in the request path.
-//
-// It makes the alteration to a copy of the request which is then passed into the
-// wrapped Handler. This way middlewares outside of this one inspecting the request
-// afterwards will see the original URL.
-//
-// Typically the replacement should end with a "/", so that the ~ ends up mapping to a
-// particular directory on the filesystem. For instance with a replacement string of
-// "users/", "domain.com/~jim/index.gmi" maps to "domain.com/users/jim/index.gmi".
-func ReplaceTilde(replacement string) sr.Middleware {
- return func(inner sr.Handler) sr.Handler {
- return sr.HandlerFunc(func(ctx context.Context, request *sr.Request) *sr.Response {
- if len(request.Path) > 1 && request.Path[0:2] == "/~" {
- request = cloneRequest(request)
- request.Path = path.Clean("/" + replacement + request.Path[2:])
- }
-
- return inner.Handle(ctx, request)
- })
- }
-}
-
-func cloneRequest(start *sr.Request) *sr.Request {
- next := &sr.Request{}
- *next = *start
-
- next.URL = &url.URL{}
- *next.URL = *start.URL
-
- if start.TLSState != nil {
- next.TLSState = &tls.ConnectionState{}
- *next.TLSState = *start.TLSState
- }
-
- return next
-}