Compare commits
2 Commits
de300a6413
...
bd2b9f02b1
Author | SHA1 | Date |
---|---|---|
Maxim Lebedev | bd2b9f02b1 | |
Maxim Lebedev | 74d8de8fc2 |
|
@ -37,7 +37,7 @@ func TestHandler_Upload(t *testing.T) {
|
||||||
|
|
||||||
expect := testConfig.HTTP.BaseURL().JoinPath("media", "abc123"+testFile.Ext())
|
expect := testConfig.HTTP.BaseURL().JoinPath("media", "abc123"+testFile.Ext())
|
||||||
|
|
||||||
req := httptest.NewRequest(http.MethodPost, "https://example.com/media", buf)
|
req := httptest.NewRequest(http.MethodPost, "https://media.example.com", buf)
|
||||||
req.Header.Set(common.HeaderContentType, form.FormDataContentType())
|
req.Header.Set(common.HeaderContentType, form.FormDataContentType())
|
||||||
|
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
@ -62,7 +62,7 @@ func TestHandler_Download(t *testing.T) {
|
||||||
testConfig := domain.TestConfig(t)
|
testConfig := domain.TestConfig(t)
|
||||||
testFile := domain.TestFile(t)
|
testFile := domain.TestFile(t)
|
||||||
|
|
||||||
req := httptest.NewRequest(http.MethodGet, "https://example.com/media/"+testFile.LogicalName(), nil)
|
req := httptest.NewRequest(http.MethodGet, "https://media.example.com/"+testFile.LogicalName(), nil)
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
delivery.NewHandler(
|
delivery.NewHandler(
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package urlutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ShiftPath splits off the first component of p, which will be cleaned of
|
||||||
|
// relative components before processing. head will never contain a slash and
|
||||||
|
// tail will always be a rooted path without trailing slash.
|
||||||
|
//
|
||||||
|
// See: https://blog.merovius.de/posts/2017-06-18-how-not-to-use-an-http-router/
|
||||||
|
func ShiftPath(p string) (head, tail string) {
|
||||||
|
p = path.Clean("/" + p)
|
||||||
|
|
||||||
|
i := strings.Index(p[1:], "/") + 1
|
||||||
|
if i <= 0 {
|
||||||
|
return p[1:], "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
return p[1:i], p[i:]
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package urlutil_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"source.toby3d.me/toby3d/pub/internal/urlutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestShiftPath(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
for name, tc := range map[string]struct {
|
||||||
|
input, expHead, expTail string
|
||||||
|
}{
|
||||||
|
"root": {input: "/", expHead: "", expTail: "/"},
|
||||||
|
"file": {input: "/foo", expHead: "foo", expTail: "/"},
|
||||||
|
"dir": {input: "/foo/", expHead: "foo", expTail: "/"},
|
||||||
|
"dirfile": {input: "/foo/bar", expHead: "foo", expTail: "/bar"},
|
||||||
|
"subdir": {input: "/foo/bar/", expHead: "foo", expTail: "/bar"},
|
||||||
|
} {
|
||||||
|
name, tc := name, tc
|
||||||
|
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
head, tail := urlutil.ShiftPath(tc.input)
|
||||||
|
|
||||||
|
if head != tc.expHead {
|
||||||
|
t.Errorf("ShiftPath(%s) = '%s', want '%s'", tc.input, head, tc.expHead)
|
||||||
|
}
|
||||||
|
|
||||||
|
if tail != tc.expTail {
|
||||||
|
t.Errorf("ShiftPath(%s) = '%s', want '%s'", tc.input, tail, tc.expTail)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue