Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ddfebcd24 |
@@ -209,12 +209,14 @@ func handlePut(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newHandler(config *Config, client *minio.Client) http.HandlerFunc {
|
func newHandler(config *Config, client *minio.Client) http.HandlerFunc {
|
||||||
subDir := config.UploadSubDir
|
var subPath string
|
||||||
if subDir != "" {
|
if config.UploadSubDir == "" || config.UploadSubDir == "/" {
|
||||||
subDir = "/" + strings.Trim(subDir, "/") + "/"
|
subPath = "/"
|
||||||
|
} else {
|
||||||
|
subPath = "/" + strings.Trim(config.UploadSubDir, "/") + "/"
|
||||||
}
|
}
|
||||||
getFilename := func(r *http.Request) string {
|
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) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -274,13 +276,12 @@ func loadConfig(filename string) (*Config, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for name, value := range map[string]string{
|
for name, value := range map[string]string{
|
||||||
"Address": config.Address,
|
"Address": config.Address,
|
||||||
"Secret": config.Secret,
|
"Secret": config.Secret,
|
||||||
"UploadSubDir": config.UploadSubDir,
|
"S3Endpoint": config.S3Endpoint,
|
||||||
"S3Endpoint": config.S3Endpoint,
|
"S3AccessKey": config.S3AccessKey,
|
||||||
"S3AccessKey": config.S3AccessKey,
|
"S3SecretKey": config.S3SecretKey,
|
||||||
"S3SecretKey": config.S3SecretKey,
|
"S3Bucket": config.S3Bucket,
|
||||||
"S3Bucket": config.S3Bucket,
|
|
||||||
} {
|
} {
|
||||||
if value == "" {
|
if value == "" {
|
||||||
return nil, fmt.Errorf("missing required config value %s", name)
|
return nil, fmt.Errorf("missing required config value %s", name)
|
||||||
@@ -326,7 +327,13 @@ func main() {
|
|||||||
log.Fatal().Err(err).Msg("failed to initialize s3 client")
|
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)
|
log.Info().Msgf("starting server on %s", config.Address)
|
||||||
if err := http.ListenAndServe(config.Address, nil); err != nil {
|
if err := http.ListenAndServe(config.Address, nil); err != nil {
|
||||||
log.Fatal().Err(err).Msg("failed to start server")
|
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) {
|
func TestUploadMissingMAC(t *testing.T) {
|
||||||
f, err := os.ReadFile("../../catmetal.jpg")
|
f, err := os.ReadFile("../../catmetal.jpg")
|
||||||
assert.NoError(t, err)
|
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