<!-- This provides run time options for the CardDAV server.
  -->
<bedework-options>
  <org>
    <bedework>
      <global>
        <version>3.6</version>

        <dirhandlers>
          <!-- handle the principal hierarchy.
               This could be a read-only interface if we don't intend to allow
               modification of the enterprise directory.

               However, we may need to merge in subsidiary information to handle
               principal properties. That may mean maintaining a shadow
               principal hierarchy in the local server.
               
               Each element name below must be unique.
            -->
          <principal-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/principals</pathPrefix>
            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapPrincipalDirHandler</className>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>
            <baseDn>dc=bedework, dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <!-- We need to get operational attributes from the directory.
               This requires us to explicitly name all attributes on fetch.
               This element allows us to name EXTRA attributes from the default
               list provided by the implementation.
              -->
            <attrIds></attrIds>

            <addressbookObjectClass>organizationalUnit</addressbookObjectClass>
            <addressbookIdAttr>ou</addressbookIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>

            <debug>true</debug>
          </principal-dirHandler>

          <user-principal-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/principals/users</pathPrefix>
            <addressBook>true</addressBook>

            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapPrincipalDirHandler</className>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>
            <baseDn>ou=accounts,dc=bedework,dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <attrIds></attrIds>

            <cardKind>individual</cardKind>

            <addressbookObjectClass>organizationalUnit</addressbookObjectClass>
            <addressbookIdAttr>ou</addressbookIdAttr>

            <addressbookEntryObjectClass>inetOrgPerson</addressbookEntryObjectClass>
            <addressbookEntryIdAttr>uid</addressbookEntryIdAttr>

            <principalIdAttr>uid</principalIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>

            <debug>true</debug>
          </user-principal-dirHandler>

          <group-principal-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/principals/groups</pathPrefix>
            <addressBook>true</addressBook>

            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapPrincipalDirHandler</className>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>

            <baseDn>ou=groups,dc=bedework,dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <attrIds></attrIds>

            <cardKind>group</cardKind>

            <addressbookObjectClass>organizationalUnit</addressbookObjectClass>
            <addressbookIdAttr>ou</addressbookIdAttr>

            <addressbookEntryObjectClass>groupOfUniqueNames</addressbookEntryObjectClass>
            <addressbookEntryIdAttr>cn</addressbookEntryIdAttr>

            <principalIdAttr>cn</principalIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>

            <debug>true</debug>
          </group-principal-dirHandler>

          <!-- handle the user address book hierarchy -->
          <user-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/user</pathPrefix>
            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapAddrBookDirHandler</className>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>

            <baseDn>ou=users,ou=addrbooks,dc=bedework,dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <attrIds></attrIds>

            <folderObjectClass>organizationalUnit</folderObjectClass>
            <folderIdAttr>ou</folderIdAttr>

            <addressbookObjectClass>addressBook</addressbookObjectClass>
            <addressbookIdAttr>ou</addressbookIdAttr>

            <addressbookEntryObjectClass>inetOrgPerson</addressbookEntryObjectClass>
            <addressbookEntryIdAttr>cn</addressbookEntryIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>
            <debug>true</debug>
          </user-dirHandler>

          <public-locations-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/public/locations</pathPrefix>

            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapAddrBookDirHandler</className>

            <!-- manufacture an owner for public entities -->
            <ownerHref>/principals/users/admin</ownerHref>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>
            <baseDn>ou=locations,dc=bedework,dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <attrIds></attrIds>

            <cardKind>location</cardKind>

            <addressbookObjectClass>organizationalUnit</addressbookObjectClass>
            <addressbookIdAttr>ou</addressbookIdAttr>

            <addressbookEntryObjectClass>CalendarResource</addressbookEntryObjectClass>
            <addressbookEntryIdAttr>cn</addressbookEntryIdAttr>

            <principalIdAttr>calcaladruri</principalIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>

            <debug>true</debug>
          </public-locations-dirHandler>

          <!-- handle the public (enterprise) address book hierarchy -->
          <public-dirHandler classname="org.bedework.carddav.util.LdapDirHandlerConfig" >
            <pathPrefix>/public</pathPrefix>
            <className>org.bedework.carddav.server.dirHandlers.ldap.LdapAddrBookDirHandler</className>

            <!-- manufacture an owner for public entities -->
            <ownerHref>/principals/users/admin</ownerHref>

            <initialContextFactory>com.sun.jndi.ldap.LdapCtxFactory</initialContextFactory>
            <providerUrl>ldap://localhost:10389/</providerUrl>

            <baseDn>ou=public,dc=bedework,dc=org</baseDn>

            <queryLimit>1000</queryLimit>

            <attrIds></attrIds>

            <folderObjectClass>organizationalUnit</folderObjectClass>
            <addressbookObjectClass>addressBook</addressbookObjectClass>
            <addressbookEntryObjectClass>inetOrgPerson</addressbookEntryObjectClass>

            <folderIdAttr>ou</folderIdAttr>
            <addressbookIdAttr>ou</addressbookIdAttr>
            <addressbookEntryIdAttr>cn</addressbookEntryIdAttr>

            <authDn>uid=admin,ou=system</authDn>
            <authPw>secret</authPw>
            <debug>true</debug>
          </public-dirHandler>
        </dirhandlers>
      </global>

      <app>
        <usercarddav classname="org.bedework.carddav.util.CardDAVConfig" >
          <sysintfImpl>org.bedework.carddav.bwserver.BwSysIntfImpl</sysintfImpl>
          
          <webaddrServiceURI>/find</webaddrServiceURI>
          <webaddrServicePropertiesList>fn,email,note,org</webaddrServicePropertiesList>
          <webaddrPublicAddrbook>/principals/users</webaddrPublicAddrbook>

          <directoryBrowsingDisallowed>false</directoryBrowsingDisallowed>

          <defaultAddressbook>address-book</defaultAddressbook>

          <addressBookHandlerPrefix>/user</addressBookHandlerPrefix>

          <principalRoot>/principals</principalRoot>
          <userPrincipalRoot>/principals/users</userPrincipalRoot>
          <groupPrincipalRoot>/principals/groups</groupPrincipalRoot>
          <resourcePrincipalRoot>/principals/resources</resourcePrincipalRoot>
          <venuePrincipalRoot>/principals/locations</venuePrincipalRoot>
          <ticketPrincipalRoot>/principals/tickets</ticketPrincipalRoot>
          <hostPrincipalRoot>/principals/hosts</hostPrincipalRoot>
        </usercarddav>

        <pubcarddav classname="org.bedework.carddav.util.CardDAVConfig" >
          <sysintfImpl>org.bedework.carddav.bwserver.BwSysIntfImpl</sysintfImpl>
          
          <webaddrServiceURI>/find</webaddrServiceURI>
          <webaddrServicePropertiesList>fn,note,org</webaddrServicePropertiesList>
          <webaddrPublicAddrbook>/principals/users</webaddrPublicAddrbook>

          <directoryBrowsingDisallowed>false</directoryBrowsingDisallowed>

          <defaultAddressbook>address-book</defaultAddressbook>

          <addressBookHandlerPrefix>/public</addressBookHandlerPrefix>

          <principalRoot>/principals</principalRoot>
          <userPrincipalRoot>/principals/users</userPrincipalRoot>
          <groupPrincipalRoot>/principals/groups</groupPrincipalRoot>
          <resourcePrincipalRoot>/principals/resources</resourcePrincipalRoot>
          <venuePrincipalRoot>/principals/locations</venuePrincipalRoot>
          <ticketPrincipalRoot>/principals/tickets</ticketPrincipalRoot>
          <hostPrincipalRoot>/principals/hosts</hostPrincipalRoot>
        </pubcarddav>
      </app>
    </bedework>
  </org>
</bedework-options>
