Skip to content

Commit 24ec5c4

Browse files
authored
Merge pull request #36 from beclab/fix/delete_raw
fix: delete files
2 parents 2093bb8 + 776af72 commit 24ec5c4

File tree

13 files changed

+143
-152
lines changed

13 files changed

+143
-152
lines changed

pkg/drivers/clouds/cloud.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -284,26 +284,42 @@ func (s *CloudStorage) Create(contextArgs *models.HttpContextArgs) ([]byte, erro
284284

285285
func (s *CloudStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, error) {
286286
var fileParam = fileDeleteArg.FileParam
287+
var fileType = fileParam.FileType
287288
var user = fileParam.Owner
288289
var dirents = fileDeleteArg.Dirents
289290
var deleteFailedPaths []string
290291

291292
klog.Infof("Cloud delete, user: %s, param: %s", user, utils.ToJson(fileParam))
292293

294+
var invalidPaths []string
295+
296+
for _, dirent := range dirents {
297+
dirent = strings.TrimSpace(dirent)
298+
if dirent == "" || dirent == "/" || !strings.HasPrefix(dirent, "/") {
299+
invalidPaths = append(invalidPaths, dirent)
300+
break
301+
}
302+
}
303+
304+
if len(invalidPaths) > 0 {
305+
return utils.ToBytes(invalidPaths), fmt.Errorf("invalid path")
306+
}
307+
293308
for _, dp := range dirents {
309+
var direntPath string
310+
dp = strings.TrimSpace(dp)
294311

295-
var direntParam, err = models.CreateFileParam(user, dp)
296-
if err != nil {
297-
klog.Errorf("Cloud delete, user: %s, create delete param error: %v, path: %s", user, err, dp)
298-
deleteFailedPaths = append(deleteFailedPaths, dp)
299-
continue
312+
if fileType == constant.GoogleDrive {
313+
direntPath = dp
314+
} else {
315+
direntPath = fileParam.Path + strings.TrimLeft(dp, "/")
300316
}
301317

302318
klog.Infof("Cloud delete, user: %s, dirent: %s", user, dp)
303319

304-
dpd, err := url.PathUnescape(direntParam.Path)
320+
dpd, err := url.PathUnescape(direntPath)
305321
if err != nil {
306-
klog.Errorf("Cloud delete, path unescape error: %v, path: %s", direntParam.Path)
322+
klog.Errorf("Cloud delete, path unescape error: %v, path: %s", err, direntPath)
307323
deleteFailedPaths = append(deleteFailedPaths, dp)
308324
continue
309325
}
@@ -316,8 +332,8 @@ func (s *CloudStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, err
316332
}
317333

318334
var data = &models.DeleteParam{
319-
Drive: direntParam.FileType,
320-
Name: direntParam.Extend,
335+
Drive: fileParam.FileType,
336+
Name: fileParam.Extend,
321337
Path: p,
322338
}
323339

pkg/drivers/posix/posix.go

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"os"
1616
"path/filepath"
1717
"strconv"
18+
"strings"
1819

1920
"github.com/spf13/afero"
2021
"k8s.io/klog/v2"
@@ -73,6 +74,8 @@ func (s *PosixStorage) Preview(contextArgs *models.HttpContextArgs) (*models.Pre
7374
return nil, err
7475
}
7576

77+
klog.Infof("Posix preview, user: %s, fileType: %s, ext: %s, name: %s", owner, fileData.Type, fileData.Extension, fileData.Name)
78+
7679
switch fileData.Type {
7780
case "image":
7881
return preview.HandleImagePreview(fileData, queryParam)
@@ -167,35 +170,35 @@ func (s *PosixStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, err
167170
var err error
168171
var deleteFailedPaths []string
169172

170-
resourceUri, err := fileParam.GetResourceUri()
171-
if err != nil {
172-
return nil, err
173+
if dirents == nil || len(dirents) == 0 {
174+
return nil, fmt.Errorf("dirents is empty")
173175
}
174176

175-
for _, dirent := range dirents {
176-
var deleteParam *models.FileParam
177-
var fileData *files.FileInfo
177+
fileData, err := s.getFiles(fileParam, NoExpand, NoContent)
178+
if err != nil {
179+
klog.Errorf("Posix delete, get file data error: %s, user: %s, path: %s", err, user, fileParam.Path)
180+
return nil, fmt.Errorf("%s: no such file or directory", fileParam.Path)
181+
}
178182

179-
var deletePath = resourceUri + dirent
183+
var invalidPaths []string
180184

181-
deleteParam, err = models.CreateFileParam(user, deletePath)
182-
if err != nil {
183-
klog.Errorf("Posix delete, user: %s, delete path: %s, error: %s", user, deletePath, err)
184-
deleteFailedPaths = append(deleteFailedPaths, dirent)
185-
continue
185+
for _, dirent := range dirents {
186+
dirent = strings.TrimSpace(dirent)
187+
if dirent == "" || dirent == "/" || !strings.HasPrefix(dirent, "/") {
188+
invalidPaths = append(invalidPaths, dirent)
189+
break
186190
}
191+
}
187192

188-
klog.Infof("Posix delete, user: %s, file param: %s", user, utils.ToJson(deleteParam))
189-
190-
fileData, err = s.getFiles(deleteParam, Expand, NoContent)
191-
if err != nil {
192-
klog.Errorf("Posix delete, get file data error: %s, user: %s, path: %s", err, user, deletePath)
193-
deleteFailedPaths = append(deleteFailedPaths, dirent)
194-
continue
195-
}
193+
if len(invalidPaths) > 0 {
194+
return utils.ToBytes(invalidPaths), fmt.Errorf("invalid path")
195+
}
196196

197-
if err = fileData.Fs.RemoveAll(deleteParam.Path); err != nil {
198-
klog.Errorf("Posix delete, remove path error: %v, user: %s, path: %s", err, user, deleteParam.Path)
197+
for _, dirent := range dirents {
198+
dirent = strings.TrimSpace(dirent)
199+
direntPath := fileData.Path + dirent
200+
if err = fileData.Fs.RemoveAll(direntPath); err != nil {
201+
klog.Errorf("Posix delete, remove path error: %v, user: %s, path: %s", err, user, direntPath)
199202
deleteFailedPaths = append(deleteFailedPaths, dirent)
200203
}
201204
}
@@ -275,6 +278,7 @@ func (s *PosixStorage) getFiles(fileParam *models.FileParam, expand, content boo
275278
}
276279

277280
if s.isExternal(fileParam.FileType, fileParam.Extend) {
281+
klog.Infof("getFiles fileType: %s, extend: %s", fileParam.FileType, fileParam.Extend)
278282
file.ExternalType = global.GlobalMounted.CheckExternalType(file.Path, file.IsDir)
279283
if file.IsDir {
280284
for _, f := range file.Items {

pkg/drivers/sync/helper.go

Lines changed: 0 additions & 46 deletions
This file was deleted.

pkg/drivers/sync/helper_test.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

pkg/drivers/sync/sync.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ func (s *SyncStorage) Preview(contextArgs *models.HttpContextArgs) (*models.Prev
114114

115115
res, err := s.service.Get(seahubUrl, http.MethodGet, nil)
116116
if err != nil {
117+
klog.Errorf("Sync preview, get file failed, user: %s, url: %s, err: %s", owner, seahubUrl, err.Error())
117118
return nil, err
118119
}
119120

@@ -139,7 +140,7 @@ func (s *SyncStorage) Raw(contextArgs *models.HttpContextArgs) (*models.RawHandl
139140
var data []byte
140141
var err error
141142

142-
if queryParam.RawInline == "true" {
143+
if queryParam.RawMeta == "true" {
143144
getUrl := "http://127.0.0.1:80/seahub/lib/" + fileParam.Extend + "/file" + common.EscapeURLWithSpace(fileParam.Path) + "?dict=1"
144145

145146
klog.Infof("Sync raw, user: %s, get meta url: %s", fileParam.Owner, getUrl)
@@ -164,12 +165,10 @@ func (s *SyncStorage) Raw(contextArgs *models.HttpContextArgs) (*models.RawHandl
164165
}
165166
}
166167

167-
reader := bytes.NewReader(data)
168-
169168
return &models.RawHandlerResponse{
170-
Reader: reader,
171169
FileName: fileName,
172170
FileModified: time.Time{},
171+
Reader: bytes.NewReader(data),
173172
}, nil
174173
}
175174

@@ -236,20 +235,15 @@ func (s *SyncStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, erro
236235
var owner = fileParam.Owner
237236
var deleteFailedPaths []string
238237

239-
klog.Infof("Sync delete, user: %s, param: %s, delete paths: %v", owner, fileParam.Json(), dirents)
240-
241-
var commonPrefix = commonPathPrefix(dirents)
242-
if !strings.HasPrefix(commonPrefix, fmt.Sprintf("/%s/%s", fileParam.FileType, fileParam.Extend)) {
243-
return nil, fmt.Errorf("Sync delete, user: %s, path: %s, common path invalid", owner, commonPrefix)
244-
}
238+
klog.Infof("Sync delete, user: %s, param: %s, dirents: %v", owner, fileParam.Json(), dirents)
245239

246240
for _, dirent := range dirents {
247241
var data = make(map[string]interface{})
248242
data["repo_id"] = fileParam.Extend
249-
data["parent_dir"] = strings.TrimPrefix(commonPrefix, "/sync/"+fileParam.Extend)
250-
data["dirents"] = dirent
243+
data["parent_dir"] = fileParam.Path
244+
data["dirents"] = []string{strings.Trim(dirent, "/")}
251245

252-
klog.Infof("Sync delete, delete dirent, param: %s", utils.ToJson(data))
246+
klog.Infof("Sync delete, delete dirent, param: %s", []byte(utils.ToJson(data)))
253247

254248
deleteUrl := "http://127.0.0.1:80/seahub/api/v2.1/repos/batch-delete-item/"
255249
res, err := s.service.Get(deleteUrl, http.MethodDelete, []byte(utils.ToJson(data)))

pkg/global/external.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,14 @@ func (m *Mount) watchMounted() {
5858
klog.Errorln("watcher add error:", err)
5959
panic(err)
6060
}
61-
klog.Infof("watcher initialized at %s", path)
61+
klog.Infof("watcher initialized at: %s", path)
6262

6363
go func() {
6464
for {
6565
select {
6666
case err, ok := <-externalWatcher.Errors:
6767
if !ok {
68+
klog.Errorf("watcher error channel closed")
6869
return
6970
}
7071
klog.Errorf("watcher error: %v", err)
@@ -74,6 +75,7 @@ func (m *Mount) watchMounted() {
7475
return
7576
}
7677

78+
klog.Infof("watcher event: %s, op: %s", e.Name, e.Op.String())
7779
if e.Has(fsnotify.Chmod) {
7880
continue
7981
}
@@ -117,7 +119,7 @@ func (m *Mount) getMounted() {
117119
}
118120

119121
if result.Code != 200 {
120-
klog.Errorf("get mounted invalid, message: %s", result.Message)
122+
klog.Errorf("get mounted invalid, message: %s", *result.Message)
121123
return
122124
}
123125

pkg/http/data.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ func handle(fn handleFunc, prefix string, server *settings.Server) http.Handler
4040
}
4141

4242
if status != 0 {
43-
if status == http.StatusInternalServerError {
43+
if status >= http.StatusBadRequest {
44+
// if status == http.StatusInternalServerError {
4445
txt := http.StatusText(status)
4546
if err != nil {
4647
txt = err.Error()

pkg/http/http.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func NewHandler(
5858
api.PathPrefix("/repos").Handler(common(reposGetHandler)).Methods("GET")
5959
api.PathPrefix("/repos").Handler(common(createRepoHandler)).Methods("POST")
6060
api.PathPrefix("/repos").Handler(common(deleteRepoHandler)).Methods("DELETE")
61+
api.PathPrefix("/repos").Handler(common(renameRepoHandler)).Methods("PATCH")
6162

6263
api.PathPrefix("/resources").Handler(wrapperFilesResourcesArgs(listHandler, "/api/resources/")).Methods("GET") // list files
6364
api.PathPrefix("/resources").Handler(wrapperFilesResourcesArgs(createHandler, "/api/resources/")).Methods("POST") // create

0 commit comments

Comments
 (0)