mirror of
https://github.com/rclone/rclone.git
synced 2024-11-23 13:09:58 +08:00
ec117593f1
Used staticcheck 2022.1.2 (v0.3.2) See: staticcheck.io
220 lines
5.3 KiB
Go
220 lines
5.3 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/rclone/rclone/fs"
|
|
"github.com/rclone/rclone/fs/rc"
|
|
)
|
|
|
|
func init() {
|
|
rc.Add(rc.Call{
|
|
Path: "config/dump",
|
|
Fn: rcDump,
|
|
Title: "Dumps the config file.",
|
|
AuthRequired: true,
|
|
Help: `
|
|
Returns a JSON object:
|
|
- key: value
|
|
|
|
Where keys are remote names and values are the config parameters.
|
|
|
|
See the [config dump command](/commands/rclone_config_dump/) command for more information on the above.
|
|
`,
|
|
})
|
|
}
|
|
|
|
// Return the config file dump
|
|
func rcDump(ctx context.Context, in rc.Params) (out rc.Params, err error) {
|
|
return DumpRcBlob(), nil
|
|
}
|
|
|
|
func init() {
|
|
rc.Add(rc.Call{
|
|
Path: "config/get",
|
|
Fn: rcGet,
|
|
Title: "Get a remote in the config file.",
|
|
AuthRequired: true,
|
|
Help: `
|
|
Parameters:
|
|
|
|
- name - name of remote to get
|
|
|
|
See the [config dump command](/commands/rclone_config_dump/) command for more information on the above.
|
|
`,
|
|
})
|
|
}
|
|
|
|
// Return the config file get
|
|
func rcGet(ctx context.Context, in rc.Params) (out rc.Params, err error) {
|
|
name, err := in.GetString("name")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return DumpRcRemote(name), nil
|
|
}
|
|
|
|
func init() {
|
|
rc.Add(rc.Call{
|
|
Path: "config/listremotes",
|
|
Fn: rcListRemotes,
|
|
Title: "Lists the remotes in the config file.",
|
|
AuthRequired: true,
|
|
Help: `
|
|
Returns
|
|
- remotes - array of remote names
|
|
|
|
See the [listremotes command](/commands/rclone_listremotes/) command for more information on the above.
|
|
`,
|
|
})
|
|
}
|
|
|
|
// Return the a list of remotes in the config file
|
|
func rcListRemotes(ctx context.Context, in rc.Params) (out rc.Params, err error) {
|
|
remotes := LoadedData().GetSectionList()
|
|
out = rc.Params{
|
|
"remotes": remotes,
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func init() {
|
|
rc.Add(rc.Call{
|
|
Path: "config/providers",
|
|
Fn: rcProviders,
|
|
Title: "Shows how providers are configured in the config file.",
|
|
AuthRequired: true,
|
|
Help: `
|
|
Returns a JSON object:
|
|
- providers - array of objects
|
|
|
|
See the [config providers command](/commands/rclone_config_providers/) command for more information on the above.
|
|
`,
|
|
})
|
|
}
|
|
|
|
// Return the config file providers
|
|
func rcProviders(ctx context.Context, in rc.Params) (out rc.Params, err error) {
|
|
out = rc.Params{
|
|
"providers": fs.Registry,
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func init() {
|
|
for _, name := range []string{"create", "update", "password"} {
|
|
name := name
|
|
extraHelp := ""
|
|
if name == "create" {
|
|
extraHelp = "- type - type of the new remote\n"
|
|
}
|
|
if name == "create" || name == "update" {
|
|
extraHelp += `- opt - a dictionary of options to control the configuration
|
|
- obscure - declare passwords are plain and need obscuring
|
|
- noObscure - declare passwords are already obscured and don't need obscuring
|
|
- nonInteractive - don't interact with a user, return questions
|
|
- continue - continue the config process with an answer
|
|
- all - ask all the config questions not just the post config ones
|
|
- state - state to restart with - used with continue
|
|
- result - result to restart with - used with continue
|
|
`
|
|
}
|
|
rc.Add(rc.Call{
|
|
Path: "config/" + name,
|
|
AuthRequired: true,
|
|
Fn: func(ctx context.Context, in rc.Params) (rc.Params, error) {
|
|
return rcConfig(ctx, in, name)
|
|
},
|
|
Title: name + " the config for a remote.",
|
|
Help: `This takes the following parameters:
|
|
|
|
- name - name of remote
|
|
- parameters - a map of \{ "key": "value" \} pairs
|
|
` + extraHelp + `
|
|
|
|
See the [config ` + name + ` command](/commands/rclone_config_` + name + `/) command for more information on the above.`,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Manipulate the config file
|
|
func rcConfig(ctx context.Context, in rc.Params, what string) (out rc.Params, err error) {
|
|
name, err := in.GetString("name")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
parameters := rc.Params{}
|
|
err = in.GetStruct("parameters", ¶meters)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var opt UpdateRemoteOpt
|
|
err = in.GetStruct("opt", &opt)
|
|
if err != nil && !rc.IsErrParamNotFound(err) {
|
|
return nil, err
|
|
}
|
|
// Backwards compatibility
|
|
if value, err := in.GetBool("obscure"); err == nil {
|
|
opt.Obscure = value
|
|
}
|
|
if value, err := in.GetBool("noObscure"); err == nil {
|
|
opt.NoObscure = value
|
|
}
|
|
var configOut *fs.ConfigOut
|
|
switch what {
|
|
case "create":
|
|
remoteType, typeErr := in.GetString("type")
|
|
if typeErr != nil {
|
|
return nil, typeErr
|
|
}
|
|
configOut, err = CreateRemote(ctx, name, remoteType, parameters, opt)
|
|
case "update":
|
|
configOut, err = UpdateRemote(ctx, name, parameters, opt)
|
|
case "password":
|
|
err = PasswordRemote(ctx, name, parameters)
|
|
default:
|
|
err = errors.New("unknown rcConfig type")
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !opt.NonInteractive {
|
|
return nil, nil
|
|
}
|
|
if configOut == nil {
|
|
configOut = &fs.ConfigOut{}
|
|
}
|
|
err = rc.Reshape(&out, configOut)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func init() {
|
|
rc.Add(rc.Call{
|
|
Path: "config/delete",
|
|
Fn: rcDelete,
|
|
Title: "Delete a remote in the config file.",
|
|
AuthRequired: true,
|
|
Help: `
|
|
Parameters:
|
|
|
|
- name - name of remote to delete
|
|
|
|
See the [config delete command](/commands/rclone_config_delete/) command for more information on the above.
|
|
`,
|
|
})
|
|
}
|
|
|
|
// Return the config file delete
|
|
func rcDelete(ctx context.Context, in rc.Params) (out rc.Params, err error) {
|
|
name, err := in.GetString("name")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
DeleteRemote(name)
|
|
return nil, nil
|
|
}
|