mirror of
https://github.com/rclone/rclone.git
synced 2024-11-23 15:09:54 +08:00
e43b5ce5e5
This is possible now that we no longer support go1.12 and brings rclone into line with standard practices in the Go world. This also removes errors.New and errors.Errorf from lib/errors and prefers the stdlib errors package over lib/errors.
223 lines
5.4 KiB
Go
223 lines
5.4 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) {
|
|
var remotes = []string{}
|
|
for _, remote := range LoadedData().GetSectionList() {
|
|
remotes = append(remotes, remote)
|
|
}
|
|
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
|
|
}
|