Commit 0c1e9930 authored by Nick Thomas's avatar Nick Thomas

Use accelerated uploads for users/personal snippets

parent 33a5eb7d
...@@ -44,10 +44,12 @@ type routeOptions struct { ...@@ -44,10 +44,12 @@ type routeOptions struct {
} }
const ( const (
apiPattern = `^/api/` apiPattern = `^/api/`
ciAPIPattern = `^/ci/api/` ciAPIPattern = `^/ci/api/`
gitProjectPattern = `^/([^/]+/){1,}[^/]+\.git/` gitProjectPattern = `^/([^/]+/){1,}[^/]+\.git/`
projectPattern = `^/([^/]+/){1,}[^/]+/` projectPattern = `^/([^/]+/){1,}[^/]+/`
snippetUploadPattern = `^/uploads/personal_snippet`
userUploadPattern = `^/uploads/user`
) )
func compileRegexp(regexpStr string) *regexp.Regexp { func compileRegexp(regexpStr string) *regexp.Regexp {
...@@ -217,6 +219,8 @@ func (u *upstream) configureRoutes() { ...@@ -217,6 +219,8 @@ func (u *upstream) configureRoutes() {
// Uploads // Uploads
route("POST", projectPattern+`uploads\z`, upload.Accelerate(api, proxy)), route("POST", projectPattern+`uploads\z`, upload.Accelerate(api, proxy)),
route("POST", snippetUploadPattern, upload.Accelerate(api, proxy)),
route("POST", userUploadPattern, upload.Accelerate(api, proxy)),
// For legacy reasons, user uploads are stored under the document root. // For legacy reasons, user uploads are stored under the document root.
// To prevent anybody who knows/guesses the URL of a user-uploaded file // To prevent anybody who knows/guesses the URL of a user-uploaded file
......
...@@ -102,10 +102,6 @@ func parseJWT(token *jwt.Token) (interface{}, error) { ...@@ -102,10 +102,6 @@ func parseJWT(token *jwt.Token) (interface{}, error) {
} }
func TestAcceleratedUpload(t *testing.T) { func TestAcceleratedUpload(t *testing.T) {
reqBody, contentType, err := multipartBodyWithFile()
if err != nil {
t.Fatal(err)
}
ts := uploadTestServer(t, func(r *http.Request) { ts := uploadTestServer(t, func(r *http.Request) {
jwtToken, err := jwt.Parse(r.Header.Get(upload.RewrittenFieldsHeader), parseJWT) jwtToken, err := jwt.Parse(r.Header.Get(upload.RewrittenFieldsHeader), parseJWT)
require.NoError(t, err) require.NoError(t, err)
...@@ -120,14 +116,16 @@ func TestAcceleratedUpload(t *testing.T) { ...@@ -120,14 +116,16 @@ func TestAcceleratedUpload(t *testing.T) {
ws := startWorkhorseServer(ts.URL) ws := startWorkhorseServer(ts.URL)
defer ws.Close() defer ws.Close()
resource := `/example` resources := []string{`/example`, `/uploads/personal_snippet`, `/uploads/user`}
resp, err := http.Post(ws.URL+resource, contentType, reqBody) for _, resource := range resources {
if err != nil { reqBody, contentType, err := multipartBodyWithFile()
t.Error(err) require.NoError(t, err)
}
defer resp.Body.Close() resp, err := http.Post(ws.URL+resource, contentType, reqBody)
if resp.StatusCode != 200 { require.NoError(t, err)
t.Errorf("GET %q: expected 200, got %d", resource, resp.StatusCode) require.Equal(t, 200, resp.StatusCode)
resp.Body.Close()
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment