webdav

package module
v0.0.0-...-bc27a06 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2024 License: MIT Imports: 13 Imported by: 0

README

go-webdav

Go Reference builds.sr.ht status

A Go library for WebDAV, CalDAV and CardDAV.

License

MIT

CalDAV Client Example

In this example, we demonstrate how to use a CalDAV client to interact with a CalDAV server. The following steps are performed:

  1. Initialization of an HTTP client with basic authentication.
  2. Creation of a CalDAV client and handling.
  3. Finding the current user principal.
  4. Searching for the calendar home set.
  5. Finding a list of calendars with their names and paths.

Code Example

  • Initialization of an HTTP client with basic authentication.
baHttpClient := webdav.HTTPClientWithBasicAuth(
    client,
    user,
    password,
)
  • Creation of a CalDAV client and handling.
caldavClient, err := caldav.NewClient(baHttpClient, root)
if err != nil {
    log.Fatal(err)
}
  • Finding the current user principal.
principal, err := caldavClient.FindCurrentUserPrincipal(context.Background())
if err != nil {
    log.Fatal(err)
}
  • Searching for the calendar home set.
homeSet, err := caldavClient.FindCalendarHomeSet(context.Background(), principal)
if err != nil {
    log.Fatal(err)
}
  • Finding a list of calendars with their names and paths.
calendars, err := caldavClient.FindCalendars(context.Background(), homeSet)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("\n\nResponse:\n")
for i, calendar := range calendars {
    fmt.Printf("cal %d: %s %s\n", i, calendar.Name, calendar.Path)
}

Installation

Make sure you have the required dependencies installed using go get.

go get github.com/Raimguzhinov/go-webdav
go get github.com/Raimguzhinov/go-webdav/caldav

Usage

  1. Replace client, user, password, and root with your actual values.
  2. Run the code and follow the output messages.

This is a simple demonstration of interacting with a CalDAV server using the go-webdav/caldav library in Go!

Documentation

Overview

Package webdav provides a client and server WebDAV filesystem implementation.

WebDAV is defined in RFC 4918.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewHTTPError

func NewHTTPError(statusCode int, cause error) error

NewHTTPError creates a new error that is associated with an HTTP status code and optionally an error that lead to it. Backends can use this functions to return errors that convey some semantics (e.g. 404 not found, 403 access denied, etc) while also providing an (optional) arbitrary error context (intended for humans).

func ServePrincipal

func ServePrincipal(w http.ResponseWriter, r *http.Request, options *ServePrincipalOptions)

ServePrincipal replies to requests for a principal URL.

Types

type BackendSuppliedHomeSet

type BackendSuppliedHomeSet interface {
	GetXMLName() xml.Name
}

BackendSuppliedHomeSet represents either a CalDAV calendar-home-set or a CardDAV addressbook-home-set. It should only be created via caldav.NewCalendarHomeSet or carddav.NewAddressBookHomeSet. Only to be used server-side, for listing a user's home sets as determined by the (external) backend.

type Capability

type Capability string

Capability indicates the features that a server supports.

type Client

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

Client provides access to a remote WebDAV filesystem.

func NewClient

func NewClient(c HTTPClient, endpoint string) (*Client, error)

NewClient creates a new WebDAV client.

If the HTTPClient is nil, http.DefaultClient is used.

To use HTTP basic authentication, HTTPClientWithBasicAuth can be used.

func (*Client) Copy

func (c *Client) Copy(ctx context.Context, name, dest string, options *CopyOptions) error

Copy copies a file.

By default, if the file is a directory, all descendants are recursively copied as well.

func (*Client) Create

func (c *Client) Create(ctx context.Context, name string) (io.WriteCloser, error)

Create writes a file's contents.

func (*Client) FindCurrentUserPrincipal

func (c *Client) FindCurrentUserPrincipal(ctx context.Context) (string, error)

FindCurrentUserPrincipal finds the current user's principal path.

func (*Client) Mkdir

func (c *Client) Mkdir(ctx context.Context, name string) error

Mkdir creates a new directory.

func (*Client) Move

func (c *Client) Move(ctx context.Context, name, dest string, options *MoveOptions) error

Move moves a file.

func (*Client) Open

func (c *Client) Open(ctx context.Context, name string) (io.ReadCloser, error)

Open fetches a file's contents.

func (*Client) ReadDir

func (c *Client) ReadDir(ctx context.Context, name string, recursive bool) ([]FileInfo, error)

ReadDir lists files in a directory.

func (*Client) RemoveAll

func (c *Client) RemoveAll(ctx context.Context, name string) error

RemoveAll deletes a file. If the file is a directory, all of its descendants are recursively deleted as well.

