chore: split action on resource patch handler
parent
7ec24d9d77
commit
b92152693f
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue