Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ddfebcd24 |
@@ -209,12 +209,14 @@ func handlePut(
|
||||
}
|
||||
|
||||
func newHandler(config *Config, client *minio.Client) http.HandlerFunc {
|
||||
subDir := config.UploadSubDir
|
||||
if subDir != "" {
|
||||
subDir = "/" + strings.Trim(subDir, "/") + "/"
|
||||
var subPath string
|
||||
if config.UploadSubDir == "" || config.UploadSubDir == "/" {
|
||||
subPath = "/"
|
||||
} else {
|
||||
subPath = "/" + strings.Trim(config.UploadSubDir, "/") + "/"
|
||||
}
|
||||
getFilename := func(r *http.Request) string {
|
||||
return strings.TrimPrefix(r.URL.Path, subDir)
|
||||
return strings.TrimPrefix(r.URL.Path, subPath)
|
||||
}
|
||||
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -276,7 +278,6 @@ func loadConfig(filename string) (*Config, error) {
|
||||
for name, value := range map[string]string{
|
||||
"Address": config.Address,
|
||||
"Secret": config.Secret,
|
||||
"UploadSubDir": config.UploadSubDir,
|
||||
"S3Endpoint": config.S3Endpoint,
|
||||
"S3AccessKey": config.S3AccessKey,
|
||||
"S3SecretKey": config.S3SecretKey,
|
||||
@@ -326,7 +327,13 @@ func main() {
|
||||
log.Fatal().Err(err).Msg("failed to initialize s3 client")
|
||||
}
|
||||
|
||||
http.HandleFunc("/"+config.UploadSubDir, newHandler(config, client))
|
||||
var pattern string
|
||||
if config.UploadSubDir == "" || config.UploadSubDir == "/" {
|
||||
pattern = "/"
|
||||
} else {
|
||||
pattern = "/" + strings.TrimPrefix(config.UploadSubDir, "/")
|
||||
}
|
||||
http.HandleFunc(pattern, newHandler(config, client))
|
||||
log.Info().Msgf("starting server on %s", config.Address)
|
||||
if err := http.ListenAndServe(config.Address, nil); err != nil {
|
||||
log.Fatal().Err(err).Msg("failed to start server")
|
||||
|
||||
@@ -166,6 +166,32 @@ func TestUploadValid(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUploadValidNoPrefix(t *testing.T) {
|
||||
config := testConfig()
|
||||
config.UploadSubDir = ""
|
||||
client, err := initS3Client(config)
|
||||
assert.NoError(t, err)
|
||||
|
||||
setupBucket(t, config, client)
|
||||
defer teardownBucket(t, config, client)
|
||||
|
||||
f, err := os.ReadFile("../../catmetal.jpg")
|
||||
assert.NoError(t, err)
|
||||
|
||||
req, err := http.NewRequest("PUT", "/catmetal.jpg", bytes.NewBuffer(f))
|
||||
assert.NoError(t, err)
|
||||
req.Header.Set("Content-Type", "image/jpeg")
|
||||
|
||||
q := req.URL.Query()
|
||||
q.Set("v2", "26a2b6e27b451bf695f769c8cbb23f8856e80a1fb5963a831f1c79a19873365d")
|
||||
req.URL.RawQuery = q.Encode()
|
||||
|
||||
rr := httptest.NewRecorder()
|
||||
handler := http.HandlerFunc(newHandler(config, client))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusCreated, rr.Code)
|
||||
}
|
||||
|
||||
func TestUploadMissingMAC(t *testing.T) {
|
||||
f, err := os.ReadFile("../../catmetal.jpg")
|
||||
assert.NoError(t, err)
|
||||
@@ -296,3 +322,26 @@ func TestDownloadOK(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDownloadValidNoPrefix(t *testing.T) {
|
||||
config := testConfig()
|
||||
config.ProxyMode = true
|
||||
config.UploadSubDir = ""
|
||||
client, err := initS3Client(config)
|
||||
assert.NoError(t, err)
|
||||
|
||||
setupBucket(t, config, client)
|
||||
defer teardownBucket(t, config, client)
|
||||
|
||||
uploadFile(t, config, client)
|
||||
|
||||
req, err := http.NewRequest("GET", "/catmetal.jpg", nil)
|
||||
assert.NoError(t, err)
|
||||
|
||||
rr := httptest.NewRecorder()
|
||||
handler := http.HandlerFunc(newHandler(config, client))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusOK, rr.Code)
|
||||
assert.Equal(t, "image/jpeg", rr.Header().Get("Content-Type"))
|
||||
assert.Equal(t, "inline", rr.Header().Get("Content-Disposition"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user