blob: 41ecbf10bec365e7ef087041ed6afc0237347eb6 [file] [log] [blame]
eZ component: Webdav, Requirements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Author: Kore Nordmann, Tobias Schlitt
:Revision: $Rev:$
:Date: $Date:$
Introduction
============
Description
-----------
The purpose of this component is acting as a webdav server, let clients
download, upload and modify files from various sources.
Requirements
============
The first version of the component should support a filesystem as backend and
make it easy to write own custom backends for the data storage of the
webdav server. Imaginable are database backends, FTP-Servers and many more.
A major problem to be solved by this component is, that most implementations of
WebDAV clients violate the RFC, each in a different way. The component needs to
abstract from these violation and to make it easy to support new clients. On
each platform at least one client should be supported in the initial release,
as there are:
- Konqueror (Unix, KDE)
- Nautilus (Unix, Gnome)
- Internet Explorer, old and new implementation (Windows)
- Finder (MacOS)
Optionally:
- Firefox (Multi platform)
The default, RFC compliant, implementation must still be available and can be
tested using cadaver, the most standard compliance webdav client available.
Special Considerations
======================
Clients & Datasources
---------------------
The component should be flexible enough to easily add support for other
misbehaving clients later, and to easily add other datasources then the
filesystem backend. An solid abstraction of both tiers is the primary goal of
this component.
Dispatching
-----------
A developer integrating webdav using this component may want to use webdav as a
front end for several types of data. The dispatching of URLs to different
backends is task of the webserver, because it is capable of dispatching
requests based on a URL (host, port, path, ..) to a different scripts which will
perform as a webdav server for one single backend. Therefore dispatching will
not be part of this component in any way.
Locking
-------
We will support exclusive and shared locks directly in the server, including
generation of unique lock tokens and lock timeouts. The server will store the
lock state in a custom dead property resevered for this. The backend may
overwrite the locking capabilities of the server, to implement custom group
based shared locks, or exclusive lock mechanisms.
Exclusive Locks
Write lock, so that only this pricipal may modify this ressource or
collection.
Shared lock
Everyone with write access to the ressource may still change the ressource
or collection. The shared lock is just used as an indicator, that the
ressource is in use by another person and that communication is required
before performing any further change.
Authentication
--------------
Authentication is key mechanism in webdav, especially when it comes to
locking. A lock persits on a per principal basis, so that each user is
required to identify himself. The default authentication mechanism just
authorizes every user to connect and read the contents.
Optionally a ezcAuthenticationTiein may provide other authentication backends
which may deny the connection to the webdav server. A possibility to distinct
between interactive authentication mechanism (e.g. OpenID) and non-interactive
mechanisms is required, because not every webdav client supports HTML.
Therefore the Webdav component should only be capable of using non-interactive
authenticiation methods.
Authorization
-------------
The backend will handle the read / write authorization for its ressources and
deny the access, if required.
Metadata
--------
Webdav supports any kind of metadata in addition to the data required by the
RFC, which is possible through costom or predefinde properties. The storage of
these properties needs to implemented by the server. The predefined properties,
"live properties", needs to be validated by the server, while "dead
properties", user / client defined ones, are left untouched by the server. The
API of the backend classes still need a possibility to provide such dead
properties and to react on properties defined by the client.
It should be up to the storage backend to properly implement the storage of
this data. For example, the filesystem backend may use XML files attached to
the documents, or special file mechanisms like `XMP`__ to store the meta data
directly in the file headers.
__ http://wiki.creativecommons.org/XMP
Extensions
----------
Perhaps consider extensions of the Webdav protocol, like versioning and VCS
support, to be easily integrated later.
Terms
=====
Common WebDAV terms
Collection
Corresponds to a directory in a file system. Contains a set of other
collections and / or ressources.
Pricipal
Single user. May connect and act with multiple clients in parallel.
Formats
=======
In the first iteration of the component we will implement `RFC 2518`__ with
extensions for misbehaving clients.
We will not support webdav extensions like distributed authoring and
versioning defined in `RFC 3253`__ in the first stage, but keep these ideas in
mind during the design phase.
__ http://tools.ietf.org/rfc/rfc2518
__ http://tools.ietf.org/rfc/rfc3253
Other webdav related RFCs
- `RFC 2291`__ - Requirements for a Distributed Authoring and Versioning
Protocol for the World Wide Web
- `RFC 2518`__ - HTTP Extensions for Distributed Authoring - WEBDAV
- `RFC 3253`__ - Versioning Extensions to WebDAV
- `RFC 3648`__ - Web Distributed Authoring and Versioning (WebDAV) Order
Collections Protocol
- `RFC 3744`__ - Web Distributed Authoring and Versioning (WebDAV) Access
Control Protocol
- `RFC 4316`__ - Datatypes for Web Distributed Authoring and Versioning
(WebDAV) Properties
- `RFC 4331`__ - Quota and Size Properties for Distributed Authoring and
Versioning (DAV) Collections
- `RFC 4437`__ - Web Distributed Authoring and Versioning (WebDAV) Redirect
Reference Resources
__ http://tools.ietf.org/rfc/rfc2291
__ http://tools.ietf.org/rfc/rfc2518
__ http://tools.ietf.org/rfc/rfc3253
__ http://tools.ietf.org/rfc/rfc3648
__ http://tools.ietf.org/rfc/rfc3744
__ http://tools.ietf.org/rfc/rfc4316
__ http://tools.ietf.org/rfc/rfc4331
__ http://tools.ietf.org/rfc/rfc4437
..
Local Variables:
mode: rst
fill-column: 79
End:
vim: et syn=rst tw=79