• Stars
    star
    308
  • Rank 135,712 (Top 3 %)
  • Language
    Go
  • License
    BSD 3-Clause "New...
  • Created over 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A golang WebDAV client library and command line tool.

GoWebDAV

Unit Tests Status Build Artifacts 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)

Links

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 errors.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 IsErrCode

func IsErrCode(err error, code int) bool

IsErrCode returns true if the given error is an os.PathError wrapping a StatusError with the given status code.

func IsErrNotFound

func IsErrNotFound(err error) bool

IsErrNotFound is shorthand for IsErrCode for status 404.

func Join

func Join(path0 string, path1 string) string

Join joins two paths

func PathEscape

func PathEscape(path string) string

PathEscape escapes all segments 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) (err error)

Mkdir makes a directory

func (*Client) MkdirAll

func (c *Client) MkdirAll(path string, _ os.FileMode) (err 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) ReadStreamRange

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

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) (err error)

Write writes data to a given path

func (*Client) WriteStream

func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) (err 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

type StatusError

type StatusError struct {
    Status int
}

StatusError implements error and wraps an erroneous status code.

func (StatusError) Error

func (se StatusError) Error() string

Generated by godoc2md

More Repositories

1

tape-css

CSS unit testing. Lightning-fast. tape-style.
JavaScript
69
star
2

is-subset

Check if an object is contained within another one
JavaScript
28
star
3

array-from

A ponyfill for the ES 2015 `Array.from()`
JavaScript
16
star
4

doxie

The most flexible doc generator you’ve seen
JavaScript
11
star
5

natural-sort

Sorting with support for numbers, dates, unicode and more.
JavaScript
11
star
6

keyword-popularity

Get the number of npm packages with a certain keyword.
JavaScript
8
star
7

goat

An integration testing tool for HTTP APIs using a simple script language.
Go
8
star
8

bare-select

The lean alternative to <select>.
JavaScript
7
star
9

orthodox

Styles as a JS object – a strong, universal specification
JavaScript
6
star
10

functional-styles

The functional alternative to CSS
6
star
11

elk

An extensive error utility package with the focus on ease of use.
Go
5
star
12

markdown-code-hashtags

Convert every `#hashtag` to a link.
JavaScript
5
star
13

micro-raf

A tiny ponyfill for requestAnimationFrame
JavaScript
5
star
14

this-drop

Return the `this` object stripped of some properties.
JavaScript
5
star
15

commander-to-markdown

Render the options of a commander app as markdown
JavaScript
4
star
16

monopod

Monorepo done simple
JavaScript
4
star
17

tap-spec-integrated

A simple integrated TAP reporter. Works in node and browsers
JavaScript
3
star
18

lightning-talk

Show an SVG drawing as slides
JavaScript
3
star
19

goat-vscode

Visual Studio Code extension adding language support for Goatfiles.
3
star
20

sits

simple integration test suite
Perl
2
star
21

erase

Remove part of a markdown/HTML document.
JavaScript
2
star
22

mve

Move a file or folder. Platform-independent.
JavaScript
2
star
23

tiny-error

Super-light error objects.
JavaScript
1
star
24

dump-comments

Dump raw comments from JavaScript files as JSON.
JavaScript
1
star
25

polydox

Pipe multiple files into dox at once.
JavaScript
1
star
26

less-index

Create an entry point for a directory of LESS files.
JavaScript
1
star
27

doxie-core

The heart of doxie
JavaScript
1
star
28

ppftps

Push directories over a secured FTP connection.
Python
1
star
29

doxie-dummy

A tiny utility for testing doxie plugins.
JavaScript
1
star
30

hyperscript-custom

hyperscript with a custom impementation of `document`
HTML
1
star
31

doxie.append

Add a string at the end of your docs.
JavaScript
1
star