Commit Graph

34 Commits

Author SHA1 Message Date
Conrad Hoffmann
0456b28ba3 Support setting capabilities in ServePrincipal()
This is done properly in the carddav and caldav packages, but the custom
function does not know what the user intends to serve, so it must be
passed in from the user. Without this, certain clients (e.g. DAVx5)
will be unable to discover endpoints served this way.

Also slightly extend the supported methods returned on OPTIONS requests.
REPORT is properly supported, the others are mostly for not giving
clients the impression that the resources are read-only.
2022-12-13 15:46:51 +01:00
Conrad Hoffmann
9adfd95fa9 carddav: run gofmt 2022-08-31 13:53:16 +02:00
Conrad Hoffmann
a3e56141d9 carddav: add support for getcontentlength property
Allow the backend to provide a value for the `getcontentlength` property
as described in [RFC 2518 section 13.4][1].

The implementation treats is as optional, allthough it is a required
property per RFC. Most clients do perfectly fine without it, though.

Properly setting this in the backend makes the CardDAV collection
listable with clients that do require it, e.g. cadaver.

[1]: https://datatracker.ietf.org/doc/html/rfc2518#section-13.4
2022-05-24 11:18:11 +02:00
Conrad Hoffmann
6887b6b812 Support custom user principal and home set paths
Currently, the user principal path and the home set path are both
hardcoded to "/", for both CalDAV and CardDAV. This poses a challenge if
one wishes to run a CardDAV and CalDAV server in the same server.

This commit introduces the concept of a UserPrincipalBackend. This
backend must provide the path of the current user's principal URL from
the given request context.

The CalDAV and CardDAV backends are extended to also function as
UserPrincipalBackend. In addition, they are required to supply the path
of the respective home set (`calendar-home-set` and
`addressbook-home-set`). The CardDAV and CalDAV servers act accordingly.

The individual servers will continue to work as before (including the
option of keeping everything at "/"). If one wishes to run CardDAV and
CalDAV in parallel, the new `webdav.ServeUserPrincipal()` can be used as
a convenience function to serve a common user principal URL for both
servers. The input for this function can be easily computed by the
application by getting the home set paths from the backends and using
`caldav.NewCalendarHomeSet()` and `carddav.NewAddressbookHomeSet()` to
create the home sets.

Note that the storage backend will have to know about these paths as
well. For any non-trivial use case, a storage backend should probably
have access to the same UserPrincipalBackend. That is, however, an
implementation detail and doesn't have to be reflected in the
interfaces.
2022-05-11 11:12:04 +02:00
AlmogBaku
9e23289610 sync-collection for client 2020-05-25 18:28:24 +02:00
Simon Ser
abadf534f4
carddav: expose supported address data in client 2020-02-27 12:36:14 +01:00
Simon Ser
6aea0eda2d
caldav: add Client boilerplate 2020-01-30 13:18:05 +01:00
Simon Ser
1f509de404
carddav: honor address-data in addressbook-query 2020-01-27 10:30:19 +01:00
Simon Ser
73b67b62b1
carddav: add client support for query filter
References: https://github.com/emersion/go-webdav/issues/18
2020-01-24 12:24:35 +01:00
Simon Ser
5ada08f6ab
carddav: add full query AST 2020-01-24 11:25:58 +01:00
Simon Ser
94f47fa001
carddav: add limit support to addressbook-query
References: https://github.com/emersion/go-webdav/issues/18
2020-01-23 10:35:14 +01:00
Simon Ser
cd5945aace
carddav: add AddressBook{Query,MultiGet}.AllProp 2020-01-22 19:18:58 +01:00
Simon Ser
0a251a8dfb
carddav: add AddressObject.{ModTime,ETag} 2020-01-22 15:35:36 +01:00
Simon Ser
6eeeccb96e
all: encode hrefs, replace hrefs with path in public API
Closes: https://github.com/emersion/go-webdav/issues/14
Closes: https://github.com/emersion/go-webdav/issues/16
2020-01-22 11:07:30 +01:00
Simon Ser
0469c3d389
all: add basic docs 2020-01-21 21:01:18 +01:00
Simon Ser
6bac674701
carddav: add max-resource-size to serve 2020-01-19 15:06:09 +01:00
Simon Ser
edfc2804b5
carddav: add displayname and addressbook-description to server 2020-01-19 14:53:58 +01:00
Simon Ser
402593c5c6
carddav: define XML names as globals 2020-01-18 12:58:53 +01:00
Simon Ser
34b2ebf940
all: use variables for xml.Name values 2020-01-17 17:09:23 +01:00
Simon Ser
13d70be046
carddav: rename Address to AddressObject 2020-01-17 16:20:05 +01:00
Simon Ser
2b841a9234
carddav: add support for <addressbook-multiget> 2020-01-15 12:09:42 +01:00
Simon Ser
56c162197b
carddav: add Client.QueryAddressBook 2020-01-14 23:44:21 +01:00
Simon Ser
9dfabd89c8
carddav: add Client.FindAddressBooks 2020-01-14 23:13:23 +01:00
Simon Ser
3d05533a31
carddav: add very basic Client 2020-01-14 22:19:54 +01:00
Simon Ser
064cd80a24
Start from scratch 2020-01-14 17:51:33 +01:00
Simon Ser
1be15ec875
carddav: improve error handling 2020-01-08 18:54:29 +01:00
Konstantin Chukhlomin
6f8124dbbf Removed extra logging from carddav 2019-11-16 15:06:28 +01:00
emersion
fdd2e85cfe
carddav: go fmt 2017-09-11 19:10:53 +02:00
emersion
0581850864
carddav: add support for REPORT addressbook-multiget, fixes #2 2017-09-11 19:10:12 +02:00
emersion
fd5d1f32d2
Add ref to RFC in package doc 2017-09-10 10:39:55 +02:00
emersion
1152b72a07
carddav: add AddressBook.Info 2017-09-09 16:45:31 +02:00
emersion
8d4a1ede86
Use AddressObject.Stat if supported 2017-09-09 16:37:49 +02:00
emersion
7d69432517
carddav: add Stat to AddressObject interface 2017-09-04 12:06:06 +02:00
emersion
163fa1656d
carddav: first commit 2017-09-03 20:11:36 +02:00