chore: split action on resource patch handler

This commit is contained in:
Ramires Viana 2021-04-16 12:04:06 +00:00
parent 7ec24d9d77
commit b92152693f
1 changed files with 44 additions and 38 deletions

View File

@ -195,7 +195,9 @@ func resourcePatchHandler(fileCache FileCache) handleFunc {
if dst == "/" || src == "/" { if dst == "/" || src == "/" {
return http.StatusForbidden, nil return http.StatusForbidden, nil
} }
if err = checkParent(src, dst); err != nil {
err = checkParent(src, dst)
if err != nil {
return http.StatusBadRequest, err return http.StatusBadRequest, err
} }
@ -215,44 +217,8 @@ func resourcePatchHandler(fileCache FileCache) handleFunc {
return http.StatusForbidden, nil return http.StatusForbidden, nil
} }
file, err := files.NewFileInfo(files.FileOptions{
Fs: d.user.Fs,
Path: r.URL.Path,
Modify: d.user.Perm.Modify,
Expand: false,
ReadHeader: d.server.TypeDetectionByHeader,
Checker: d,
})
if err != nil {
return errToStatus(err), err
}
err = d.RunHook(func() error { err = d.RunHook(func() error {
switch action { return patchAction(r.Context(), action, src, dst, d, fileCache)
// TODO: use enum
case "copy":
if !d.user.Perm.Create {
return errors.ErrPermissionDenied
}
return fileutils.Copy(d.user.Fs, src, dst)
case "rename":
if !d.user.Perm.Rename {
return errors.ErrPermissionDenied
}
src = path.Clean("/" + src)
dst = path.Clean("/" + dst)
// delete thumbnails
err = delThumbs(r.Context(), fileCache, file)
if err != nil {
return err
}
return fileutils.MoveFile(d.user.Fs, src, dst)
default:
return fmt.Errorf("unsupported action %s: %w", action, errors.ErrInvalidRequestParams)
}
}, action, src, dst, d.user) }, action, src, dst, d.user)
return errToStatus(err), err return errToStatus(err), err
@ -328,3 +294,43 @@ func delThumbs(ctx context.Context, fileCache FileCache, file *files.FileInfo) e
return nil return nil
} }
func patchAction(ctx context.Context, action, src, dst string, d *data, fileCache FileCache) error {
switch action {
// TODO: use enum
case "copy":
if !d.user.Perm.Create {
return errors.ErrPermissionDenied
}
return fileutils.Copy(d.user.Fs, src, dst)
case "rename":
if !d.user.Perm.Rename {
return errors.ErrPermissionDenied
}
src = path.Clean("/" + src)
dst = path.Clean("/" + dst)
file, err := files.NewFileInfo(files.FileOptions{
Fs: d.user.Fs,
Path: src,
Modify: d.user.Perm.Modify,
Expand: false,
ReadHeader: false,
Checker: d,
})
if err != nil {
return err
}
// delete thumbnails
err = delThumbs(ctx, fileCache, file)
if err != nil {
return err
}
return fileutils.MoveFile(d.user.Fs, src, dst)
default:
return fmt.Errorf("unsupported action %s: %w", action, errors.ErrInvalidRequestParams)
}
}