mirror of
https://github.com/rclone/rclone.git
synced 2026-05-13 10:54:11 -04:00
Replace AuthRequired bool with NoAuth bool on the rc.Call struct and flip the auth check logic. Previously endpoints were unauthenticated by default and had to opt in with AuthRequired: true, which led to security vulnerabilities when developers forgot to set the flag. Now all endpoints require authentication by default. Only explicitly safe read-only endpoints are marked with NoAuth: true: - rc/noop - rc/error - rc/list - core/version - core/stats - core/group-list - core/transferred - core/du - cache/stats - vfs/list - vfs/stats - vfs/queue - job/status - job/list See GHSA-25qr-6mpr-f7qx, GHSA-jfwf-28xr-xw6q
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package sync
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/rclone/rclone/fs/rc"
|
|
)
|
|
|
|
func init() {
|
|
for _, name := range []string{"sync", "copy", "move"} {
|
|
moveHelp := ""
|
|
if name == "move" {
|
|
moveHelp = "- deleteEmptySrcDirs - delete empty src directories if set\n"
|
|
}
|
|
rc.Add(rc.Call{
|
|
Path: "sync/" + name,
|
|
Fn: func(ctx context.Context, in rc.Params) (rc.Params, error) {
|
|
return rcSyncCopyMove(ctx, in, name)
|
|
},
|
|
Title: name + " a directory from source remote to destination remote",
|
|
Help: `This takes the following parameters:
|
|
|
|
- srcFs - a remote name string e.g. "drive:src" for the source
|
|
- dstFs - a remote name string e.g. "drive:dst" for the destination
|
|
- createEmptySrcDirs - create empty src directories on destination if set
|
|
` + moveHelp + `
|
|
|
|
See the [` + name + `](/commands/rclone_` + name + `/) command for more information on the above.`,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Sync/Copy/Move a file
|
|
func rcSyncCopyMove(ctx context.Context, in rc.Params, name string) (out rc.Params, err error) {
|
|
srcFs, err := rc.GetFsNamed(ctx, in, "srcFs")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
dstFs, err := rc.GetFsNamed(ctx, in, "dstFs")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
createEmptySrcDirs, err := in.GetBool("createEmptySrcDirs")
|
|
if rc.NotErrParamNotFound(err) {
|
|
return nil, err
|
|
}
|
|
switch name {
|
|
case "sync":
|
|
return nil, Sync(ctx, dstFs, srcFs, createEmptySrcDirs)
|
|
case "copy":
|
|
return nil, CopyDir(ctx, dstFs, srcFs, createEmptySrcDirs)
|
|
case "move":
|
|
deleteEmptySrcDirs, err := in.GetBool("deleteEmptySrcDirs")
|
|
if rc.NotErrParamNotFound(err) {
|
|
return nil, err
|
|
}
|
|
return nil, MoveDir(ctx, dstFs, srcFs, deleteEmptySrcDirs, createEmptySrcDirs)
|
|
}
|
|
panic("unknown rcSyncCopyMove type")
|
|
}
|