Caldav carddav Bundles: Difference between revisions
No edit summary |
No edit summary |
||
Line 30: | Line 30: | ||
# uncomment this entry if you have a clustered setup and want to use the other nodes too | # uncomment this entry if you have a clustered setup and want to use the other nodes too | ||
#BalancerMember http://<ip-of-other-host>:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX2 | #BalancerMember http://<ip-of-other-host>:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX2 | ||
# for ajp http service (on systems < 7.6.0 | # for ajp http service (on systems < 7.6.0) | ||
# BalancerMember ajp://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1 | # BalancerMember ajp://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1 | ||
SetEnv proxy-initial-not-pooled | SetEnv proxy-initial-not-pooled |
Revision as of 12:25, 1 July 2014
Installation and Configuration of the CalDAV- and CardDAV-bundles
The Open-Xchange server can be accessed via it's CalDAV- and CardDAV-interfaces to allow the synchronization of Calendar- and Contact-data with external applications like the Mac OS X iCal and Address Book clients. The synchronization protocols are available starting with Version 6.20.1 Rev5.
CalDAV and CardDAV are standard protocols for the exchange of calendar data and address data respectively. The CalDAV interface publishes all the user's calendar folders via CalDAV so the user can subscribe to them in a client application. Similarly, the CardDAV interface publishes the user's contact folders. Depending on the used client, the user can either subscribe one or more folders, or access all available data in an aggregated way.
User Guide and Client Configuration
Please find further information regarding the client configuration at CalDAVClients and CardDAVClients.
Webserver Configuration
In order to redirect DAV requests to the appropiate servlets, the webserver's configuration may need to be adjusted using one of the following alternatives. Please be aware that for a working Mavericks auto configuration setup you need to have SSL enabled on the server. The non-SSL variant described below only works if you use the advanced CalDav configuration in Mavericks and enter the path by hand. If you just want to enter the hostname SSL is required. The same applies to iOS7 where SSL is always required.
Alternative 1: Apache vhost (recommended)
Please edit your site configuration file for OX so that the existing OX configuration as well as the CalDAV/CardDav configuration are placed inside their own virtual hosts sections..
Please add the following entries before you existing VirtualHost entry. This is an example where MYSERVER.TLD is the domain-name of the ox-server:
NameVirtualHost *:80 <VirtualHost *:80> ServerName dav.<MYSERVER.TLD> ErrorLog /tmp/dav.err.log TransferLog /tmp/dav.access.log <Proxy balancer://oxserver-sync> Order deny,allow Allow from all # for grizzly http service BalancerMember http://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1 # uncomment this entry if you have a clustered setup and want to use the other nodes too #BalancerMember http://<ip-of-other-host>:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX2 # for ajp http service (on systems < 7.6.0) # BalancerMember ajp://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1 SetEnv proxy-initial-not-pooled SetEnv proxy-sendchunked </Proxy> <Proxy /> Order allow,deny Allow from all ProxyPass balancer://oxserver-sync/servlet/dav/ </Proxy> </VirtualHost>
If you use this method, you have to make sure that dav.<MYSERVER.TLD> is reachable, your dns configuration need an entry for this name. Take care of the the dav.* logfiles, the example writes them without logrotation to /tmp.
Please note the NameVirtualHost
directive is needed to be able to specify multiple virtual hosts for the same IP. The differentiation is only done by the given ServerName
. This implies that you need two server names, so the virtual host entry for the existing ox site configuration needs to be also enriched by a ServerName
if not already present. If you access the system without one of the given ServerName
s so e.g. via the IP the system will pick the corresponding one by order (in this case the DAV part first. If you want it to work differently please change the order accordingly.
Alternative 2: Apache useragent detection
For environments where it is inconvenient to setup a vhost there is the possibility to redirect to relevant servlets another way: Via useragent detection. This is not recommended for the following reason: Per definition this is a whitelist-approach and any client sending a useragent-string not explicitly listed in the configuration will not be able to connect . Useragent-strings may also change between different versions of an application or may even be actively changed into something non-standard.
$ vi <your-ox-site-configuration-file>
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} Calendar [OR] RewriteCond %{HTTP_USER_AGENT} DataAccess [OR] RewriteCond %{HTTP_USER_AGENT} DAVKit [OR] RewriteCond %{HTTP_USER_AGENT} Lightning [OR] RewriteCond %{HTTP_USER_AGENT} Adresboek [OR] RewriteCond %{HTTP_USER_AGENT} dataaccessd [OR] RewriteCond %{HTTP_USER_AGENT} Preferences [OR] RewriteCond %{HTTP_USER_AGENT} Adressbuch [OR] RewriteCond %{HTTP_USER_AGENT} AddressBook [OR] RewriteCond %{HTTP_USER_AGENT} Address%20Book [OR] RewriteCond %{HTTP_USER_AGENT} CalendarStore [OR] RewriteCond %{HTTP_USER_AGENT} CoreDAV # select if you run ajp (proxy_ajp.conf) or grizzly (proxy_http.conf), here grizzly is used: #RewriteRule (.*) ajp://localhost:8009/servlet/dav$1 [P] # for ajp http service RewriteRule (.*) http://localhost:8009/servlet/dav$1 [P] # for grizzly http service
Note: The address book app on OSX 10.6 uses a localized user-agent string. If you're expecting clients with non-english language settings, you need to add the translated user-agent string to these rewrite rules. For example: "Adressbuch" for german OSX clients.
Autodiscovery
By providing some DNS service name registrations for your domain and adding an additional rewrite-rule to the webserver's configuration, it's possible for some clients to automatically discover the account settings by just providing the user's e-mail address and password. The procedure is specified in RFC 6764.
The following example illustrates the DNS entries where MYSERVER.TLD would be the domain name of the ox-server, both for CalDAV and CardDAV via HTTP and HTTPS on the virtual host dav.MYSERVER.TLD:
_caldavs._tcp.MYSERVER.TLD. 10800 IN SRV 10 1 443 dav.MYSERVER.TLD. _caldav._tcp.MYSERVER.TLD. 10800 IN SRV 10 1 80 dav.MYSERVER.TLD. _carddavs._tcp.MYSERVER.TLD. 10800 IN SRV 10 1 443 dav.MYSERVER.TLD. _carddav._tcp.MYSERVER.TLD. 10800 IN SRV 10 1 80 dav.MYSERVER.TLD.
Additionally, a rewrite-rule similar to the following example should be added to the webserver configuration of the virtual host to enable the bootstrapping process:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/\.well-known/caldav [OR] RewriteCond %{REQUEST_URI} ^/\.well-known/carddav RewriteRule (.*) / [L,R]
Which packages do I need?
To get CalDAV and CardDAV up and running you need the following packages:
In v6.20 and earlier:
- open-xchange-webdav-directory - Assembles the *DAV interfaces into a common tree. This is needed for publishing certain properties so clients accept the OX is a WebDAV Server.
- open-xchange-webdav-acl - The WebDAV equivalent of the /ajax/user interface. Allows clients to discover the current and other users and their addressbooks and calendars.
- open-xchange-carddav - The CardDAV interface exposing the users addressbook via carddav
- open-xchange-caldav - The CalDAV inteface exposing the users calendars via caldav
With v6.22 we have significantly reduced the number of packages necessary to install Open-Xchange Server.
In v6.22 and later only one package is needed:
- open-xchange-dav
Installation on OX App Suite
If there are any differences from for the Open-Xchange App Suite product family from version 6.22 they will be listed here
Install on OX AppSuite
Debian GNU/Linux 11.0
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:
deb https://software.open-xchange.com/products/updates/DebianBullseye/ /
# if you have a valid maintenance subscription, please uncomment the
# following and add the ldb account data to the url so that the most recent
# packages get installed
# deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/updates/updates/DebianBullseye/ /
and run
$ apt-get update $ apt-get install open-xchange-caldav open-xchange-carddav open-xchange-webdav-acl open-xchange-webdav-directory
Debian GNU/Linux 12.0
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:
deb https://software.open-xchange.com/products/updates/DebianBookworm/ /
# if you have a valid maintenance subscription, please uncomment the
# following and add the ldb account data to the url so that the most recent
# packages get installed
# deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/updates/updates/DebianBookworm/ /
and run
$ apt-get update $ apt-get install open-xchange-caldav open-xchange-carddav open-xchange-webdav-acl open-xchange-webdav-directory
Install on OX v6.22.x
Debian GNU/Linux 11.0
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:
deb https://software.open-xchange.com/products/6.22/updates/backend/DebianBullseye/ /
# if you have a valid maintenance subscription, please uncomment the
# following and add the ldb account data to the url so that the most recent
# packages get installed
# deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/6.22/updates/backend/updates/DebianBullseye/ /
and run
$ apt-get update $ apt-get install open-xchange-dav
Debian GNU/Linux 12.0
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:
deb https://software.open-xchange.com/products/6.22/updates/backend/DebianBookworm/ /
# if you have a valid maintenance subscription, please uncomment the
# following and add the ldb account data to the url so that the most recent
# packages get installed
# deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/6.22/updates/backend/updates/DebianBookworm/ /
and run
$ apt-get update $ apt-get install open-xchange-dav
CalDAV Configuration
The following configuration options are available in the configuration files caldav.properties and caldav.yml:
com.openexchange.caldav.enabled
The property com.openexchange.caldav.enabled governs whether a user has access to the CalDAV interface. This can be configured along the config cascade, in the default setting, everyone that has access to the infostore also has access to caldav. This is achieved in the following way:
In v6.20 and earlier:
/opt/open-xchange/etc/groupware/caldav.properties:
com.openexchange.caldav.enabled=false
/opt/open-xchange/etc/groupware/contextSets/caldav.yml
premium: com.openexchange.caldav.enabled: true withTags: ucInfostore
With v6.22 and up:
/opt/open-xchange/etc/caldav.properties:
com.openexchange.caldav.enabled=false
/opt/open-xchange/etc/contextSets/caldav.yml
premium: com.openexchange.caldav.enabled: true withTags: ucInfostore
This means: In general CalDAV is turned off, but using the contextSets feature of the config cascade it is turned on for everyone that has infostore access.
com.openexchange.caldav.tree
Configures the ID of the folder tree used by the CalDAV interface. Currently, this should be set to the default value of '0'.
com.openexchange.caldav.interval.start
Defines the minimum end time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are "one_month" (default), "one_year" and "six_months".
com.openexchange.caldav.interval.end
Defines the maximum start time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are "one_year" (default) and "two_years".
com.openexchange.caldav.url
Tells users where to find a caldav folder. This can be displayed in frontends. You can use the variables [hostname] and [folderId]. If you chose to deploy caldav as a virtual host (say 'dav.open-xchange.com') use https://dav.open-xchange.com/caldav/[folderId] as the value. If you are using user-agent sniffing use https://[hostname]/caldav/[folderId].
CardDAV Configuration
The following configuration options are available in the configuration files carddav.properties and carddav.yml:
com.openexchange.carddav.enabled
Similarly to CalDAV, the property com.openexchange.carddav.enabled governs whether CardDAV is available for a certain user. This is configured exactly like CalDAV with the config cascade only enabling this for users that have access to the infostore:
/opt/open-xchange/etc/groupware/carddav.properties:
com.openexchange.carddav.enabled=false
/opt/open-xchange/etc/groupware/contextSets/carddav.yml
premium: com.openexchange.carddav.enabled: true withTags: ucInfostore
com.openexchange.carddav.ignoreFolders
A comma-separated list of folder IDs to exclude from the synchronization. Use this to disable syncing of very large folders (e.g. the global address list in large contexts, which always has ID 6). By default, no folders are excluded.
com.openexchange.carddav.tree
Configures the ID of the folder tree used by the CardDAV interface. Currently, this should be set to the default value of '0'.
com.openexchange.carddav.exposedCollections
Controls which collections are exposed via the CardDAV interface. Possible values are '0', '1' and '2'. A value of '1' makes each visible folder available as a resource collection, while '2' only exposes an aggregated collection containing all contact resources from all visible folders. The default value '0' exposes either an aggregated collection or individual collections for each folder, depending on the client's user-agent that is matched against the pattern in 'userAgentForAggregatedCollection'.
com.openexchange.carddav.userAgentForAggregatedCollection
Regular expression to match against the client's user-agent to decide whether the aggregated collection is exposed or not. The default pattern matches all known varieties of the Mac OS Addressbook client, that doesn't support multiple collections. Only used if 'exposedCollections' is set to '0'. The pattern is used case insensitive.
com.openexchange.carddav.reducedAggregatedCollection
Specifies if all visible folders are used to create the aggregated collection, or if a reduced set of folders only containing the global addressbook and the personal contacts folders should be used. This setting only influences the aggregated collection that is used for clients that don't support multiple collections. Possible values are 'true' and 'false.