summaryrefslogtreecommitdiffstats
path: root/dav.php
blob: 78e2711aec84495b36a8837ac0d44a66f43cdb3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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();