Difference between revisions of "AppSuite:Caldav carddav Bundles"

(Alternative 2: Apache useragent detection: fix bug 26747)
(Redirected page to Caldav carddav Bundles)
 
Line 1: Line 1:
= Installation and Configuration of the CalDAV- and CardDAV-bundles =
+
#REDIRECT [[Caldav_carddav_Bundles]]
 
+
<!-- as long as the backend for OX6 and AppSuite is the same, we only have one article. Less redundancy this way -->
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 and supported for all customers with a valid Open-Xchange license of Open-Xchange App Suite starting with Version 7.0.
 
 
 
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 [[AppSuite:CalDAVClients]] and [[AppSuite: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.
 
 
 
=== Alternative 1: Apache vhost (recommended) ===
 
Please edit your file /etc/apache2/ox6.conf so that ''' the existing OX configuration as well as the CalDAV/CardDav configuration are placed inside their own virtual hosts sections.'''.
 
 
 
This is an <b>example</b> where MYSERVER.TLD is the domain-name of the ox-server:
 
 
 
  $ vi /etc/apache2/ox6.conf
 
 
 
NameVirtualHost *:80
 
<VirtualHost *:80>
 
        ServerName dav.MYSERVER.TLD
 
        ErrorLog /tmp/dav.err.log
 
        TransferLog /tmp/dav.access.log
 
        <Proxy />
 
                Order allow,deny
 
                Allow from all
 
        </Proxy>
 
        ProxyPass / ajp://localhost:8009/servlet/dav/ smax=0 ttl=60 retry=5 # for ajp http service
 
        #ProxyPass / http://localhost:8009/servlet/dav/ smax=0 ttl=60 retry=5 # for grizzly http service
 
</VirtualHost>
 
 
<VirtualHost *:80>
 
        ServerName MYSERVER.TLD
 
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www/
 
 
        <Directory /var/www/>
 
                AllowOverride None
 
                Order allow,deny
 
                allow from all
 
                RedirectMatch ^/$ /ox6/
 
                Options +FollowSymLinks +SymLinksIfOwnerMatch
 
        </Directory>
 
        # deflate
 
      AddOutputFilterByType DEFLATE text/html text/plain text/javascript application/javascript text/css text/xml application/xml text/x-js application/x-javascript
 
 
        # pre-compressed files
 
        AddType text/javascript .jsz
 
        AddType text/css .cssz
 
        AddType text/xml .xmlz
 
        AddType text/plain .po
 
 
        AddEncoding gzip .jsz .cssz .xmlz
 
        SetEnvIf Request_URI "\.(jsz|cssz|xmlz)$" no-gzip
 
 
        ExpiresActive On
 
 
        <Location /ox6>
 
                # Expires (via ExpiresByType to override global settings)
 
                ExpiresByType image/gif "access plus 6 months"
 
                ExpiresByType image/png "access plus 6 months"
 
                ExpiresByType image/jpg "access plus 6 months"
 
                ExpiresByType image/jpeg "access plus 6 months"
 
                ExpiresByType text/css "access plus 6 months"
 
                ExpiresByType text/html "access plus 6 months"
 
                ExpiresByType text/xml "access plus 6 months"
 
                ExpiresByType text/javascript "access plus 6 months"
 
                ExpiresByType text/x-js "access plus 6 months"
 
                ExpiresByType application/x-javascript "access plus 6 months"
 
                ExpiresDefault "access plus 6 months"
 
                Header append Cache-Control "private"
 
                Header unset Last-Modified
 
                Header unset Vary
 
                # Strip version
 
                RewriteEngine On
 
                RewriteRule v=\w+/(.+) $1 [L]
 
                # Turn off ETag
 
                Header unset ETag
 
                FileETag None
 
        </Location>
 
 
        <Location /ox6/ox.html>
 
                ExpiresByType text/html "now"
 
                ExpiresDefault "now"
 
                Header unset Last-Modified
 
                Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
 
                # Turn off ETag
 
                Header unset ETag
 
                FileETag None
 
        </Location>
 
 
        <Location /ox6/index.html>
 
                ExpiresByType text/html "now"
 
                ExpiresDefault "now"
 
                Header unset Last-Modified
 
                Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
 
                # Turn off ETag
 
                Header unset ETag
 
                FileETag None
 
        </Location>
 
</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.
 
 
 
=== 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 /etc/apache2/ox6.conf
 
 
 
  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
 
  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.
 
 
 
== Which packages do I need? ==
 
To get CalDAV and CardDAV up and running you need the following packages:
 
 
 
With OX App Suite v7.0 we have significantly reduced the number of packages necessary to install Open-Xchange Server.
 
* open-xchange-dav
 
 
 
 
 
== Installation on OX 6.x ==
 
The download and installation information for Open-Xchange 6 product family (Open-Xchange Server Edition and Hosting Edition) is available at: http://oxpedia.org/wiki/index.php?title=Caldav_carddav_Bundles
 
 
 
{{InstallPlugin|pluginname=open-xchange-caldav open-xchange-carddav open-xchange-webdav-acl open-xchange-webdav-directory | toplevel=products |sopath=appsuite/stable/backend |version=App Suite}}
 
 
 
 
 
== 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:
 
 
 
With v7.0 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.
 
 
 
[[Category: OX7]]
 
[[Category: AppSuite]]
 

Latest revision as of 12:51, 16 July 2013