alist Documentation

️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。

50,340 stars Go Go 4 files · ~11,971 tokens #file-server#gin#golang#onedrive#solidjs#webdav
RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy alist on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name alist -p 5244:5244 --restart always xhofe/alist:latest
Configured Services & Ports
⚙️ alist
image: xhofe/alist:latest
🔌 Ports: 5244:5244, 5245:5245
docker-compose.yml
yaml (docker-compose.yml)
version: '3.3'
services:
  alist:
    restart: always
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
      - '5245:5245'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
      - TZ=UTC
    container_name: alist
    image: 'xhofe/alist:latest'

Technical Documentation: AlistGo/alist

ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference

Overview (`README.md`)


English | 中文 | 日本語 | Contributing | CODE_OF_CONDUCT

Features

Document

https://alistgo.com/

API Documentation (via Apifox):

https://alist-public.apifox.cn/

Demo

https://al.nn.ci

Discussion

Please go to our discussion forum for general questions, issues are for bug reports and feature requests only.

AList is an open-source software, if you happen to like this project and want me to keep going, please consider sponsoring me or providing a single donation! Thanks for all the love and support:
https://alistgo.com/guide/sponsor.html

Special sponsors

  • VidHub - An elegant cloud video player within the Apple ecosystem. Support for iPhone, iPad, Mac, and Apple TV.

Contributors

Thanks goes to these wonderful people:

License

The AList is open-source software licensed under the AGPL-3.0 license.

Disclaimer

  • This program is a free and open source project. It is designed to share files on the network disk, which is convenient for downloading and learning Golang. Please abide by relevant laws and regulations when using it, and do not abuse it;
  • This program is implemented by calling the official sdk/interface, without destroying the official interface behavior;
  • This program only does 302 redirect/traffic forwarding, and does not intercept, store, or tamper with any user data;
  • Before using this program, you should understand and bear the corresponding risks, including but not limited to account ban, download speed limit, etc., which is none of this program's business;
  • If there is any infringement, please contact me by email, and it will be dealt with in time.

@GitHub · @TelegramGroup · @Discord


Overview (`pkg/gowebdav/README.md`)

GoWebDAV



A golang WebDAV client library.

Main features

gowebdav library allows to perform following actions on the remote WebDAV server:

Usage

First of all you should create Client instance using NewClient() function:

go
root := "https://webdav.mydomain.me"
user := "user"
password := "password"

c := gowebdav.NewClient(root, user, password)

After you can use this Client to perform actions, described below.

NOTICE: we will not check errors in examples, to focus you on the gowebdav library's code, but you should do it in your code!

Create path on a WebDAV server

go
err := c.Mkdir("folder", 0644)

In case you want to create several folders you can use c.MkdirAll():

go
err := c.MkdirAll("folder/subfolder/subfolder2", 0644)

Get files list

go
files, _ := c.ReadDir("folder/subfolder")
for _, file := range files {
    //notice that [file] has os.FileInfo type
    fmt.Println(file.Name())
}

Download file to byte array

go
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"

bytes, _ := c.Read(webdavFilePath)
ioutil.WriteFile(localFilePath, bytes, 0644)

Download file via reader

Also you can use c.ReadStream() method:

go
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"

reader, _ := c.ReadStream(webdavFilePath)

file, _ := os.Create(localFilePath)
defer file.Close()

io.Copy(file, reader)

Upload file from byte array

go
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"

bytes, _ := ioutil.ReadFile(localFilePath)

c.Write(webdavFilePath, bytes, 0644)

Upload file via writer

go
webdavFilePath := "folder/subfolder/file.txt"
localFilePath := "/tmp/webdav/file.txt"

file, _ := os.Open(localFilePath)
defer file.Close()

c.WriteStream(webdavFilePath, file, 0644)

Get information about specified file/folder

go
webdavFilePath := "folder/subfolder/file.txt"

info := c.Stat(webdavFilePath)
//notice that [info] has os.FileInfo type
fmt.Println(info)

Move file to another location

go
oldPath := "folder/subfolder/file.txt"
newPath := "folder/subfolder/moved.txt"
isOverwrite := true

