<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Norbert.weinhold</id>
	<title>Open-Xchange - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Norbert.weinhold"/>
	<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Special:Contributions/Norbert.weinhold"/>
	<updated>2026-08-16T17:10:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Dovecot_Mailpush&amp;diff=24209</id>
		<title>Dovecot Mailpush</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Dovecot_Mailpush&amp;diff=24209"/>
		<updated>2018-08-03T15:19:52Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* IMAP METADATA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setup of the Dovecot Push =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Dovecot customers can use the special PUSH plugin without any additional costs. The plugin will be provided via the Dovecot software repository for Dovecot Pro and community edition. &#039;&#039;&#039;Please Note, the installation of the latest Dovecot v2.2.19 release is required&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IMAP METADATA ==&lt;br /&gt;
&lt;br /&gt;
Dovecot Push plug-in requires METADATA support on Dovecot side, but it should only be enabled for OX IMAP sessions and not for any other IMAP clients directly. Enabling can be done with e.g. the remote directive &amp;quot;remote 1.2.3.0/24 { imap_metadata = yes }&amp;quot; and specifying the IP ranges of OX.&lt;br /&gt;
&lt;br /&gt;
Dovecot supports the [[https://tools.ietf.org/html/rfc5464|IMAP METADATA extension (RFC 5464)]], which allows per-mailbox, per-user data to be stored and accessed via IMAP commands.&lt;br /&gt;
&lt;br /&gt;
To activate metadata storage, a [[Dictionary|dictionary]] needs to be configured in the Dovecot configuration using the mail_attribute_dict option.&lt;br /&gt;
&lt;br /&gt;
To activate the IMAP METADATA commands, the imap_metadata and mail_attribute_dict options need to be activated.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 # Store METADATA information within user&#039;s Maildir directory&lt;br /&gt;
 mail_attribute_dict = file:%h/Maildir/dovecot-attributes&lt;br /&gt;
 &lt;br /&gt;
 remote 1.2.3.0/24  {&lt;br /&gt;
   protocol imap {&lt;br /&gt;
     imap_metadata = yes&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The following picture should demonstrate how the overall communication flow between Mail App, Open-Xchange Middleware, and the Dovecot Push plug-in takes place. That communication flow requires the &amp;quot;open-xchange-push-dovecot&amp;quot; and &amp;quot;open-xchange-rest&amp;quot; packages to be installed on the Open-Xchange Middleware nodes and the Dovecot &amp;quot;http-notify&amp;quot; plug-in.&lt;br /&gt;
&lt;br /&gt;
[[Image:ox_mail_push_configuration_4.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Once the Open-Xchange Mail App is installed on the user’s mobile device and it is allowed to show notifications about a new message delivery, the Mail App performs a subscription call to the Open-Xchange Middleware Servers using a fully authenticated session.&lt;br /&gt;
&lt;br /&gt;
When the &amp;quot;open-xchange-push-dovecot&amp;quot; package is installed, the previous subscribe call requests it to spawn a permanent listener. Such a listener simply tells the Dovecot server to notify about new message delivery events for the associated user by executing a special SETMETADATA command. Hence, it does not open or use any resources other than firing a single IMAP command to the Dovecot IMAP Server.&lt;br /&gt;
&lt;br /&gt;
Whenever a &amp;quot;new message delivery&amp;quot; event occurs, the Dovecot Server performs a HTTP callback against a configurable HTTP end-point of the Open-Xchange Middleware providing crucial information about the newly delivered message with a simple JSON body. That incoming HTTP callback is then turned into an appropriate OSGi event with topic &amp;quot;com/openexchange/push&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
That event is in turn handled by the Mobile Push event handler, which uses the event’s information to request an APN/GCM push to the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Configuration of Dovecot &amp;quot;http-notify&amp;quot; plug-in ==&lt;br /&gt;
&lt;br /&gt;
To use push notifications, both the &amp;quot;notify&amp;quot; and the &amp;quot;push_notification&amp;quot; plugins need to be activated. For LMTP delivery, this is required:&lt;br /&gt;
&lt;br /&gt;
 protocol lmtp {&lt;br /&gt;
   mail_plugins = $mail_plugins notify push_notification&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
If you also want push notifications to work for LDA-based delivery, you would need additional configuration:&lt;br /&gt;
&lt;br /&gt;
 protocol lda {&lt;br /&gt;
   mail_plugins = $mail_plugins notify push_notification&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The HTTP end-point (URL + authentication information) to use is configured in the Dovecot configuration file. The appropriate configuration options will contain the HTTP URL denoting the end-point to connect to as well as the authentication information for Basic Authentication as configured by properties &amp;quot;com.openexchange.rest.services.basic-auth.login&amp;quot; and &amp;quot;com.openexchange.rest.services.basic-auth.password&amp;quot;.&lt;br /&gt;
The URL to configure in Dovecot configuration follows this pattern.&lt;br /&gt;
 &amp;lt;http|https&amp;gt; + &amp;quot;://&amp;quot; + &amp;lt;login&amp;gt; + &amp;quot;:&amp;quot; + &amp;lt;password&amp;gt; + &amp;quot;@&amp;quot; + &amp;lt;host&amp;gt; + &amp;quot;:&amp;quot; + &amp;lt;port&amp;gt; + &amp;quot;/preliminary/http-notify/v1/notify&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Please note that SSL endpoints are only supported from Dovecot &amp;gt;= 2.3.&lt;br /&gt;
&lt;br /&gt;
E.g.&lt;br /&gt;
 plugin {&lt;br /&gt;
  push_notification_driver = ox:url=http://login:pass@node1.domain.tld:8009/preliminary/http-notify/v1/notify&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Furthermore, it is also possible to specify more than one HTTP end-point to connect to if a new message delivery occurs. Thus the configuration section mentioned above may be extended by additional &amp;quot;push_notification_driver&amp;quot; entries; e.g. push_notification_driver2, push_notification_driver3, etc.&lt;br /&gt;
&lt;br /&gt;
Please note that the path &amp;quot;/preliminary/http-notify/v1/notify&amp;quot; denotes the internal REST API of the Open-Xchange Middleware, which must not be publicly accessible. The administrator can decide whether to add that path to the Apache configuration (see also [[AppSuite:Apache_Configuration]] and [[AppSuite:Grizzly]]) through a Location/ProxyPass directive:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Location /preliminary&amp;gt;&lt;br /&gt;
     Order Deny,Allow&lt;br /&gt;
     Deny from all&lt;br /&gt;
     # Only allow access from servers within the network. Do not expose this&lt;br /&gt;
     # location outside of your network. In case you use a load balancing service in front&lt;br /&gt;
     # of your Apache infrastructure you should make sure that access to /preliminary will&lt;br /&gt;
     # be blocked from the internet / outside clients. Examples:&lt;br /&gt;
     # Allow from 192.168.0.1&lt;br /&gt;
     # Allow from 192.168.1.1 192.168.1.2&lt;br /&gt;
     # Allow from 192.168.0.&lt;br /&gt;
     ProxyPass /preliminary balancer://oxcluster/preliminary&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a scenario where Dovecot Push is also supposed to be used for websockets based browser notifications the OX property &#039;&#039;&#039;com.openexchange.push.allowedClients&#039;&#039;&#039; needs to be extended with &amp;quot;open-xchange-appsuite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In case the &amp;quot;user=&amp;quot; sent by OX in the push_notification_driver url data does not match the IMAP login of a user, Dovecot ignores it. This can be overridden by defining  &amp;quot;user_from_metadata&amp;quot; in the push_notification_driver url, e.g. &lt;br /&gt;
&lt;br /&gt;
  push_notification_driver = ox:url=http://example.com/ user_from_metadata&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Caldav_carddav_Bundles&amp;diff=20194</id>
		<title>Caldav carddav Bundles</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Caldav_carddav_Bundles&amp;diff=20194"/>
		<updated>2015-08-11T15:18:23Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation and Configuration of the CalDAV- and CardDAV-bundles =&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange server can be accessed via it&#039;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.&lt;br /&gt;
&lt;br /&gt;
CalDAV and CardDAV are standard protocols for the exchange of calendar data and address data respectively. The CalDAV interface publishes all the user&#039;s calendar folders via CalDAV so the user can subscribe to them in a client application. Similarly, the CardDAV interface publishes the user&#039;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. &lt;br /&gt;
&lt;br /&gt;
== User Guide and Client Configuration ==&lt;br /&gt;
Please find further information regarding the client configuration at [[CalDAVClients]] and [[CardDAVClients]].&lt;br /&gt;
&lt;br /&gt;
== Webserver Configuration ==&lt;br /&gt;
In order to redirect DAV requests to the appropiate servlets, the webserver&#039;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.&lt;br /&gt;
&lt;br /&gt;
=== Alternative 1: Apache vhost (recommended) ===&lt;br /&gt;
Please edit your site configuration file for OX so that &#039;&#039;&#039; the existing OX configuration as well as the CalDAV/CardDav configuration are placed inside their own virtual hosts sections.&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please add the following entries before you existing VirtualHost entry. This is an &amp;lt;b&amp;gt;example&amp;lt;/b&amp;gt; where MYSERVER.TLD is the domain-name of the ox-server:&lt;br /&gt;
&lt;br /&gt;
 NameVirtualHost *:80&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
        ServerName dav.&amp;lt;MYSERVER.TLD&amp;gt;&lt;br /&gt;
        ErrorLog /tmp/dav.err.log&lt;br /&gt;
        TransferLog /tmp/dav.access.log&lt;br /&gt;
 &lt;br /&gt;
       &amp;lt;Proxy balancer://oxserver-sync&amp;gt;&lt;br /&gt;
         Order deny,allow&lt;br /&gt;
         Allow from all&lt;br /&gt;
 &lt;br /&gt;
         # for grizzly http service&lt;br /&gt;
         BalancerMember http://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1&lt;br /&gt;
         # uncomment this entry if you have a clustered setup and want to use the other nodes too&lt;br /&gt;
         #BalancerMember http://&amp;lt;ip-of-other-host&amp;gt;:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX2&lt;br /&gt;
         SetEnv proxy-initial-not-pooled&lt;br /&gt;
         SetEnv proxy-sendchunked&lt;br /&gt;
       &amp;lt;/Proxy&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
       &amp;lt;Proxy /&amp;gt;&lt;br /&gt;
               Order allow,deny&lt;br /&gt;
               Allow from all&lt;br /&gt;
               ProxyPass balancer://oxserver-sync/servlet/dav/&lt;br /&gt;
       &amp;lt;/Proxy&amp;gt;&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use this method, you have to make sure that dav.&amp;lt;MYSERVER.TLD&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
Please note the &amp;lt;code&amp;gt;NameVirtualHost&amp;lt;/code&amp;gt; directive is needed to be able to specify multiple virtual hosts for the same IP. The differentiation is only done by the given &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt;. 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 &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt; if not already present. If you access the system without one of the given &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt;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.&lt;br /&gt;
&lt;br /&gt;
=== Alternative 2: Apache useragent detection ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   $ vi &amp;lt;your-ox-site-configuration-file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Calendar           [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      DataAccess         [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      DAVKit             [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Lightning          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Adresboek          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      dataaccessd        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Preferences        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Adressbuch         [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      AddressBook        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Address%20Book     [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CalendarStore      [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      accountsd          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CoreDAV&lt;br /&gt;
  RewriteRule (.*)                  http://localhost:8009/servlet/dav$1     [P] # for grizzly http service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The address book app on OSX 10.6 uses a localized user-agent string. If you&#039;re expecting clients with non-english language settings, you need to add the translated user-agent string to these rewrite rules. For example: &amp;quot;Adressbuch&amp;quot; for german OSX clients.&lt;br /&gt;
&lt;br /&gt;
== Autodiscovery ==&lt;br /&gt;
&lt;br /&gt;
By providing some DNS service name registrations for your domain and adding an additional rewrite-rule to the webserver&#039;s configuration, it&#039;s possible for some clients to automatically discover the account settings by just providing the user&#039;s e-mail address and password. The procedure is specified in [http://tools.ietf.org/html/rfc6764 RFC 6764]. &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 _caldavs._tcp.MYSERVER.TLD.      10800 IN SRV      10 1 443 dav.MYSERVER.TLD.&lt;br /&gt;
 _caldav._tcp.MYSERVER.TLD.       10800 IN SRV      10 1  80 dav.MYSERVER.TLD.&lt;br /&gt;
 _carddavs._tcp.MYSERVER.TLD.     10800 IN SRV      10 1 443 dav.MYSERVER.TLD.&lt;br /&gt;
 _carddav._tcp.MYSERVER.TLD.      10800 IN SRV      10 1  80 dav.MYSERVER.TLD.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteCond %{REQUEST_URI} ^/\.well-known/caldav   [OR]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} ^/\.well-known/carddav&lt;br /&gt;
 RewriteRule (.*) / [L,R]&lt;br /&gt;
&lt;br /&gt;
== Which packages do I need? ==&lt;br /&gt;
To get CalDAV and CardDAV up and running you need the following packages:&lt;br /&gt;
&lt;br /&gt;
In v6.20 and earlier:&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
* open-xchange-carddav - The CardDAV interface exposing the users addressbook via carddav&lt;br /&gt;
* open-xchange-caldav - The CalDAV inteface exposing the users calendars via caldav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With v6.22 we have significantly reduced the number of packages necessary to install Open-Xchange Server.&lt;br /&gt;
In v6.22 and later only one package is needed:&lt;br /&gt;
* open-xchange-dav &lt;br /&gt;
&lt;br /&gt;
== Installation on OX App Suite ==&lt;br /&gt;
If there are any differences from for the Open-Xchange App Suite product family from version 6.22 they will be listed here&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-caldav open-xchange-carddav open-xchange-webdav-acl open-xchange-webdav-directory |sopath=updates}}&lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-dav|sopath=6.22/updates/backend|version=v6.22.x}}&lt;br /&gt;
&lt;br /&gt;
== CalDAV Configuration ==&lt;br /&gt;
&lt;br /&gt;
The following configuration options are available in the configuration files caldav.properties and caldav.yml:&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.enabled===&lt;br /&gt;
The property &#039;&#039;&#039;com.openexchange.caldav.enabled&#039;&#039;&#039; 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:&lt;br /&gt;
&lt;br /&gt;
In v6.20 and earlier:&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/caldav.properties:&lt;br /&gt;
  com.openexchange.caldav.enabled=false&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/contextSets/caldav.yml&lt;br /&gt;
  premium:&lt;br /&gt;
      com.openexchange.caldav.enabled: true&lt;br /&gt;
      withTags: ucInfostore&lt;br /&gt;
&lt;br /&gt;
With v6.22 and up:&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/caldav.properties:&lt;br /&gt;
  com.openexchange.caldav.enabled=false&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/contextSets/caldav.yml&lt;br /&gt;
  premium:&lt;br /&gt;
      com.openexchange.caldav.enabled: true&lt;br /&gt;
      withTags: ucInfostore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.tree===&lt;br /&gt;
Configures the ID of the folder tree used by the CalDAV interface. Currently, this should be set to the default value of &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.interval.start===&lt;br /&gt;
Defines the minimum end time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are &amp;quot;one_month&amp;quot; (default), &amp;quot;one_year&amp;quot; and &amp;quot;six_months&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.interval.end===&lt;br /&gt;
Defines the maximum start time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are &amp;quot;one_year&amp;quot; (default) and &amp;quot;two_years&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.url===&lt;br /&gt;
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 &#039;dav.open-xchange.com&#039;) use https://dav.open-xchange.com/caldav/[folderId] as the value. If you are using user-agent sniffing use https://[hostname]/caldav/[folderId].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CardDAV Configuration ==&lt;br /&gt;
&lt;br /&gt;
The following configuration options are available in the configuration files carddav.properties and carddav.yml:&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.enabled===&lt;br /&gt;
Similarly to CalDAV, the property &#039;&#039;&#039;com.openexchange.carddav.enabled&#039;&#039;&#039; 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:&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/carddav.properties:&lt;br /&gt;
  com.openexchange.carddav.enabled=false&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/contextSets/carddav.yml&lt;br /&gt;
  premium:&lt;br /&gt;
      com.openexchange.carddav.enabled: true&lt;br /&gt;
      withTags: ucInfostore&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.ignoreFolders===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.tree===&lt;br /&gt;
Configures the ID of the folder tree used by the CardDAV interface. Currently, this should be set to the default value of &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.exposedCollections===&lt;br /&gt;
Controls which collections are exposed via the CardDAV interface. Possible values are &#039;0&#039;, &#039;1&#039; and &#039;2&#039;. A value of &#039;1&#039; makes each visible folder available as a resource collection, while &#039;2&#039; only exposes an aggregated collection containing  all contact resources from all visible folders. The default value &#039;0&#039; exposes either an aggregated collection or individual collections for each folder, depending on the client&#039;s user-agent that is matched against the pattern in &#039;userAgentForAggregatedCollection&#039;. &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.userAgentForAggregatedCollection===&lt;br /&gt;
Regular expression to match against the client&#039;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&#039;t support multiple collections. Only used if &#039;exposedCollections&#039; is set to &#039;0&#039;. The pattern is used case insensitive. &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.reducedAggregatedCollection===&lt;br /&gt;
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&#039;t support multiple collections. Possible values are &#039;true&#039; and &#039;false.&lt;br /&gt;
&lt;br /&gt;
[[Category: Clients]]&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
[[Category: AppSuite]]&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Capabilities&amp;diff=17284</id>
		<title>AppSuite:Capabilities</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Capabilities&amp;diff=17284"/>
		<updated>2014-03-14T13:59:15Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* Set a capability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Synopsis:&#039;&#039;&#039; How to use capabilities so that your new AppSuite plugin can be enabled or disabled.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What are capabilities? == &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Usecase&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You write a new UI app or plugin (chat module, for example) and in addition, you want to make sure that only a specific set of users or contexts within the system are allowed to use it. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example:&#039;&#039; Your chat app should only be available after a user has bought it in your online shop. To do so, you will need to implement the capabilities logic within your UI app or plugin and restrict it to a user or context marked accordingly (called &amp;quot;premium&amp;quot; in further examples).&lt;br /&gt;
&lt;br /&gt;
== Set a capability ==&lt;br /&gt;
&lt;br /&gt;
First, disable it for everyone as default (or enable it for everyone, depending on what your aim is). &lt;br /&gt;
&lt;br /&gt;
In &amp;lt;tt&amp;gt;/opt/open-xchange/etc/[myproduct].properties&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  com.openexchange.capability.[myproduct]=false # off for everyone&lt;br /&gt;
&lt;br /&gt;
Then restart the OX Application Server and afterwards use the general OX AppSuite commandline tools to enable the capability/capabilities. &lt;br /&gt;
&lt;br /&gt;
The commandline tools used in the following examples are located in: &lt;br /&gt;
&lt;br /&gt;
  /opt/open-xchange/sbin&lt;br /&gt;
&lt;br /&gt;
In this example, only for a specific user:&lt;br /&gt;
&lt;br /&gt;
  changeuser ... --config/com.openexchange.capability.[myproduct]=true&lt;br /&gt;
&lt;br /&gt;
...or for a full context:&lt;br /&gt;
  changecontext -c ... --config/com.openexchange.capability.[myproduct]=true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...or set the capability to a context set:&lt;br /&gt;
&lt;br /&gt;
  changecontext -c ... --taxonomy/types=premium&lt;br /&gt;
&lt;br /&gt;
To get the capability/capabilities working for context sets (like above), you also need to edit the contextSet files in:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tt&amp;gt;/opt/open-xchange/etc/contextSets/premium.yml&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add the corresponding capability/capabilities:&lt;br /&gt;
&lt;br /&gt;
  premium:&lt;br /&gt;
     com.openexchange.capability.[myproduct]: true&lt;br /&gt;
     withTags: premium&lt;br /&gt;
&lt;br /&gt;
Then restart the OX Application Server!&lt;br /&gt;
&lt;br /&gt;
== Query capabilities via the HTTP API ==&lt;br /&gt;
&lt;br /&gt;
Query:&lt;br /&gt;
  GET /appsuite/api/capabilities?action=all&amp;amp;session=991fd40f635b45...&lt;br /&gt;
Response:&lt;br /&gt;
  {&amp;quot;data&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;oauth&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;webmail&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;document_preview&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;printing&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;spreadsheet&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;gab&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;multiple_mail_accounts&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;publication&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;rss_bookmarks&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;linkedin&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;filestore&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;ical&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;rt&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;olox20&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;forum&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;active_sync&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;conflict_handling&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;rss_portal&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;oxupdater&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;infostore&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;contacts&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;collect_email_addresses&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;facebook&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;drive&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;rss&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;pinboard_write_access&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;mobility&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;calendar&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;participants_dialog&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;edit_public_folders&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;text&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;groupware&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;msisdn&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;carddav&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;tasks&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;portal&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;mailfilter&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;read_create_shared_folders&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;vcard&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;pim&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;caldav&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;projects&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;usm&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;webdav&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;dev&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;delegate_tasks&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;freebusy&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;subscription&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;linkedinPlus&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;autologin&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;webdav_xml&amp;quot;,&amp;quot;attributes&amp;quot;:{}},{&amp;quot;id&amp;quot;:&amp;quot;twitter&amp;quot;,&amp;quot;attributes&amp;quot;:{}}]}&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is the name of the capability.&lt;br /&gt;
&lt;br /&gt;
== Query capabilities in the UI ==&lt;br /&gt;
  require([&#039;io.ox/core/capabilities&#039;], function (cap) { if cap.has(&#039;[myproduct]&#039; { ... } );&lt;br /&gt;
&lt;br /&gt;
== Require the capabilities in your UI manifest file ==&lt;br /&gt;
  {&lt;br /&gt;
     namespace: ...&lt;br /&gt;
     requires: &#039;[myproduct]&#039;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Now your plugin will only be loaded if the capability &#039;[myproduct]&#039; is set for a specific user, context, context set.&lt;br /&gt;
&lt;br /&gt;
== Testing the capabilities ==&lt;br /&gt;
&lt;br /&gt;
* For testing purposes use an URL parameter to test capabilities. &lt;br /&gt;
&lt;br /&gt;
Add the following parameter to your AppSuite URL in the browser to activate:&lt;br /&gt;
&lt;br /&gt;
  &amp;amp;cap=[myproduct]&lt;br /&gt;
&lt;br /&gt;
or use &lt;br /&gt;
&lt;br /&gt;
  &amp;amp;disableFeature=[myproduct]&lt;br /&gt;
&lt;br /&gt;
to disable a certain capability. &lt;br /&gt;
&lt;br /&gt;
In general, after adding those URL parameters, you need to reload the UI to temporarly test/enable the set capability.&lt;br /&gt;
&lt;br /&gt;
== Further informations == &lt;br /&gt;
* See the dedicated wiki page of the [[ConfigCascade]] mechanism for more details.&lt;br /&gt;
* If you want to know about existing capabilities and the way they are used for upsell, see [[AppSuite:Upsell#Capabilities_and_Upsell_triggers]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: AppSuite]]&lt;br /&gt;
[[Category: Upsell]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Developer]]&lt;br /&gt;
[[Category: Custom development]]&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14570</id>
		<title>OXaaS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14570"/>
		<updated>2013-05-16T12:52:18Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* Which MX records do i need to add? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OX Cloud Service - Technical FAQ =&lt;br /&gt;
&lt;br /&gt;
== Can I create my users in the default domain and change later to my own domain? ==&lt;br /&gt;
&lt;br /&gt;
Yes, you can create the users and add aliases for another domain later.&lt;br /&gt;
&lt;br /&gt;
== What are MX records for?  ==&lt;br /&gt;
&lt;br /&gt;
MX records are needed for email senders to identify where the mails should go to.&lt;br /&gt;
&lt;br /&gt;
== Do I need to update MX records?  ==&lt;br /&gt;
&lt;br /&gt;
If you want to receive mails for your own domain in the ox cloud service, the domain MX records must point to the service&lt;br /&gt;
&lt;br /&gt;
== How can I add MX records to my domain? ==&lt;br /&gt;
&lt;br /&gt;
You need to ask the DNS administrator who is in control of the domain configuration to perform the change.&lt;br /&gt;
&lt;br /&gt;
== Which MX records do I need to add? ==&lt;br /&gt;
&lt;br /&gt;
Please follow instructions within Parallels. The needed MX records are listed when creating a App Suite resource.&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14567</id>
		<title>OXaaS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14567"/>
		<updated>2013-05-16T11:57:53Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* Can i create my users in the default domain and change later to my own domain? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OX Cloud Service - Technical FAQ =&lt;br /&gt;
&lt;br /&gt;
== Can I create my users in the default domain and change later to my own domain? ==&lt;br /&gt;
&lt;br /&gt;
Yes, you can create the users and add aliases for another domain later.&lt;br /&gt;
&lt;br /&gt;
== What are MX records for?  ==&lt;br /&gt;
&lt;br /&gt;
MX records are needed for email senders to identify where the mails should go to.&lt;br /&gt;
&lt;br /&gt;
== Do I need to update MX records?  ==&lt;br /&gt;
&lt;br /&gt;
If you want to receive mails for your own domain in the ox cloud service, the domain MX records must point to the service&lt;br /&gt;
&lt;br /&gt;
== How can I add MX records to my domain? ==&lt;br /&gt;
&lt;br /&gt;
You need to ask the DNS administrator which hosts the domain configuration to perform the change.&lt;br /&gt;
&lt;br /&gt;
== Which MX records do i need to add? ==&lt;br /&gt;
&lt;br /&gt;
Please follow instructions within the POA frontend. The needed MX records are listed when creating a App Suite resource&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14566</id>
		<title>OXaaS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14566"/>
		<updated>2013-05-16T11:57:34Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* Do i need to update MX records? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OX Cloud Service - Technical FAQ =&lt;br /&gt;
&lt;br /&gt;
== Can i create my users in the default domain and change later to my own domain? ==&lt;br /&gt;
&lt;br /&gt;
Yes, you can create the users and add aliases for another domain later.&lt;br /&gt;
&lt;br /&gt;
== What are MX records for?  ==&lt;br /&gt;
&lt;br /&gt;
MX records are needed for email senders to identify where the mails should go to.&lt;br /&gt;
&lt;br /&gt;
== Do I need to update MX records?  ==&lt;br /&gt;
&lt;br /&gt;
If you want to receive mails for your own domain in the ox cloud service, the domain MX records must point to the service&lt;br /&gt;
&lt;br /&gt;
== How can I add MX records to my domain? ==&lt;br /&gt;
&lt;br /&gt;
You need to ask the DNS administrator which hosts the domain configuration to perform the change.&lt;br /&gt;
&lt;br /&gt;
== Which MX records do i need to add? ==&lt;br /&gt;
&lt;br /&gt;
Please follow instructions within the POA frontend. The needed MX records are listed when creating a App Suite resource&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14565</id>
		<title>OXaaS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=OXaaS_FAQ&amp;diff=14565"/>
		<updated>2013-05-16T11:57:23Z</updated>

		<summary type="html">&lt;p&gt;Norbert.weinhold: /* How can i add MX records to my domain? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OX Cloud Service - Technical FAQ =&lt;br /&gt;
&lt;br /&gt;
== Can i create my users in the default domain and change later to my own domain? ==&lt;br /&gt;
&lt;br /&gt;
Yes, you can create the users and add aliases for another domain later.&lt;br /&gt;
&lt;br /&gt;
== What are MX records for?  ==&lt;br /&gt;
&lt;br /&gt;
MX records are needed for email senders to identify where the mails should go to.&lt;br /&gt;
&lt;br /&gt;
== Do i need to update MX records?  ==&lt;br /&gt;
&lt;br /&gt;
If you want to receive mails for your own domain in the ox cloud service, the domain MX records must point to the service&lt;br /&gt;
&lt;br /&gt;
== How can I add MX records to my domain? ==&lt;br /&gt;
&lt;br /&gt;
You need to ask the DNS administrator which hosts the domain configuration to perform the change.&lt;br /&gt;
&lt;br /&gt;
== Which MX records do i need to add? ==&lt;br /&gt;
&lt;br /&gt;
Please follow instructions within the POA frontend. The needed MX records are listed when creating a App Suite resource&lt;/div&gt;</summary>
		<author><name>Norbert.weinhold</name></author>
	</entry>
</feed>