func (*Client) Stat

func (c *Client) Stat(ctx context.Context, name string) (*FileInfo, error)

Stat fetches a FileInfo for a single file.

type ConditionalMatch

type ConditionalMatch string

ConditionalMatch represents the value of a conditional header according to RFC 2068 section 14.25 and RFC 2068 section 14.26 The (optional) value can either be a wildcard or an ETag.

func (ConditionalMatch) ETag

func (val ConditionalMatch) ETag() (string, error)

func (ConditionalMatch) IsSet

func (val ConditionalMatch) IsSet() bool

func (ConditionalMatch) IsWildcard

func (val ConditionalMatch) IsWildcard() bool

type CopyOptions

type CopyOptions struct {
	NoRecursive bool
	NoOverwrite bool
}

type FileInfo

type FileInfo struct {
	Path     string
	Size     int64
	ModTime  time.Time
	IsDir    bool
	MIMEType string
	ETag     string
}

FileInfo holds information about a WebDAV file.

type FileSystem

type FileSystem interface {
	Open(ctx context.Context, name string) (io.ReadCloser, error)
	Stat(ctx context.Context, name string) (*FileInfo, error)
	ReadDir(ctx context.Context, name string, recursive bool) ([]FileInfo, error)
	Create(ctx context.Context, name string) (io.WriteCloser, error)
	RemoveAll(ctx context.Context, name string) error
	Mkdir(ctx context.Context, name string) error
	Copy(ctx context.Context, name, dest string, options *CopyOptions) (created bool, err error)
	Move(ctx context.Context, name, dest string, options *MoveOptions) (created bool, err error)
}

FileSystem is a WebDAV server backend.

type HTTPClient

type HTTPClient interface {
	Do(req *http.Request) (*http.Response, error)
}

HTTPClient performs HTTP requests. It's implemented by *http.Client.

func HTTPClientWithBasicAuth

func HTTPClientWithBasicAuth(c HTTPClient, username, password string) HTTPClient

HTTPClientWithBasicAuth returns an HTTP client that adds basic authentication to all outgoing requests. If c is nil, http.DefaultClient is used.

type Handler

type Handler struct {
	FileSystem FileSystem
}

Handler handles WebDAV HTTP requests. It can be used to create a WebDAV server.

func (*Handler) ServeHTTP

func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP implements http.Handler.

type LocalFileSystem

type LocalFileSystem string

LocalFileSystem implements FileSystem for a local directory.

func (LocalFileSystem) Copy

func (fs LocalFileSystem) Copy(
	ctx context.Context,
	src, dst string,
	options *CopyOptions,
) (created bool, err error)

func (LocalFileSystem) Create

func (fs LocalFileSystem) Create(ctx context.Context, name string) (io.WriteCloser, error)

func (LocalFileSystem) Mkdir

func (fs LocalFileSystem) Mkdir(ctx context.Context, name string) error

func (LocalFileSystem) Move

func (fs LocalFileSystem) Move(
	ctx context.Context,
	src, dst string,
	options *MoveOptions,
) (created bool, err error)

func (LocalFileSystem) Open

func (fs LocalFileSystem) Open(ctx context.Context, name string) (io.ReadCloser, error)

func (LocalFileSystem) ReadDir

func (fs LocalFileSystem) ReadDir(
	ctx context.Context,
	name string,
	recursive bool,
) ([]FileInfo, error)

func (LocalFileSystem) RemoveAll

func (fs LocalFileSystem) RemoveAll(ctx context.Context, name string) error

func (LocalFileSystem) Stat

func (fs LocalFileSystem) Stat(ctx context.Context, name string) (*FileInfo, error)

type MoveOptions

type MoveOptions struct {
	NoOverwrite bool
}

type ServePrincipalOptions

type ServePrincipalOptions struct {
	CurrentUserPrincipalPath string
	HomeSets                 []BackendSuppliedHomeSet
	Capabilities             []Capability
}

ServePrincipalOptions holds options for ServePrincipal.

type UserPrincipalBackend

type UserPrincipalBackend interface {
	CurrentUserPrincipal(ctx context.Context) (string, error)
}

UserPrincipalBackend can determine the current user's principal URL for a given request context.

Directories

Path Synopsis
Package caldav provides a client and server CalDAV implementation.
Package caldav provides a client and server CalDAV implementation.
Package carddav provides a client and server CardDAV implementation.
Package carddav provides a client and server CardDAV implementation.
cmd
Package internal provides low-level helpers for WebDAV clients and servers.
Package internal provides low-level helpers for WebDAV clients and servers.

Jump to

Keyboard shortcuts

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