| // Copyright 2014 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package webdav |
| |
| import ( |
| "errors" |
| "io" |
| "time" |
| ) |
| |
| var ( |
| ErrConfirmationFailed = errors.New("webdav: confirmation failed") |
| ErrForbidden = errors.New("webdav: forbidden") |
| ErrNoSuchLock = errors.New("webdav: no such lock") |
| ) |
| |
| // Condition can match a WebDAV resource, based on a token or ETag. |
| // Exactly one of Token and ETag should be non-empty. |
| type Condition struct { |
| Not bool |
| Token string |
| ETag string |
| } |
| |
| type LockSystem interface { |
| // TODO: comment that the conditions should be ANDed together. |
| Confirm(path string, conditions ...Condition) (c io.Closer, err error) |
| // TODO: comment that token should be an absolute URI as defined by RFC 3986, |
| // Section 4.3. In particular, it should not contain whitespace. |
| Create(path string, now time.Time, ld LockDetails) (token string, c io.Closer, err error) |
| Refresh(token string, now time.Time, duration time.Duration) (ld LockDetails, c io.Closer, err error) |
| Unlock(token string) error |
| } |
| |
| type LockDetails struct { |
| Depth int // Negative means infinite depth. |
| Duration time.Duration // Negative means unlimited duration. |
| OwnerXML string // Verbatim XML. |
| Path string |
| } |
| |
| // TODO: a MemLS implementation. |