A golang WebDAV client library and command line tool.
Go to file
2021-11-09 09:32:28 +01:00
.github add artifacts workflow 2021-11-07 22:37:54 +01:00
cmd/gowebdav ref: make names more descriptive 2019-12-15 01:31:08 +02:00
.gitignore add .vscode directory 2021-11-09 09:32:28 +01:00
.travis.yml Creating parent collection method was added (#22) 2018-07-14 01:48:30 +02:00
basicAuth.go fixed panic due to concurrent map writes 2020-09-28 11:17:19 +02:00
client.go added ReadStreamRange() method to efficiently read a range of data 2021-11-04 23:32:32 -07:00
digestAuth.go fixed panic due to concurrent map writes 2020-09-28 11:17:19 +02:00
doc.go docs 2018-05-25 23:59:53 +02:00
file.go Add File.Path to return the full path (#34) 2020-03-03 15:28:06 +01:00
go.mod create go module 2021-11-07 22:35:47 +01:00
LICENSE add NEW BSD Liscense 2014-10-23 10:37:45 +02:00
Makefile docs 2018-05-25 23:59:53 +02:00
netrc.go add ability to read login / pw from ~/.netrc 2018-05-26 01:36:44 +02:00
README.md Update API description 2021-04-27 23:21:33 +02:00
requests.go use seeker when available on request 2021-11-08 09:54:01 +01:00
utils_test.go Fix index out of range runtime error when provided string is empty 2021-09-17 13:24:28 +02:00
utils.go added ReadStreamRange() method to efficiently read a range of data 2021-11-04 23:32:32 -07:00

GoWebDAV

Build Status GoDoc Go Report Card

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:

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

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

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

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

Get files list

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

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:

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

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

bytes, _ := ioutil.ReadFile(localFilePath)

c.Write(webdavFilePath, bytes, 0644)

Upload file via writer

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

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

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

Move file to another location

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

c.Rename(oldPath, newPath, isOverwrite)

Copy file to another location

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

c.Copy(oldPath, newPath, isOverwrite)

Delete file

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

func FixSlash(s string) string

FixSlash appends a trailing / to our string

func FixSlashes

func FixSlashes(s string) string

FixSlashes appends and prepends a / if they are missing

func Join

func Join(path0 string, path1 string) string

Join joins two paths

func PathEscape

func PathEscape(path string) string

PathEscape escapes all segemnts of a given path

func ReadConfig

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

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

func String

func String(r io.Reader) string

String pulls a string out of our io.Reader

type Authenticator

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

Authenticator stub

type BasicAuth

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

BasicAuth structure holds our credentials

func (*BasicAuth) Authorize

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

Authorize the current request

func (*BasicAuth) Pass

func (b *BasicAuth) Pass() string

Pass holds the BasicAuth password

func (*BasicAuth) Type

func (b *BasicAuth) Type() string

Type identifies the BasicAuthenticator

func (*BasicAuth) User

func (b *BasicAuth) User() string

User holds the BasicAuth username

type Client

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

Client defines our structure

func NewClient

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

NewClient creates a new instance of client

func (*Client) Connect

func (c *Client) Connect() error

Connect connects to our dav server

func (*Client) Copy

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

Copy copies a file from A to B

func (*Client) Mkdir

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

Mkdir makes a directory

func (*Client) MkdirAll

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

MkdirAll like mkdir -p, but for webdav

func (*Client) Read

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

Read reads the contents of a remote file

func (*Client) ReadDir

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

ReadDir reads the contents of a remote directory

func (*Client) ReadStream

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

ReadStream reads the stream for a given path

func (*Client) Remove

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

Remove removes a remote file

func (*Client) RemoveAll

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

RemoveAll removes remote files

func (*Client) Rename

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

Rename moves a file from A to B

func (*Client) SetHeader

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

SetHeader lets us set arbitrary headers for a given client

func (*Client) SetInterceptor

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

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

SetTimeout exposes the ability to set a time limit for requests

func (*Client) SetTransport

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

SetTransport exposes the ability to define custom transports

func (*Client) Stat

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

Stat returns the file stats for a specified path

func (*Client) Write

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

Write writes data to a given path

func (*Client) WriteStream

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

WriteStream writes a stream

type DigestAuth

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

DigestAuth structure holds our credentials

func (*DigestAuth) Authorize

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

Authorize the current request

func (*DigestAuth) Pass

func (d *DigestAuth) Pass() string

Pass holds the DigestAuth password

func (*DigestAuth) Type

func (d *DigestAuth) Type() string

Type identifies the DigestAuthenticator

func (*DigestAuth) User

func (d *DigestAuth) User() string

User holds the DigestAuth username

type File

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

File is our structure for a given file

func (File) ContentType

func (f File) ContentType() string

ContentType returns the content type of a file

func (File) ETag

func (f File) ETag() string

ETag returns the ETag of a file

func (File) IsDir

func (f File) IsDir() bool

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

func (File) ModTime

func (f File) ModTime() time.Time

ModTime returns the modified time of a file

func (File) Mode

func (f File) Mode() os.FileMode

Mode will return the mode of a given file

func (File) Name

func (f File) Name() string

Name returns the name of a file

func (File) Path

func (f File) Path() string

Path returns the full path of a file

func (File) Size

func (f File) Size() int64

Size returns the size of a file

func (File) String

func (f File) String() string

String lets us see file information

func (File) Sys

func (f File) Sys() interface{}

Sys ????

type NoAuth

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

NoAuth structure holds our credentials

func (*NoAuth) Authorize

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

Authorize the current request

func (*NoAuth) Pass

func (n *NoAuth) Pass() string

Pass returns the current password

func (*NoAuth) Type

func (n *NoAuth) Type() string

Type identifies the authenticator

func (*NoAuth) User

func (n *NoAuth) User() string

User returns the current user


Generated by godoc2md