<?xml version="1.0" encoding="UTF-8"?>

<!--
    Copyright (c) 2006-2014 Apple Inc. All rights reserved.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
  -->

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>

    <!--
        Public network address information

        This is the server's public network address, which is provided to
        clients in URLs and the like.  It may or may not be the network
        address that the server is listening to directly, though it is by
        default.  For example, it may be the address of a load balancer or
        proxy which forwards connections to the server.
      -->

    <!-- Network host name [empty = system host name] -->
    <key>ServerHostName</key>
    <string></string> <!-- The hostname clients use when connecting -->

    <!-- HTTP port [0 = disable HTTP] -->
    <key>HTTPPort</key>
    <integer>8008</integer>

    <!-- SSL port [0 = disable HTTPS] -->
    <!-- (Must also configure SSLCertificate and SSLPrivateKey below) -->
    <key>SSLPort</key>
    <integer>8443</integer>

    <!-- Redirect non-SSL ports to an SSL port -->
    <key>RedirectHTTPToHTTPS</key>
    <false/>

    <!--
        Network address configuration information

        This configures the actual network address that the server binds to.
      -->

    <!-- List of IP addresses to bind to [empty = all] -->
    <key>BindAddresses</key>
    <array>
    </array>

    <!-- List of port numbers to bind to for HTTP [empty = same as "Port"] -->
    <key>BindHTTPPorts</key>
    <array>
    </array>

    <!-- List of port numbers to bind to for SSL [empty = same as "SSLPort"] -->
    <key>BindSSLPorts</key>
    <array>
    </array>


    <!--
        Data Store
      -->

    <!-- Server root -->
    <key>ServerRoot</key>
    <string>%(ServerRoot)s</string>

    <!-- Data root -->
    <key>DataRoot</key>
    <string>Data</string>

    <!-- Document root -->
    <key>DocumentRoot</key>
    <string>Documents</string>

    <!-- Configuration root -->
    <key>ConfigRoot</key>
    <string>/etc/caldavd</string>

    <!-- Log root -->
    <key>LogRoot</key>
    <string>/var/log/caldavd</string>

    <!-- Run root -->
    <key>RunRoot</key>
    <string>/var/run</string>

    <!-- Child aliases -->
    <key>Aliases</key>
    <array>
    </array>

    <!-- User quota (in bytes) -->
    <key>UserQuota</key>
    <integer>104857600</integer><!-- 100Mb -->

    <!-- Attachment size limit (in bytes) -->
    <key>MaximumAttachmentSize</key>
    <integer>1048576</integer><!-- 1Mb -->

    <!-- Maximum number of unique attendees per entire event -->
    <!-- 0 for no limit -->
    <key>MaxAttendeesPerInstance</key>
    <integer>100</integer>

    <!-- Maximum number of instances allowed for a single RRULE -->
    <!-- 0 for no limit -->
    <key>MaxInstancesForRRULE</key>
    <integer>400</integer>


    <!--
        Directory service

        A directory service provides information about principals (eg.
        users, groups, locations and resources) to the server.

        A variety of directory services are available for use.
      -->

    <!-- XML File Directory Service -->
    <key>DirectoryService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.xmlfile.XMLDirectoryService</string>
      
      <key>params</key>
      <dict>
        <key>xmlFile</key>
        <string>accounts.xml</string>
        <key>recordTypes</key>
        <array>
            <string>users</string>
            <string>groups</string>
        </array>
      </dict>
    </dict>

    <!-- XML File Resource Service -->
    <key>ResourceService</key>
    <dict>
      <key>Enabled</key>
      <true/>
      <key>type</key>
      <string>twistedcaldav.directory.xmlfile.XMLDirectoryService</string>
      
      <key>params</key>
      <dict>
        <key>xmlFile</key>
        <string>resources.xml</string>
        <key>recordTypes</key>
        <array>
            <string>resources</string>
            <string>locations</string>
        </array>
      </dict>
    </dict>
    
    <!-- Open Directory Service (Mac OS X) -->
    <!--
    <key>DirectoryService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.appleopendirectory.OpenDirectoryService</string>
      
      <key>params</key>
      <dict>
        <key>node</key>
        <string>/Search</string>
        <key>cacheTimeout</key>
        <integer>30</integer>
      </dict>
    </dict>
    -->

    <!--
        Augment service

        Augments for the directory service records to add calendar specific attributes.

        A variety of augment services are available for use.
        When using a partitioned server, a service that can be accessed from each host will be needed.
      -->

    <!-- XML File Augment Service -->
    <key>AugmentService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.augment.AugmentXMLDB</string>
      
      <key>params</key>
      <dict>
        <key>xmlFiles</key>
        <array>
	      <string>augments.xml</string>
        </array>
      </dict>
    </dict>
    
    <!-- Sqlite Augment Service -->
    <!--
    <key>AugmentService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.augment.AugmentSqliteDB</string>
      
      <key>params</key>
      <dict>
        <key>dbpath</key>
        <string>/etc/caldavd/augments.sqlite</string>
      </dict>
    </dict>
     -->

    <!-- PostgreSQL Augment Service -->
    <!--
    <key>AugmentService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.augment.AugmentPostgreSQLDB</string>
      
      <key>params</key>
      <dict>
        <key>host</key>
        <string>localhost</string>
        <key>database</key>
        <string>augments</string>
      </dict>
    </dict>
     -->

    <!-- Sqlite ProxyDB Service -->
    <key>ProxyDBService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.calendaruserproxy.ProxySqliteDB</string>
      
      <key>params</key>
      <dict>
        <key>dbpath</key>
        <string>proxies.sqlite</string>
      </dict>
    </dict>

    <!-- PostgreSQL ProxyDB Service -->
    <!--
    <key>ProxyDBService</key>
    <dict>
      <key>type</key>
      <string>twistedcaldav.directory.calendaruserproxy.ProxyPostgreSQLDB</string>
      
      <key>params</key>
      <dict>
        <key>host</key>
        <string>localhost</string>
        <key>database</key>
        <string>proxies</string>
      </dict>
    </dict>
     -->

	<key>ProxyLoadFromFile</key>
    <string>conf/auth/proxies-test.xml</string>

    <!--
        Special principals

        These principals are granted special access and/or perform
        special roles on the server.
      -->

    <!-- Principals with "DAV:all" access (relative URLs) -->
    <key>AdminPrincipals</key>
    <array>
      <string>/principals/__uids__/admin/</string>
    </array>

    <!-- Principals with "DAV:read" access (relative URLs) -->
    <key>ReadPrincipals</key>
    <array>
      <!-- <string>/principals/__uids__/983C8238-FB6B-4D92-9242-89C0A39E5F81/</string> -->
    </array>

    <!-- Create "proxy access" principals -->
    <key>EnableProxyPrincipals</key>
    <true/>


    <!--
        Permissions
      -->

    <!-- Anonymous read access for root resource -->
    <key>EnableAnonymousReadRoot</key>
    <true/>

    <!-- Anonymous read access for resource hierarchy -->
    <key>EnableAnonymousReadNav</key>
    <false/>

    <!-- Enables directory listings for principals -->
    <key>EnablePrincipalListings</key>
    <true/>

    <!-- Render calendar collections as a monolithic iCalendar object -->
    <key>EnableMonolithicCalendars</key>
    <true/>


    <!--
        Authentication
      -->

    <key>Authentication</key>
    <dict>

      <!-- Clear text; best avoided -->
      <key>Basic</key>
      <dict>
        <key>Enabled</key>
        <true/>
      </dict>

      <!-- Digest challenge/response -->
      <key>Digest</key>
      <dict>
        <key>Enabled</key>
        <true/>
        <key>Algorithm</key>
        <string>md5</string>
        <key>Qop</key>
        <string></string>
      </dict>

      <!-- Kerberos/SPNEGO -->
      <key>Kerberos</key>
      <dict>
        <key>Enabled</key>
        <false/>
        <key>ServicePrincipal</key>
        <string></string>
      </dict>

      <!-- Wikiserver authentication (Mac OS X) -->
      <key>Wiki</key>
      <dict>
        <key>Enabled</key>
        <true/>
        <key>Cookie</key>
        <string>sessionID</string>
        <key>URL</key>
        <string>http://127.0.0.1/RPC2</string>
        <key>UserMethod</key>
        <string>userForSession</string>
        <key>WikiMethod</key>
        <string>accessLevelForUserWikiCalendar</string>
      </dict>

    </dict>


    <!--
        Logging
      -->

    <!-- Apache-style access log -->
    <key>AccessLogFile</key>
    <string>logs/access.log</string>
    <key>RotateAccessLog</key>
    <false/>

    <!-- Server activity log -->
    <key>ErrorLogFile</key>
    <string>logs/error.log</string>

    <!-- Log levels -->
    <key>DefaultLogLevel</key>
    <string>warn</string> <!-- debug, info, warn, error -->

    <!-- Log level overrides for specific functionality -->
    <key>LogLevels</key>
    <dict>
      <!--
      <key>twistedcaldav.directory.appleopendirectory.OpenDirectoryService</key>
      <string>debug</string>
      -->
    </dict>

    <!-- Server process ID file -->
    <key>PIDFile</key>
    <string>logs/caldavd.pid</string>


    <!--
        Accounting
      -->

    <!-- Enable accounting for certain operations -->
    <key>AccountingCategories</key>
    <dict>
      <key>iTIP</key>
      <false/>
      <key>HTTP</key>
      <false/>
    </dict>
    <!-- Enable accounting for specific principals -->
    <key>AccountingPrincipals</key>
    <array>
      <!-- <string>/principals/__uids__/454D85C0-09F0-4DC6-A3C6-97DFEB4622CD/</string> -->
    </array>


    <!--
        SSL/TLS
      -->

    <!-- Public key -->
    <key>SSLCertificate</key>
    <string>twistedcaldav/test/data/server.pem</string>

    <!-- SSL authority chain (for intermediate certs) -->
    <key>SSLAuthorityChain</key>
    <string></string>

    <!-- Private key -->
    <key>SSLPrivateKey</key>
    <string>twistedcaldav/test/data/server.pem</string>


    <!--
        Process management
      -->

    <key>UserName</key>
    <string></string>

    <key>GroupName</key>
    <string></string>

    <key>ProcessType</key>
    <string>Combined</string>

    <key>MultiProcess</key>
    <dict>
      <key>ProcessCount</key>
      <integer>2</integer> <!-- 0 = larger of: 4 or (2 * CPU count) -->
    </dict>


    <!--
        Notifications
      -->

    <key>Notifications</key>
    <dict>
      <!-- Time spent coalescing notifications before delivery -->
      <key>CoalesceSeconds</key>
      <integer>3</integer>

      <key>InternalNotificationHost</key>
      <string>localhost</string>

      <key>InternalNotificationPort</key>
      <integer>62309</integer>

      <key>Services</key>
      <dict>
        <key>SimpleLineNotifier</key>
        <dict>
          <!-- Simple line notification service (for testing) -->
          <key>Service</key>
          <string>twistedcaldav.notify.SimpleLineNotifierService</string>
          <key>Enabled</key>
          <false/>
          <key>Port</key>
          <integer>62308</integer>
        </dict>

        <key>XMPPNotifier</key>
        <dict>
          <!-- XMPP notification service -->
          <key>Service</key>
          <string>twistedcaldav.notify.XMPPNotifierService</string>
          <key>Enabled</key>
          <false/>

          <!-- XMPP host and port to contact -->
          <key>Host</key>
          <string>xmpp.host.name</string>
          <key>Port</key>
          <integer>5222</integer>

          <!-- Jabber ID and password for the server -->
          <key>JID</key>
          <string>jid@xmpp.host.name/resource</string>
          <key>Password</key>
          <string>password_goes_here</string>

          <!-- PubSub service address -->
          <key>ServiceAddress</key>
          <string>pubsub.xmpp.host.name</string>

          <key>NodeConfiguration</key>
          <dict>
            <key>pubsub#deliver_payloads</key>
            <string>1</string>
            <key>pubsub#persist_items</key>
            <string>1</string>
          </dict>

          <!-- Sends a presence notification to XMPP server at this interval (prevents disconnect) -->
          <key>KeepAliveSeconds</key>
          <integer>120</integer>

          <!-- Sends a pubsub publish to a particular heartbeat node at this interval -->
          <key>HeartbeatMinutes</key>
          <integer>30</integer>

          <!-- List of glob-like expressions defining which XMPP JIDs can converse with the server (for debugging) -->
          <key>AllowedJIDs</key>
          <array>
            <!--
            <string>*.example.com</string>
             -->
          </array>
        </dict>
      </dict>
    </dict>


    <!--
        Server-to-server protocol
      -->

    <key>Scheduling</key>
    <dict>

      <!-- CalDAV protocol options -->
      <key>CalDAV</key>
      <dict>
        <key>EmailDomain</key>
        <string></string>
        <key>HTTPDomain</key>
        <string></string>
        <key>AddressPatterns</key>
        <array>
        </array>
        <key>OldDraftCompatibility</key>
        <true/>
        <key>ScheduleTagCompatibility</key>
        <true/>
        <key>EnablePrivateComments</key>
        <true/>
      </dict>

      <!-- iSchedule protocol options -->
      <key>iSchedule</key>
      <dict>
        <key>Enabled</key>
        <false/>
        <key>AddressPatterns</key>
        <array>
        </array>
        <key>Servers</key>
        <string>conf/servertoserver-test.xml</string>
      </dict>

      <!-- iMIP protocol options -->
      <key>iMIP</key>
      <dict>
        <key>Enabled</key>
        <false/>
        <key>MailGatewayServer</key>
        <string>localhost</string>
        <key>MailGatewayPort</key>
        <integer>62310</integer>
        <key>Sending</key>
        <dict>
          <key>Server</key>
          <string></string>
          <key>Port</key>
          <integer>587</integer>
          <key>UseSSL</key>
          <true/>
          <key>Username</key>
          <string></string>
          <key>Password</key>
          <string></string>
          <key>Address</key>
          <string></string> <!-- Address email will be sent from -->
        </dict>
        <key>Receiving</key>
        <dict>
          <key>Server</key>
          <string></string>
          <key>Port</key>
          <integer>995</integer>
          <key>Type</key>
          <string></string> <!-- Either "pop" or "imap" -->
          <key>UseSSL</key>
          <true/>
          <key>Username</key>
          <string></string>
          <key>Password</key>
          <string></string>
          <key>PollingSeconds</key>
          <integer>30</integer>
        </dict>
        <key>AddressPatterns</key>
        <array>
          <string>mailto:.*</string>
        </array>
      </dict>

	  <!-- General options for scheduling -->
	  <key>Options</key>
	  <dict>
        <key>AllowGroupAsOrganizer</key>
        <false/>
        <key>AllowLocationAsOrganizer</key>
        <false/>
        <key>AllowResourceAsOrganizer</key>
        <false/>
       </dict>

    </dict>


    <!--
        Free-busy URL protocol
      -->

    <key>FreeBusyURL</key>
    <dict>
      <key>Enabled</key>
      <true/>
      <key>TimePeriod</key>
      <integer>14</integer>
      <key>AnonymousAccess</key>
      <false/>
    </dict>


    <!--
        Non-standard CalDAV extensions
      -->

    <!-- Calendar Drop Box -->
    <key>EnableDropBox</key>
    <true/>

    <!-- Private Events -->
    <key>EnablePrivateEvents</key>
    <true/>

    <!-- Timezone Service -->
    <key>EnableTimezoneService</key>
    <true/>

	<key>UsePackageTimezones</key>
	<true/>


    <!--
        Miscellaneous items
      -->

    <!-- Service ACLs (Mac OS X) -->
    <key>EnableSACLs</key>
    <false/>

    <!-- Web-based administration -->
    <key>EnableWebAdmin</key>
    <true/>

    <!-- Support for Content-Encoding compression options as specified in RFC2616 Section 3.5 -->
    <key>ResponseCompression</key>
    <false/>
    
    <!-- The retry-after value (in seconds) to return with a 503 error. -->
    <key>HTTPRetryAfter</key>
    <integer>180</integer>

    <!-- A unix socket used for communication between the child and master processes.
         An empty value tells the server to use a tcp socket instead. -->
    <key>ControlSocket</key>
    <string>logs/caldavd.sock</string>

    <!-- Support for Memcached -->
    <key>Memcached</key>
    <dict>
      <key>MaxClients</key>
      <integer>5</integer>
      <key>memcached</key>
      <string>memcached</string> <!-- Find in PATH -->
      <key>Options</key>
      <array>
        <!--<string>-vv</string>-->
      </array>
      <key>Pools</key>
        <dict>
        <key>Default</key>
            <dict>
                <key>ClientEnabled</key>
                <false/>
                <key>ServerEnabled</key>
                <false/>
            </dict>
        </dict>
    </dict>

    <!--
        Twisted
      -->

    <key>Twisted</key>
    <dict>
      <key>twistd</key>
      <string>../Twisted/bin/twistd</string>
    </dict>


    <key>Localization</key>
    <dict>
      <key>LocalesDirectory</key>
      <string>locales</string>
      <key>Language</key>
      <string>English</string>
    </dict>


  </dict>
</plist>
