rc

package
v0.0.0-...-1dc401f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2024 License: MIT Imports: 27 Imported by: 0

Documentation

Overview

Package rc implements a remote control server and registry for rclone

To register your internal calls, call rc.Add(path, function). Your function should take and return a Param. It can also return an error. Use rc.NewError to wrap an existing error along with an http response type if another response other than 500 internal error is required on error.

Index

Constants

This section is empty.

Variables

View Source
var Calls = NewRegistry()

Calls is the global registry of Call objects

View Source
var DefaultOpt = Options{
	HTTP:              libhttp.DefaultCfg(),
	Auth:              libhttp.DefaultAuthCfg(),
	Template:          libhttp.DefaultTemplateCfg(),
	Enabled:           false,
	JobExpireDuration: 60 * time.Second,
	JobExpireInterval: 10 * time.Second,
}

DefaultOpt is the default values used for Options

Functions

func Add

func Add(call Call)

Add a function to the global registry

func AddOption

func AddOption(name string, option interface{})

AddOption adds an option set

func AddOptionReload

func AddOptionReload(name string, option interface{}, reload func(context.Context) error)

AddOptionReload adds an option set with a reload function to be called when options are changed

func GetFs

func GetFs(ctx context.Context, in Params) (f fs.Fs, err error)

GetFs gets an fs.Fs named "fs" either from the cache or creates it afresh

func GetFsAndRemote

func GetFsAndRemote(ctx context.Context, in Params) (f fs.Fs, remote string, err error)

GetFsAndRemote gets the `fs` parameter from in, makes a remote or fetches it from the cache then gets the `remote` parameter from in too.

func GetFsAndRemoteNamed

func GetFsAndRemoteNamed(ctx context.Context, in Params, fsName, remoteName string) (f fs.Fs, remote string, err error)

GetFsAndRemoteNamed gets the fsName parameter from in, makes a remote or fetches it from the cache then gets the remoteName parameter from in too.

func GetFsNamed

func GetFsNamed(ctx context.Context, in Params, fsName string) (f fs.Fs, err error)

GetFsNamed gets an fs.Fs named fsName either from the cache or creates it afresh

func GetFsNamedFileOK

func GetFsNamedFileOK(ctx context.Context, in Params, fsName string) (newCtx context.Context, f fs.Fs, err error)

GetFsNamedFileOK gets an fs.Fs named fsName either from the cache or creates it afresh

If the fs.Fs points to a single file then it returns a new ctx with filters applied to make the listings return only that file.

func IsErrParamInvalid

func IsErrParamInvalid(err error) bool

IsErrParamInvalid returns whether err is ErrParamInvalid

func IsErrParamNotFound

func IsErrParamNotFound(err error) bool

IsErrParamNotFound returns whether err is ErrParamNotFound

func NotErrParamNotFound

func NotErrParamNotFound(err error) bool

NotErrParamNotFound returns true if err != nil and !IsErrParamNotFound(err)

This is for checking error returns of the Get* functions to ignore error not found returns and take the default value.

func Reshape

func Reshape(out interface{}, in interface{}) error

Reshape reshapes one blob of data into another via json serialization

out should be a pointer type

This isn't a very efficient way of dealing with this!

func WriteJSON

func WriteJSON(w io.Writer, out Params) error

WriteJSON writes JSON in out to w

Types

type Call

type Call struct {
	Path          string // path to activate this RC
	Fn            Func   `json:"-"` // function to call
	Title         string // help for the function
	AuthRequired  bool   // if set then this call requires authorisation to be set
	Help          string // multi-line markdown formatted help
	NeedsRequest  bool   // if set then this call will be passed the original request object as _request
	NeedsResponse bool   // if set then this call will be passed the original response object as _response
}

Call defines info about a remote control function and is used in the Add function to create new entry points.

type ErrParamInvalid

type ErrParamInvalid struct {
	// contains filtered or unexported fields
}

ErrParamInvalid - this is returned from the Get* functions if the parameter is invalid.

Returning an error of this type from an rc.Func will cause the http method to return http.StatusBadRequest

func NewErrParamInvalid

func NewErrParamInvalid(err error) ErrParamInvalid

NewErrParamInvalid returns new ErrParamInvalid from given error

type ErrParamNotFound

type ErrParamNotFound string