c.Rename(oldPath, newPath, isOverwrite)

Copy file to another location

go
oldPath := "folder/subfolder/file.txt"
newPath := "folder/subfolder/file-copy.txt"
isOverwrite := true

c.Copy(oldPath, newPath, isOverwrite)

Delete file

go
webdavFilePath := "folder/subfolder/file.txt"

c.Remove(webdavFilePath)

More details about WebDAV server you can read from following resources:

NOTICE: RFC 2518 is obsoleted by RFC 4918 in June 2007

Contributing

All contributing are welcome. If you have any suggestions or find some bug - please create an Issue to let us make this project better. We appreciate your help!

License

This library is distributed under the BSD 3-Clause license found in the LICENSE file.

API

import "github.com/studio-b12/gowebdav"

Overview

Package gowebdav is a WebDAV client library with a command line tool
included.

Index

Examples

Package files

basicAuth.go client.go digestAuth.go doc.go file.go netrc.go requests.go utils.go

func [FixSlash](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=707:737#L45)

go
func FixSlash(s string) string

FixSlash appends a trailing / to our string

func [FixSlashes](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=859:891#L53)

go
func FixSlashes(s string) string

FixSlashes appends and prepends a / if they are missing

func [Join](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=992:1036#L62)

go
func Join(path0 string, path1 string) string

Join joins two paths

func [PathEscape](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=506:541#L36)

go
func PathEscape(path string) string

PathEscape escapes all segments of a given path

func [ReadConfig](https://github.com/studio-b12/gowebdav/blob/master/netrc.go?s=428:479#L27)

go
func ReadConfig(uri, netrc string) (string, string)

ReadConfig reads login and password configuration from ~/.netrc
machine foo.com login username password 123456

func [String](https://github.com/studio-b12/gowebdav/blob/master/utils.go?s=1166:1197#L67)

go
func String(r io.Reader) string

String pulls a string out of our io.Reader

type [Authenticator](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=388:507#L29)

go
type Authenticator interface {
    Type() string
    User() string
    Pass() string
    Authorize(*http.Request, string, string)
}

Authenticator stub

type [BasicAuth](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=106:157#L9)

go
type BasicAuth struct {
    // contains filtered or unexported fields
}

BasicAuth structure holds our credentials

func (\*BasicAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=473:549#L30)

go
func (b *BasicAuth) Authorize(req *http.Request, method string, path string)

Authorize the current request

func (\*BasicAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=388:421#L25)

go
func (b *BasicAuth) Pass() string

Pass holds the BasicAuth password

func (\*BasicAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=201:234#L15)

go
func (b *BasicAuth) Type() string

Type identifies the BasicAuthenticator

func (\*BasicAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/basicAuth.go?s=297:330#L20)

go
func (b *BasicAuth) User() string

User holds the BasicAuth username

type [Client](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=172:364#L18)

go
type Client struct {
    // contains filtered or unexported fields
}

Client defines our structure

func [NewClient](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1019:1063#L62)

go
func NewClient(uri, user, pw string) *Client

NewClient creates a new instance of client

func (\*Client) [Connect](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1843:1875#L87)

go
func (c *Client) Connect() error

Connect connects to our dav server

func (\*Client) [Copy](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6702:6770#L313)

go
func (c *Client) Copy(oldpath, newpath string, overwrite bool) error

Copy copies a file from A to B

func (\*Client) [Mkdir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5793:5849#L272)

go
func (c *Client) Mkdir(path string, _ os.FileMode) error

Mkdir makes a directory

func (\*Client) [MkdirAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6028:6087#L283)

go
func (c *Client) MkdirAll(path string, _ os.FileMode) error

MkdirAll like mkdir -p, but for webdav

func (\*Client) [Read](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6876:6926#L318)

go
func (c *Client) Read(path string) ([]byte, error)

Read reads the contents of a remote file

func (\*Client) [ReadDir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=2869:2929#L130)

go
func (c *Client) ReadDir(path string) ([]os.FileInfo, error)

ReadDir reads the contents of a remote directory

func (\*Client) [ReadStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=7237:7300#L336)

go
func (c *Client) ReadStream(path string) (io.ReadCloser, error)

ReadStream reads the stream for a given path

func (\*Client) [ReadStreamRange](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=8049:8139#L358)

go
func (c *Client) ReadStreamRange(path string, offset, length int64) (io.ReadCloser, error)

ReadStreamRange reads the stream representing a subset of bytes for a given path,
utilizing HTTP Range Requests if the server supports it.
The range is expressed as offset from the start of the file and length, for example
offset=10, length=10 will return bytes 10 through 19.

If the server does not support partial content requests and returns full content instead,
this function will emulate the behavior by skipping offset bytes and limiting the result
to length.

func (\*Client) [Remove](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5299:5341#L249)

go
func (c *Client) Remove(path string) error

Remove removes a remote file

func (\*Client) [RemoveAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5407:5452#L254)

go
func (c *Client) RemoveAll(path string) error

RemoveAll removes remote files

func (\*Client) [Rename](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6536:6606#L308)

go
func (c *Client) Rename(oldpath, newpath string, overwrite bool) error

Rename moves a file from A to B

func (\*Client) [SetHeader](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1235:1280#L67)

go
func (c *Client) SetHeader(key, value string)

SetHeader lets us set arbitrary headers for a given client

func (\*Client) [SetInterceptor](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1387:1469#L72)

go
func (c *Client) SetInterceptor(interceptor func(method string, rq *http.Request))

SetInterceptor lets us set an arbitrary interceptor for a given client

func (\*Client) [SetTimeout](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1571:1621#L77)

go
func (c *Client) SetTimeout(timeout time.Duration)

SetTimeout exposes the ability to set a time limit for requests

func (\*Client) [SetTransport](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=1714:1772#L82)

go
func (c *Client) SetTransport(transport http.RoundTripper)

SetTransport exposes the ability to define custom transports

func (\*Client) [Stat](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4255:4310#L197)

go
func (c *Client) Stat(path string) (os.FileInfo, error)

Stat returns the file stats for a specified path

func (\*Client) [Write](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=9051:9120#L388)

go
func (c *Client) Write(path string, data []byte, _ os.FileMode) error

Write writes data to a given path

func (\*Client) [WriteStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=9476:9556#L411)

go
func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) error

WriteStream writes a stream

type [DigestAuth](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=157:254#L14)

go
type DigestAuth struct {
    // contains filtered or unexported fields
}

DigestAuth structure holds our credentials

func (\*DigestAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=577:654#L36)

go
func (d *DigestAuth) Authorize(req *http.Request, method string, path string)

Authorize the current request

func (\*DigestAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=491:525#L31)

go
func (d *DigestAuth) Pass() string

Pass holds the DigestAuth password

func (\*DigestAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=299:333#L21)

go
func (d *DigestAuth) Type() string

Type identifies the DigestAuthenticator

func (\*DigestAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/digestAuth.go?s=398:432#L26)

go
func (d *DigestAuth) User() string

User holds the DigestAuth username

type [File](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=93:253#L10)

go
type File struct {
    // contains filtered or unexported fields
}

File is our structure for a given file

func (File) [ContentType](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=476:510#L31)

go
func (f File) ContentType() string

ContentType returns the content type of a file

func (File) [ETag](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=929:956#L56)

go
func (f File) ETag() string

ETag returns the ETag of a file

func (File) [IsDir](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1035:1061#L61)

go
func (f File) IsDir() bool

IsDir let us see if a given file is a directory or not

func (File) [ModTime](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=836:869#L51)

go
func (f File) ModTime() time.Time

ModTime returns the modified time of a file

func (File) [Mode](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=665:697#L41)

go
func (f File) Mode() os.FileMode

Mode will return the mode of a given file

func (File) [Name](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=378:405#L26)

go
func (f File) Name() string

Name returns the name of a file

func (File) [Path](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=295:322#L21)

go
func (f File) Path() string

Path returns the full path of a file

func (File) [Size](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=573:599#L36)

go
func (f File) Size() int64

Size returns the size of a file

func (File) [String](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1183:1212#L71)

go
func (f File) String() string

String lets us see file information

func (File) [Sys](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1095:1126#L66)

go
func (f File) Sys() interface{}

Sys ????

type [NoAuth](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=551:599#L37)

go
type NoAuth struct {
    // contains filtered or unexported fields
}

NoAuth structure holds our credentials

func (\*NoAuth) [Authorize](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=894:967#L58)

go
func (n *NoAuth) Authorize(req *http.Request, method string, path string)

Authorize the current request

func (\*NoAuth) [Pass](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=812:842#L53)

go
func (n *NoAuth) Pass() string

Pass returns the current password

func (\*NoAuth) [Type](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=638:668#L43)

go
func (n *NoAuth) Type() string

Type identifies the authenticator

func (\*NoAuth) [User](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=724:754#L48)

go
func (n *NoAuth) User() string

User returns the current user


Generated by godoc2md


Overview (`pkg/aria2/rpc/README.md`)

PACKAGE DOCUMENTATION

package rpc

text
import "github.com/matzoe/argo/rpc"

FUNCTIONS

text
func Call(address, method string, params, reply interface{}) error

TYPES

text
type Client struct {
    // contains filtered or unexported fields
}
text
func New(uri string) *Client
text
func (id *Client) AddMetalink(uri string, options ...interface{}) (gid string, err error)

aria2.addMetalink(metalink[, options[, position]]) This method adds Metalink download by uploading ".metalink" file. metalink is of type base64 which contains Base64-encoded ".metalink" file. options is of type struct and its members are a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the
waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns array of GID of registered download. If --rpc-save-upload-metadata is true, the uploaded data is saved as a file named hex string of SHA-1 hash of data plus ".metalink" in the directory specified by --dir option. The example of filename is 0a3893293e27ac0490424c06de4d09242215f0a6.metalink. If same file already exists, it is overwritten. If the file cannot be saved successfully or --rpc-save-upload-metadata is false, the downloads added by this method are not saved by --save-session.

text
func (id *Client) AddTorrent(filename string, options ...interface{}) (gid string, err error)

aria2.addTorrent(torrent[, uris[, options[, position]]]) This method adds BitTorrent download by uploading ".torrent" file. If you want to add BitTorrent Magnet URI, use aria2.addUri() method instead. torrent is of type base64 which contains Base64-encoded ".torrent" file. uris is of type array and its element is URI which is of type string. uris is used for Web-seeding. For single file torrents, URI can be a complete URI pointing to the resource or if URI ends with /, name in torrent file is added. For multi-file torrents, name and path in torrent are added to form a URI for each file. options is of type struct and its members are
a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns GID of registered download. If --rpc-save-upload-metadata is true, the uploaded data is saved as a file named hex string of SHA-1 hash of data plus ".torrent" in the
directory specified by --dir option. The example of filename is 0a3893293e27ac0490424c06de4d09242215f0a6.torrent. If same file already exists, it is overwritten. If the file cannot be saved successfully or --rpc-save-upload-metadata is false, the downloads added by this method are not saved by --save-session.

text
func (id *Client) AddUri(uri string, options ...interface{}) (gid string, err error)

aria2.addUri(uris[, options[, position]]) This method adds new HTTP(S)/FTP/BitTorrent Magnet URI. uris is of type array and its element is URI which is of type string. For BitTorrent Magnet URI, uris must have only one element and it should be BitTorrent Magnet URI. URIs in uris must point to the same file. If you mix other URIs which point to another file, aria2 does not complain but download may
fail. options is of type struct and its members are a pair of option name and value. See Options below for more details. If position is given as an integer starting from 0, the new download is inserted at position in the waiting queue. If position is not given or position is larger than the size of the queue, it is appended at the end of the queue. This method returns GID of registered download.

text
func (id *Client) ChangeGlobalOption(options map[string]interface{}) (g string, err error)

aria2.changeGlobalOption(options) This method changes global options dynamically. options is of type struct. The following options are available:

text
download-result
log
log-level
max-concurrent-downloads
max-download-result
max-overall-download-limit
max-overall-upload-limit
save-cookies
save-session
server-stat-of

In addition to them, options listed in Input File subsection are available, except for following options: checksum, index-out, out, pause and select-file. Using log option, you can dynamically start logging or change log file. To stop logging, give empty string("") as a parameter value. Note that log file is always opened in append mode. This method returns OK for success.

text
func (id *Client) ChangeOption(gid string, options map[string]interface{}) (g string, err error)

aria2.changeOption(gid, options) This method changes options of the download denoted by gid dynamically. gid is of type string. options is of type struct. The following options are available for active downloads:

text
bt-max-peers
bt-request-peer-speed-limit
bt-remove-unselected-file
force-save
max-download-limit
max-upload-limit

For waiting or paused downloads, in addition to the above options, options listed in Input File subsection are available, except for following options: dry-run, metalink-base-uri, parameterized-uri, pause, piece-length and rpc-save-upload-metadata option. This method returns OK for success.

text
func (id *Client) ChangePosition(gid string, pos int, how string) (p int, err error)

aria2.changePosition(gid, pos, how) This method changes the position of the download denoted by gid. pos is of type integer. how is of type string. If how is POS_SET, it moves the download to a position relative to the beginning of the queue. If how is POS_CUR, it moves the download to a position relative to the current position. If how is POS_END, it moves the download to a position relative to the end of the queue. If the destination position is less than 0 or beyond the end
of the queue, it moves the download to the beginning or the end of the queue respectively. The response is of type integer and it is the destination position.

text
func (id *Client) ChangeUri(gid string, fileindex int, delUris []string, addUris []string, position ...int) (p []int, err error)

aria2.changeUri(gid, fileIndex, delUris, addUris[, position]) This method removes URIs in delUris from and appends URIs in addUris to download denoted by gid. delUris and addUris are list of string. A download can contain multiple files and URIs are attached to each file. fileIndex is used to select which file to remove/attach given URIs. fileIndex is 1-based. position is used to specify where URIs are inserted in the existing waiting URI list. position is 0-based. When
position is omitted, URIs are appended to the back of the list. This method first execute removal and then addition. position is the position after URIs are removed, not the position when this method is called. When removing URI, if same URIs exist in download, only one of them is removed for each URI in delUris. In other words, there are three URIs http://example.org/aria2 and you want remove them all, you
have to specify (at least) 3 http://example.org/aria2 in delUris. This method returns a list which contains 2 integers. The first integer is the number of URIs deleted. The second integer is the number of URIs added.

text
func (id *Client) ForcePause(gid string) (g string, err error)

aria2.forcePause(pid) This method pauses the download denoted by gid. This method behaves just like aria2.pause() except that this method pauses download without any action which takes time such as contacting BitTorrent tracker.

text
func (id *Client) ForcePauseAll() (g string, err error)

aria2.forcePauseAll() This method is equal to calling aria2.forcePause() for every active/waiting download. This methods returns OK for success.

text
func (id *Client) ForceRemove(gid string) (g string, err error)

aria2.forceRemove(gid) This method removes the download denoted by gid. This method behaves just like aria2.remove() except that this method removes download without any action which takes time such as contacting BitTorrent tracker.

text
func (id *Client) ForceShutdown() (g string, err error)

aria2.forceShutdown() This method shutdowns aria2. This method behaves like aria2.shutdown() except that any actions which takes time such as contacting BitTorrent tracker are skipped. This method returns OK.

text
func (id *Client) GetFiles(gid string) (m map[string]interface{}, err error)

aria2.getFiles(gid) This method returns file list of the download denoted by gid. gid is of type string.

text
func (id *Client) GetGlobalOption() (m map[string]interface{}, err error)

aria2.getGlobalOption() This method returns global options. The response is of type struct. Its key is the name of option. The value type is string. Note that this method does not return options which have no default value and have not been set by the command-line options, configuration files or RPC methods. Because global options are used as a template for the options of newly added download, the response contains
keys returned by aria2.getOption() method.

text
func (id *Client) GetGlobalStat() (m map[string]interface{}, err error)

aria2.getGlobalStat() This method returns global statistics such as overall download and upload speed.

text
func (id *Client) GetOption(gid string) (m map[string]interface{}, err error)

aria2.getOption(gid) This method returns options of the download denoted by gid. The response is of type struct. Its key is the name of option. The value type is string. Note that this method does not return options which have no default value and have not been set by the command-line options, configuration files or RPC methods.

text
func (id *Client) GetPeers(gid string) (m []map[string]interface{}, err error)

aria2.getPeers(gid) This method returns peer list of the download denoted by gid. gid is of type string. This method is for BitTorrent only.

text
func (id *Client) GetServers(gid string) (m []map[string]interface{}, err error)

aria2.getServers(gid) This method returns currently connected HTTP(S)/FTP servers of the download denoted by gid. gid is of type string.

text
func (id *Client) GetSessionInfo() (m map[string]interface{}, err error)

aria2.getSessionInfo() This method returns session information.

text
func (id *Client) GetUris(gid string) (m map[string]interface{}, err error)

aria2.getUris(gid) This method returns URIs used in the download denoted by gid. gid is of type string.

text
func (id *Client) GetVersion() (m map[string]interface{}, err error)

aria2.getVersion() This method returns version of the program and the list of enabled features.

text
func (id *Client) Multicall(methods []map[string]interface{}) (r []interface{}, err error)

system.multicall(methods) This method encapsulates multiple method calls in a single request. methods is of type array and its element is struct. The struct contains two keys: methodName and params. methodName is the method name to call and params is array containing parameters to the method. This method returns array of responses. The element of array will either be a one-item array containing the return value of each method call or struct of fault element if an encapsulated method call fails.

text
func (id *Client) Pause(gid string) (g string, err error)

aria2.pause(gid) This method pauses the download denoted by gid. gid is of type string. The status of paused download becomes paused. If the download is active, the download is placed on the first position of waiting queue. As long as the status is paused, the download is not started. To change status to waiting, use aria2.unpause() method. This method returns GID of paused download.

text
func (id *Client) PauseAll() (g string, err error)

aria2.pauseAll() This method is equal to calling aria2.pause() for every active/waiting download. This methods returns OK for success.

text
func (id *Client) PurgeDownloadResult() (g string, err error)

aria2.purgeDownloadResult() This method purges completed/error/removed downloads to free memory. This method returns OK.

text
func (id *Client) Remove(gid string) (g string, err error)

aria2.remove(gid) This method removes the download denoted by gid. gid is of type string. If specified download is in progress, it is stopped at first. The status of removed download becomes removed. This method returns GID of removed download.

text
func (id *Client) RemoveDownloadResult(gid string) (g string, err error)

aria2.removeDownloadResult(gid) This method removes completed/error/removed download denoted by gid from memory. This method returns OK for success.

text
func (id *Client) Shutdown() (g string, err error)

aria2.shutdown() This method shutdowns aria2. This method returns OK.

text
func (id *Client) TellActive(keys ...string) (m []map[string]interface{}, err error)

aria2.tellActive([keys]) This method returns the list of active downloads. The response is of type array and its element is the same struct returned by aria2.tellStatus() method. For keys parameter, please refer to aria2.tellStatus() method.

text
func (id *Client) TellStatus(gid string, keys ...string) (m map[string]interface{}, err error)

aria2.tellStatus(gid[, keys]) This method returns download progress of the download denoted by gid. gid is of type string. keys is array of string. If it is specified, the response contains only keys in keys array. If keys is empty or not specified, the response contains all keys. This is useful when you just want specific keys and avoid unnecessary transfers. For example, aria2.tellStatus("2089b05ecca3d829", ["gid", "status"]) returns gid and status key.

text
func (id *Client) TellStopped(offset, num int, keys ...string) (m []map[string]interface{}, err error)

aria2.tellStopped(offset, num[, keys]) This method returns the list of stopped download. offset is of type integer and specifies the offset from the oldest download. num is of type integer and specifies the number of downloads to be returned. For keys parameter, please refer to aria2.tellStatus() method. offset and num have the same semantics as aria2.tellWaiting() method. The response is of type array and its element is the same struct returned by aria2.tellStatus() method.

text
func (id *Client) TellWaiting(offset, num int, keys ...string) (m []map[string]interface{}, err error)

aria2.tellWaiting(offset, num[, keys]) This method returns the list of waiting download, including paused downloads. offset is of type integer and specifies the offset from the download waiting at the front. num is of type integer and specifies the number of downloads to be returned. For keys parameter, please refer to aria2.tellStatus() method. If offset is a positive integer, this method returns downloads
in the range of [offset, offset + num). offset can be a negative integer. offset == -1 points last download in the waiting queue and offset == -2 points the download before the last download, and so on. The downloads in the response are in reversed order. For example, imagine that three downloads "A","B" and "C" are waiting in this order.

text
aria2.tellWaiting(0, 1) returns ["A"].
aria2.tellWaiting(1, 2) returns ["B", "C"].
aria2.tellWaiting(-1, 2) returns ["C", "B"].

The response is of type array and its element is the same struct returned by aria2.tellStatus() method.

text
func (id *Client) Unpause(gid string) (g string, err error)

aria2.unpause(gid) This method changes the status of the download denoted by gid from paused to waiting. This makes the download eligible to restart. gid is of type string. This method returns GID of unpaused download.

text
func (id *Client) UnpauseAll() (g string, err error)

aria2.unpauseAll() This method is equal to calling aria2.unpause() for every active/waiting download. This methods returns OK for success.


Overview (`pkg/gowebdav/cmd/gowebdav/README.md`)

Description

Command line tool for gowebdav library.

Prerequisites

Software

  • OS: all, which are supported by Golang
  • Golang: version 1.x
  • Git: version 2.14.2 at higher (required to install via go get)

Install

sh
go get -u github.com/studio-b12/gowebdav/cmd/gowebdav

Usage

It is recommended to set following environment variables to improve your experience with this tool:

  • ROOT is an URL of target WebDAV server (e.g. https://webdav.mydomain.me/user_root_folder)
  • USER is a login to connect to specified server (e.g. user)
  • PASSWORD is a password to connect to specified server (e.g. p@s$w0rD)

In following examples we suppose that:

  • environment variable ROOT is set to https://webdav.mydomain.me/ufolder
  • environment variable USER is set to user
  • environment variable PASSWORD is set p@s$w0rD
  • folder /ufolder/temp exists on the server
  • file /ufolder/temp/file.txt exists on the server
  • file /ufolder/temp/document.rtf exists on the server
  • file /tmp/webdav/to_upload.txt exists on the local machine
  • folder /tmp/webdav/ is used to download files from the server

Examples

Get content of specified folder

sh
gowebdav -X LS temp

Get info about file/folder

sh
gowebdav -X STAT temp
gowebdav -X STAT temp/file.txt

Create folder on the remote server

sh
gowebdav -X MKDIR temp2
gowebdav -X MKDIRALL all/folders/which-you-want/to_create

Download file

sh
gowebdav -X GET temp/document.rtf /tmp/webdav/document.rtf

You may do not specify target local path, in this case file will be downloaded to the current folder with the

Upload file

sh
gowebdav -X PUT temp/uploaded.txt /tmp/webdav/to_upload.txt

Move file on the remote server

sh
gowebdav -X MV temp/file.txt temp/moved_file.txt

Copy file to another location

sh
gowebdav -X MV temp/file.txt temp/file-copy.txt

Delete file from the remote server

sh
gowebdav -X DEL temp/file.txt

Wrapper script

You can create wrapper script for your server (via $EDITOR ./dav && chmod a+x ./dav) and add following content to it:

sh
#!/bin/sh

ROOT="https://my.dav.server/" \
USER="foo" \
PASSWORD="$(pass dav/[email protected])" \
gowebdav $@

It allows you to use pass or similar tools to retrieve the password.

Examples

Using the dav wrapper:

sh
$ ./dav -X LS /

$ echo hi dav! > hello && ./dav -X PUT /hello
$ ./dav -X STAT /hello
$ ./dav -X PUT /hello_dav hello
$ ./dav -X GET /hello_dav
$ ./dav -X GET /hello_dav hello.txt

--- METRICS ---