| 25 | | |
| 26 | | |
| 27 | | == WebDAV support == |
| 28 | | |
| 29 | | Difficulty: medium - hard |
| 30 | | |
| 31 | | [http://allmydata.org/trac/tahoe-lafs/query?status=!closed&order=priority&keywords=~webdav Tickets labelled 'webdav'] |
| 32 | | |
| 33 | | WebDAV is a set of extensions to HTTP, specified in |
| 34 | | [http://tools.ietf.org/html/rfc2518.html RFC 2518] and |
| 35 | | [http://www.ics.uci.edu/~ejw/authoring/ a few other documents], |
| 36 | | that allow it to be used as a filesystem access protocol. |
| 37 | | Supporting WebDAV in Tahoe would mean extending the |
| 38 | | [source:/src/frontends/webapi.txt webapi frontend] to implement this |
| 39 | | protocol. |
| 40 | | |
| 41 | | The main attraction of implementing a WebDAV interface is that |
| 42 | | several operating systems have bundled and somewhat integrated support |
| 43 | | for it, including Mac OS X, Windows, and some Linux distributions. |
| 44 | | In fact WebDAV may turn out to be an easier alternative to |
| 45 | | [http://en.wikipedia.org/wiki/Server_Message_Block SMB/CIFS] |
| 46 | | for allowing filesystem access from Windows. |
| 47 | | |
| 48 | | However, there is currently no working WebDAV implementation in Twisted |
| 49 | | Python. There used to be one (the {{{web2.dav}}} package), |
| 50 | | [http://twistedmatrix.com/trac/ticket/3081 but it bitrotted]. |
| 51 | | You'll have to decide whether to help fix that implementation, use a |
| 52 | | non-Twisted implementation such as [http://code.google.com/p/wsgidav/ WsgiDAV] |
| 53 | | that might be more difficult to integrate wth the existing Tahoe code, |
| 54 | | or write your own. In any case, WebDAV is a complicated protocol and |
| 55 | | you will need to decide what subset of it gives most "bang for the buck" |
| 56 | | and is practical to support in the time available. For example, locking |
| 57 | | is optional in the WebDAV spec; is it needed to interoperate with commonly |
| 58 | | used WebDAV clients? |
| 59 | | |
| 60 | | Unlike most filesystems which are constrained to be trees, the structure |
| 61 | | of a Tahoe is in general a cyclic graph. |
| 62 | | [http://tools.ietf.org/html/draft-ietf-webdav-bind draft-ietf-webdav-bind] is |
| 63 | | an Internet Draft that clarifies how WebDAV servers should handle cycles. |
| 64 | | |
| 65 | | [http://savannah.nongnu.org/projects/davfs2 davfs2] is a FUSE-based |
| 66 | | WebDAV filesystem client for Linux. To ensure that this runs correctly |
| 67 | | over your implementation of WebDAV, you'll probably need to adapt the |
| 68 | | tests for the existing Tahoe |
| 69 | | [source:contrib/fuse/impl_c/blackmatch.py "blackmatch"] FUSE interface |
| 70 | | (this would not be redundant since the blackmatch implementation has |
| 71 | | limitations, especially for write access, that davfs2 would not have). |
| 72 | | |
| 73 | | The [http://en.wikipedia.org/wiki/WebDAV#Microsoft_Windows WebDAV mini-redirector] |
| 74 | | is the component of Windows providing its WebDAV filesystem support. It is |
| 75 | | actually the less buggy of |
| 76 | | [http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/ two implementations], but it still has had |
| 77 | | [http://greenbytes.de/tech/webdav/webdav-redirector-list.html bugs] and |
| 78 | | [http://www.microsoft.com/technet/security/bulletin/MS08-007.mspx security vulnerabilities] |
| 79 | | that you may need to take into account. |