]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add /dav.php, a single location bundling all *DAV-operations.
authorJakob Sack <mail@jakobsack.de>
Fri, 2 Mar 2012 19:25:20 +0000 (20:25 +0100)
committerJakob Sack <mail@jakobsack.de>
Fri, 2 Mar 2012 19:25:20 +0000 (20:25 +0100)
apps/calendar/appinfo/app.php
apps/calendar/lib/hooks.php
apps/contacts/appinfo/app.php
apps/contacts/lib/hooks.php
dav.php [new file with mode: 0644]

index 174bc009e459dff0dda6b3718eb93718a9bbf1b9..0968737219a31adbfc7ae8c587c58f76c78166c5 100644 (file)
@@ -8,12 +8,13 @@ if(version_compare(PHP_VERSION, '5.3.0', '>=')){
        OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php';
        OC::$CLASSPATH['OC_Search_Provider_Calendar'] = 'apps/calendar/lib/search.php';
        OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser');
+       OC_Hook::connect('OC_DAV', 'initialize', 'OC_Calendar_Hooks', 'initializeCalDAV');
        OC_Util::addScript('calendar','loader');
-       OC_App::register( array( 
+       OC_App::register( array(
          'order' => 10,
          'id' => 'calendar',
          'name' => 'Calendar' ));
-       OC_App::addNavigationEntry( array( 
+       OC_App::addNavigationEntry( array(
          'id' => 'calendar_index',
          'order' => 10,
          'href' => OC_Helper::linkTo( 'calendar', 'index.php' ),
index 14f96bb5fe128bfc55f0d9f2bc0df0d0988b99ec..54f1680a36e55d4a68427902ca3ce2816cc8b1d5 100644 (file)
@@ -17,11 +17,24 @@ class OC_Calendar_Hooks{
         */
        public static function deleteUser($parameters) {
                $calendars = OC_Calendar_Calendar::allCalendars($parameters['uid']);
-               
+
                foreach($calendars as $calendar) {
                        OC_Calendar_Calendar::deleteCalendar($calendar['id']);
                }
 
                return true;
        }
+
+       /**
+        * @brief Adds the CardDAV resource to the DAV server
+        * @param paramters parameters from initialize-Hook
+        * @return array
+        */
+       public static function initializeCalDAV($parameters){
+               // We need a backend, the root node and the caldav plugin
+               $parameters['backends']['caldav'] = new OC_Connector_Sabre_CalDAV();
+               $parameters['nodes'][] = new Sabre_CalDAV_CalendarRootNode($parameters['backends']['principal'], $parameters['backends']['caldav']);
+               $parameters['plugins'][] = new Sabre_CalDAV_Plugin();
+               return true;
+       }
 }
index 63833dd5cd60205fd9292ae9f3950c276c21cc18..85c383c4c3224a88cf54e7da546272a67e1cd406 100644 (file)
@@ -8,6 +8,7 @@ OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php';
 OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
 OC_HOOK::connect('OC_Calendar', 'getEvents', 'OC_Contacts_Hooks', 'getBirthdayEvents');
 OC_HOOK::connect('OC_Calendar', 'getSources', 'OC_Contacts_Hooks', 'getCalenderSources');
+OC_Hook::connect('OC_DAV', 'initialize', 'OC_Contacts_Hooks', 'initializeCardDAV');
 
 OC_App::register( array(
   'order' => 10,
index b858c4a5a48a91e6bb0444257ccef65e8f6e5d04..2fe4afe716b2e68acd2b97429513565c79bc2496 100644 (file)
@@ -39,6 +39,18 @@ class OC_Contacts_Hooks{
                return true;
        }
 
+       /**
+        * @brief Adds the CardDAV resource to the DAV server
+        * @param paramters parameters from initialize-Hook
+        * @return array
+        */
+       static public function initializeCardDAV($parameters){
+               // We need a backend, the root node and the carddav plugin
+               $parameters['backends']['carddav'] = new OC_Connector_Sabre_CardDAV();
+               $parameters['nodes'][] = new Sabre_CardDAV_AddressBookRoot($parameters['backends']['principal'], $parameters['backends']['carddav']);
+               $parameters['plugins'][] = new Sabre_CardDAV_Plugin();
+               return true;
+
        static public function getCalenderSources($parameters) {
                $base_url = OC_Helper::linkTo('calendar', 'ajax/events.php').'?calendar_id=';
                foreach(OC_Contacts_Addressbook::all(OC_User::getUser()) as $addressbook) {
diff --git a/dav.php b/dav.php
new file mode 100644 (file)
index 0000000..78e2711
--- /dev/null
+++ b/dav.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+require_once('lib/base.php');
+
+// Backends we always need (auth, principal and files)
+$backends = array(
+       'auth' => new OC_Connector_Sabre_Auth(),
+       'principal' => new OC_Connector_Sabre_Principal()
+);
+
+// Root nodes
+$nodes = array(
+       new Sabre_CalDAV_Principal_Collection($backends['principal'])
+);
+
+// Plugins
+$plugins = array(
+       new Sabre_DAV_Auth_Plugin($backends['auth'],'ownCloud'),
+       new Sabre_DAVACL_Plugin(),
+       new Sabre_DAV_Browser_Plugin(false) // Show something in the Browser, but no upload
+);
+
+// Load the plugins etc we need for usual file sharing
+$backends['lock'] = new OC_Connector_Sabre_Locks();
+$plugins[] = new Sabre_DAV_Locks_Plugin($backends['lock']);
+// Add a RESTful user directory
+// /files/$username/
+if( OC_User::isLoggedIn()){
+       $currentuser = OC_User::getUser();
+       $files = new Sabre_DAV_SimpleCollection('files');
+       foreach( OC_User::getUsers() as $username ){
+               if( $username == $currentuser ){
+                       $public = new OC_Connector_Sabre_Directory('.');
+                       $files->addChild( new Sabre_DAV_SimpleCollection( $username, $public->getChildren()));
+               }
+               else{
+                       $files->addChild(new Sabre_DAV_SimpleCollection( $username ));
+               }
+       }
+       $nodes[] = $files;
+}
+
+// Get the other plugins and nodes
+OC_Hook::emit( 'OC_DAV', 'initialize', array( 'backends' => &$backends, 'nodes' => &$nodes, 'plugins' => &$plugins ));
+
+// Fire up server
+$server = new Sabre_DAV_Server($nodes);
+$server->setBaseUri(OC::$WEBROOT.'/dav.php');
+
+// Load additional plugins
+foreach( $plugins as &$plugin ){
+       $server->addPlugin( $plugin );
+} unset( $plugin ); // Always do this after foreach with references!
+
+// And off we go!
+$server->exec();