Skip to content

Commit 42d2df1

Browse files
committed
feat(serverHandler): add json response for mutate action
1 parent a718cee commit 42d2df1

File tree

6 files changed

+55
-23
lines changed

6 files changed

+55
-23
lines changed

src/serverHandler/delete.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"os"
55
)
66

7-
func (h *handler) deleteItems(fsPrefix string, files []string, aliasSubItems []os.FileInfo) {
7+
func (h *handler) deleteItems(fsPrefix string, files []string, aliasSubItems []os.FileInfo) bool {
88
errs := []error{}
99

1010
for _, filename := range files {
@@ -19,5 +19,8 @@ func (h *handler) deleteItems(fsPrefix string, files []string, aliasSubItems []o
1919

2020
if len(errs) > 0 {
2121
go h.logger.LogErrors(errs...)
22+
return false
2223
}
24+
25+
return true
2326
}

src/serverHandler/main.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -90,23 +90,7 @@ func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
9090
}
9191

9292
if data.IsMutate {
93-
switch {
94-
case data.IsUpload:
95-
if data.CanUpload && r.Method == http.MethodPost {
96-
h.saveUploadFiles(h.root+data.handlerReqPath, data.CanDelete, data.AliasSubItems, r)
97-
}
98-
case data.IsMkdir:
99-
if data.CanMkdir {
100-
h.errHandler.LogError(r.ParseForm())
101-
h.mkdirs(h.root+data.handlerReqPath, r.Form["name"], data.AliasSubItems)
102-
}
103-
case data.IsDelete:
104-
if data.CanDelete {
105-
h.errHandler.LogError(r.ParseForm())
106-
h.deleteItems(h.root+data.handlerReqPath, r.Form["name"], data.AliasSubItems)
107-
}
108-
}
109-
http.Redirect(w, r, r.URL.Path, http.StatusFound)
93+
h.mutate(w, r, data)
11094
return
11195
}
11296

@@ -127,7 +111,7 @@ func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
127111
}
128112

129113
item := data.Item
130-
if r.URL.RawQuery == "json" {
114+
if data.WantJson {
131115
h.json(w, r, data)
132116
} else if file != nil && item != nil && !item.IsDir() {
133117
h.content(w, r, data)

src/serverHandler/mkdir.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"os"
55
)
66

7-
func (h *handler) mkdirs(fsPrefix string, files []string, aliasSubItems []os.FileInfo) {
7+
func (h *handler) mkdirs(fsPrefix string, files []string, aliasSubItems []os.FileInfo) bool {
88
errs := []error{}
99

1010
for _, filename := range files {
@@ -19,5 +19,8 @@ func (h *handler) mkdirs(fsPrefix string, files []string, aliasSubItems []os.Fil
1919

2020
if len(errs) > 0 {
2121
go h.logger.LogErrors(errs...)
22+
return false
2223
}
24+
25+
return true
2326
}

src/serverHandler/mutate.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package serverHandler
2+
3+
import "net/http"
4+
5+
func (h *handler) mutate(w http.ResponseWriter, r *http.Request, data *responseData) {
6+
success := false
7+
8+
switch {
9+
case data.IsUpload:
10+
if data.CanUpload && r.Method == http.MethodPost {
11+
success = h.saveUploadFiles(h.root+data.handlerReqPath, data.CanDelete, data.AliasSubItems, r)
12+
}
13+
case data.IsMkdir:
14+
if data.CanMkdir && !h.errHandler.LogError(r.ParseForm()) {
15+
success = h.mkdirs(h.root+data.handlerReqPath, r.Form["name"], data.AliasSubItems)
16+
}
17+
case data.IsDelete:
18+
if data.CanDelete && !h.errHandler.LogError(r.ParseForm()) {
19+
success = h.deleteItems(h.root+data.handlerReqPath, r.Form["name"], data.AliasSubItems)
20+
}
21+
}
22+
23+
if data.WantJson {
24+
header := w.Header()
25+
header.Set("Content-Type", "application/json; charset=utf-8")
26+
header.Set("Cache-Control", "public, max-age=0")
27+
w.WriteHeader(http.StatusOK)
28+
29+
w.Write([]byte{'{', '"', 's', 'u', 'c', 'c', 'e', 's', 's', '"', ':'})
30+
if success {
31+
w.Write([]byte{'t', 'r', 'u', 'e'})
32+
} else {
33+
w.Write([]byte{'f', 'a', 'l', 's', 'e'})
34+
}
35+
w.Write([]byte{'}'})
36+
} else {
37+
http.Redirect(w, r, r.URL.Path, http.StatusFound)
38+
}
39+
}

src/serverHandler/responseData.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ func (h *handler) getResponseData(r *http.Request) *responseData {
360360
isDelete = true
361361
isMutate = true
362362
}
363-
wantJson := strings.Contains(rawQuery, "json")
363+
wantJson := strings.HasPrefix(rawQuery, "json") || strings.Contains(rawQuery, "&json")
364364

365365
return &responseData{
366366
rawReqPath: rawReqPath,

src/serverHandler/upload.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ func getAvailableFilename(fsPrefix, filename string, mustAppendSuffix bool) stri
3636
return ""
3737
}
3838

39-
func (h *handler) saveUploadFiles(fsPrefix string, overwriteExists bool, aliasSubItems []os.FileInfo, r *http.Request) {
39+
func (h *handler) saveUploadFiles(fsPrefix string, overwriteExists bool, aliasSubItems []os.FileInfo, r *http.Request) bool {
4040
errs := []error{}
4141

4242
reader, err := r.MultipartReader()
4343
if err != nil {
4444
errs = append(errs, err)
45-
return
45+
return false
4646
}
4747

4848
for {
@@ -110,5 +110,8 @@ func (h *handler) saveUploadFiles(fsPrefix string, overwriteExists bool, aliasSu
110110

111111
if len(errs) > 0 {
112112
go h.logger.LogErrors(errs...)
113+
return false
113114
}
115+
116+
return true
114117
}

0 commit comments

Comments
 (0)