ErrParamNotFound - this is returned from the Get* functions if the parameter isn't found along with a zero value of the requested item.

Returning an error of this type from an rc.Func will cause the http method to return http.StatusBadRequest

func (ErrParamNotFound) Error

func (e ErrParamNotFound) Error() string

Error turns this error into a string

type Func

type Func func(ctx context.Context, in Params) (out Params, err error)

Func defines a type for a remote control function

type Options

type Options struct {
	HTTP                libhttp.Config
	Auth                libhttp.AuthConfig
	Template            libhttp.TemplateConfig
	Enabled             bool   // set to enable the server
	Serve               bool   // set to serve files from remotes
	ServeNoModTime      bool   // don't read the modification time
	Files               string // set to enable serving files locally
	NoAuth              bool   // set to disable auth checks on AuthRequired methods
	WebUI               bool   // set to launch the web ui
	WebGUIUpdate        bool   // set to check new update
	WebGUIForceUpdate   bool   // set to force download new update
	WebGUINoOpenBrowser bool   // set to disable auto opening browser
	WebGUIFetchURL      string // set the default url for fetching webgui
	EnableMetrics       bool   // set to disable prometheus metrics on /metrics
	JobExpireDuration   time.Duration
	JobExpireInterval   time.Duration
}

Options contains options for the remote control server

type Params

type Params map[string]interface{}

Params is the input and output type for the Func

func Error

func Error(path string, in Params, err error, status int) (Params, int)

Error creates the standard response for an errored rc call using an rc.Param from a path, input Params, error and a suggested HTTP response code.

It returns a Params and an updated status code

func (Params) Copy

func (p Params) Copy() (out Params)

Copy shallow copies the Params

func (Params) Get

func (p Params) Get(key string) (interface{}, error)

Get gets a parameter from the input

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be nil.

func (Params) GetBool

func (p Params) GetBool(key string) (bool, error)

GetBool gets a boolean parameter from the input

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be false.

func (Params) GetDuration

func (p Params) GetDuration(key string) (time.Duration, error)

GetDuration get the duration parameters from in

func (Params) GetFloat64

func (p Params) GetFloat64(key string) (float64, error)

GetFloat64 gets a float64 parameter from the input

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be 0.

func (Params) GetHTTPRequest

func (p Params) GetHTTPRequest() (*http.Request, error)

GetHTTPRequest gets a http.Request parameter associated with the request with the key "_request"

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be nil.

func (Params) GetHTTPResponseWriter

func (p Params) GetHTTPResponseWriter() (http.ResponseWriter, error)

GetHTTPResponseWriter gets a http.ResponseWriter parameter associated with the request with the key "_response"

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be nil.

func (Params) GetInt64

func (p Params) GetInt64(key string) (int64, error)

GetInt64 gets an int64 parameter from the input

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be 0.

func (Params) GetString

func (p Params) GetString(key string) (string, error)

GetString gets a string parameter from the input

If the parameter isn't found then error will be of type ErrParamNotFound and the returned value will be "".

func (Params) GetStruct

func (p Params) GetStruct(key string, out interface{}) error

GetStruct gets a struct from key from the input into the struct pointed to by out. out must be a pointer type.

If the parameter isn't found then error will be of type ErrParamNotFound and out will be unchanged.

func (Params) GetStructMissingOK

func (p Params) GetStructMissingOK(key string, out interface{}) error

GetStructMissingOK works like GetStruct but doesn't return an error if the key is missing

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry holds the list of all the registered remote control functions

func NewRegistry

func NewRegistry() *Registry

NewRegistry makes a new registry for remote control functions

func (*Registry) Add

func (r *Registry) Add(call Call)

Add a call to the registry

func (*Registry) Get

func (r *Registry) Get(path string) *Call

Get a Call from a path or nil

func (*Registry) List

func (r *Registry) List() (out []*Call)

List of all calls in alphabetical order

Directories

Path Synopsis
Package jobs manages background jobs that the rc is running.
Package jobs manages background jobs that the rc is running.
Package rcflags implements command line flags to set up the remote control
Package rcflags implements command line flags to set up the remote control
Package rcserver implements the HTTP endpoint to serve the remote control
Package rcserver implements the HTTP endpoint to serve the remote control
Package webgui provides plugin functionality to the Web GUI.
Package webgui provides plugin functionality to the Web GUI.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL