Skip to content
This repository was archived by the owner on Sep 2, 2024. It is now read-only.

Commit c3d10b8

Browse files
committed
clean up uploaded file name to keep in file key
1 parent f92628e commit c3d10b8

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

storage.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"fmt"
55
"net/http"
66
"path/filepath"
7+
"regexp"
8+
"strings"
79
"time"
810

911
"github.com/staticbackendhq/core/internal"
@@ -37,11 +39,10 @@ func upload(w http.ResponseWriter, r *http.Request) {
3739

3840
ext := filepath.Ext(h.Filename)
3941

40-
//TODO: Remove all but a-zA-Z/ from name
41-
4242
name := r.Form.Get("name")
4343
if len(name) == 0 {
44-
name = randStringRunes(32)
44+
// if no forced name is used, let's use the original name
45+
name = cleanUpFileName(h.Filename)
4546
}
4647

4748
fileKey := fmt.Sprintf("%s/%s/%s%s",
@@ -110,3 +111,13 @@ func deleteFile(w http.ResponseWriter, r *http.Request) {
110111

111112
respond(w, http.StatusOK, true)
112113
}
114+
115+
// cleanUpFileName removes file extention and anything but a-zA-Z-_
116+
func cleanUpFileName(s string) string {
117+
s = strings.TrimSuffix(s, filepath.Ext(s))
118+
119+
exp := regexp.MustCompile(`[^a-zA-Z\-_]`)
120+
121+
return exp.ReplaceAllString(s, "")
122+
123+
}

storage_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package staticbackend
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestCleanUpFileName(t *testing.T) {
8+
fakeNames := make(map[string]string)
9+
fakeNames[""] = ""
10+
fakeNames["abc.def"] = "abc"
11+
fakeNames["ok!.test"] = "ok"
12+
fakeNames["@file-name_here!.ext"] = "file-name_here"
13+
14+
for k, v := range fakeNames {
15+
if clean := cleanUpFileName(k); clean != v {
16+
t.Errorf("expected %s got %s", v, clean)
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)