예제 #1
0
 public function indexAction()
 {
     // Set the root directory
     $webdavPath = Phprojekt::getInstance()->getConfig()->webdavPath;
     if (Phprojekt_Auth::isLoggedIn()) {
         $project = new Project_Models_Project();
         $project = $project->find(1);
         $rootDirectory = new WebDAV_Models_ProjectDirectory($project);
     } else {
         // Some clients seem to send some queries without http auth. We need the dummy to serve those.
         $rootDirectory = new WebDAV_Models_EmptyDir();
     }
     // The server object is responsible for making sense out of the WebDAV protocol
     $server = new Sabre_DAV_Server($rootDirectory);
     $server->setBaseUri($this->view->baseUrl('index.php/WebDAV/index/index/'));
     // The lock manager is reponsible for making sure users don't overwrite each others changes.
     // Change 'data' to a different directory, if you're storing your data somewhere else.
     $lockBackend = new Sabre_DAV_Locks_Backend_File($webdavPath . 'data/locks');
     $lockPlugin = new Sabre_DAV_Locks_Plugin($lockBackend);
     $server->addPlugin($lockPlugin);
     // Authentication
     $authBackend = new WebDAV_Helper_Auth();
     $authPlugin = new Sabre_DAV_Auth_Plugin($authBackend, 'WebDAV');
     $server->addPlugin($authPlugin);
     // All we need to do now, is to fire up the server
     $server->exec();
 }
예제 #2
0
 public function process()
 {
     // initialize authentication
     $auth = new Sabre_HTTP_DigestAuth();
     $auth->setRealm($this->app->config->site->auth_realm);
     $auth->init();
     // authenticate and get correct user
     $email = $auth->getUsername();
     $class_name = SwatDBClassMap::get('PinholeAdminUser');
     $user = new $class_name();
     $user->setDatabase($this->app->db);
     if (!$user->loadFromEmail($email) || !$auth->validateA1($user->digest_ha1)) {
         $auth->requireLogin();
         echo Pinhole::_('Authentication required') . "\n";
         exit;
     }
     // create directory for account and object tree for dav server
     $root = new PinholeDavDirectory($this->app, $user);
     $tree = new Sabre_DAV_ObjectTree($root);
     // create server
     $server = new Sabre_DAV_Server($tree);
     $server->setBaseUri($this->getDavBaseUri());
     // don't save temp files in the database
     $tempFilePlugin = new Sabre_DAV_TemporaryFileFilterPlugin($this->getDataDir('dav/temp'));
     $server->addPlugin($tempFilePlugin);
     // set up lock plugin
     $lockBackend = new Sabre_DAV_Locks_Backend_FS($this->getDataDir('dav/locks'));
     $lockPlugin = new Sabre_DAV_Locks_Plugin($lockBackend);
     $server->addPlugin($lockPlugin);
     // also allow regular web browsing
     $browserPlugin = new Sabre_DAV_Browser_Plugin(false);
     $server->addPlugin($browserPlugin);
     // serve it up!
     $server->exec();
 }
예제 #3
0
 /**
  * Fire up the SabreDAV server with our custom backends.
  *
  * This is mostly copied from the sabredav wiki
  */
 public function indexAction()
 {
     // Backends
     $authBackend = new WebDAV_Helper_Auth();
     $principalBackend = new Phprojekt_CalDAV_PrincipalBackend();
     $calendarBackend = new Calendar2_CalDAV_CalendarBackend();
     // Directory tree
     $tree = array(new Sabre_DAVACL_PrincipalCollection($principalBackend), new Sabre_CalDAV_CalendarRootNode($principalBackend, $calendarBackend));
     $server = new Sabre_DAV_Server($tree);
     $server->setBaseUri('/index.php/Calendar2/caldav/index');
     // Authentication plugin
     $authPlugin = new Sabre_DAV_Auth_Plugin($authBackend, 'CalDAV');
     $server->addPlugin($authPlugin);
     // CalDAV plugin
     $caldavPlugin = new Sabre_CalDAV_Plugin();
     $server->addPlugin($caldavPlugin);
     // ACL plugin
     $aclPlugin = new Sabre_DAVACL_Plugin();
     $server->addPlugin($aclPlugin);
     // Support for html frontend
     $browser = new Sabre_DAV_Browser_Plugin();
     $server->addPlugin($browser);
     // And off we go!
     $server->exec();
 }
예제 #4
0
 function setUp()
 {
     $this->setUpBackends();
     $this->setUpTree();
     $this->server = new Sabre_DAV_Server($this->tree);
     $this->server->debugExceptions = true;
     if ($this->setupCalDAV) {
         $this->caldavPlugin = new Sabre_CalDAV_Plugin();
         $this->server->addPlugin($this->caldavPlugin);
     }
     if ($this->setupCalDAVSharing) {
         $this->caldavSharingPlugin = new Sabre_CalDAV_SharingPlugin();
         $this->server->addPlugin($this->caldavSharingPlugin);
     }
     if ($this->setupCardDAV) {
         $this->carddavPlugin = new Sabre_CardDAV_Plugin();
         $this->server->addPlugin($this->carddavPlugin);
     }
     if ($this->setupACL) {
         $this->aclPlugin = new Sabre_DAVACL_Plugin();
         $this->server->addPlugin($this->aclPlugin);
     }
     if ($this->autoLogin) {
         $authBackend = new Sabre_DAV_Auth_MockBackend();
         $authBackend->defaultUser = $this->autoLogin;
         $this->authPlugin = new Sabre_DAV_Auth_Plugin($authBackend, 'SabreDAV');
         $this->server->addPlugin($this->authPlugin);
     }
 }
예제 #5
0
 function setup()
 {
     if (!SABRE_HASSQLITE) {
         $this->markTestSkipped('No PDO SQLite support');
     }
     $this->caldavBackend = Sabre_CalDAV_TestUtil::getBackend();
     $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
     $principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-read', array('principals/user1'));
     $principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-write', array('principals/user1'));
     $principalBackend->addPrincipal(array('uri' => 'principals/admin/calendar-proxy-read'));
     $principalBackend->addPrincipal(array('uri' => 'principals/admin/calendar-proxy-write'));
     $calendars = new Sabre_CalDAV_CalendarRootNode($principalBackend, $this->caldavBackend);
     $principals = new Sabre_CalDAV_Principal_Collection($principalBackend);
     $root = new Sabre_DAV_SimpleCollection('root');
     $root->addChild($calendars);
     $root->addChild($principals);
     $objectTree = new Sabre_DAV_ObjectTree($root);
     $this->server = new Sabre_DAV_Server($objectTree);
     $this->server->debugExceptions = true;
     $this->server->setBaseUri('/');
     $this->plugin = new Sabre_CalDAV_Plugin();
     $this->server->addPlugin($this->plugin);
     $this->response = new Sabre_HTTP_ResponseMock();
     $this->server->httpResponse = $this->response;
 }
 function setUp()
 {
     $nodes = array(new Sabre_DAV_SimpleCollection('testdir'));
     $this->server = new Sabre_DAV_Server($nodes);
     $this->plugin = new Sabre_DAVACL_Plugin();
     $this->plugin->allowAccessToNodesWithoutACL = false;
     $this->server->addPlugin($this->plugin);
 }
 function setUp()
 {
     $this->backend = new Sabre_CardDAV_Backend_Mock();
     $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
     $tree = array(new Sabre_CardDAV_AddressBookRoot($principalBackend, $this->backend), new Sabre_DAVACL_PrincipalCollection($principalBackend));
     $this->plugin = new Sabre_CardDAV_Plugin();
     $this->plugin->directories = array('directory');
     $this->server = new Sabre_DAV_Server($tree);
     $this->server->addPlugin($this->plugin);
     $this->server->debugExceptions = true;
 }
 function setUp()
 {
     $calendars = array(array('id' => 'calendar1', 'principaluri' => 'principals/admin', 'uri' => 'calendar1', '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VEVENT', 'VTODO', 'VJOURNAL'))), array('id' => 'calendar2', 'principaluri' => 'principals/admin', 'uri' => 'calendar2', '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Sabre_CalDAV_Property_SupportedCalendarComponentSet(array('VTODO', 'VJOURNAL'))));
     $this->calBackend = new Sabre_CalDAV_Backend_Mock($calendars, array());
     $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
     $tree = array(new Sabre_CalDAV_CalendarRootNode($principalBackend, $this->calBackend));
     $this->server = new Sabre_DAV_Server($tree);
     $this->server->debugExceptions = true;
     $plugin = new Sabre_CalDAV_Plugin();
     $this->server->addPlugin($plugin);
     $response = new Sabre_HTTP_ResponseMock();
     $this->server->httpResponse = $response;
 }
예제 #9
0
 function setUp()
 {
     $calendars = array(array('id' => 'calendar1', 'principaluri' => 'principals/admin', 'uri' => 'calendar1'));
     $this->calBackend = new Sabre_CalDAV_Backend_Mock($calendars, array());
     $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
     $tree = array(new Sabre_CalDAV_CalendarRootNode($principalBackend, $this->calBackend));
     $this->server = new Sabre_DAV_Server($tree);
     $this->server->debugExceptions = true;
     $plugin = new Sabre_CalDAV_Plugin();
     $this->server->addPlugin($plugin);
     $response = new Sabre_HTTP_ResponseMock();
     $this->server->httpResponse = $response;
 }
예제 #10
0
 function setUp()
 {
     $this->setUpBackends();
     $this->setUpTree();
     $this->server = new Sabre_DAV_Server($this->tree);
     if ($this->setupCalDAV) {
         $this->caldavPlugin = new Sabre_CalDAV_Plugin();
         $this->server->addPlugin($this->caldavPlugin);
     }
     if ($this->setupCardDAV) {
         $this->carddavPlugin = new Sabre_CardDAV_Plugin();
         $this->server->addPlugin($this->carddavPlugin);
     }
 }
예제 #11
0
 function testGetCurrentUserPrivilegeSet()
 {
     $acl = array(array('principal' => 'principals/admin', 'privilege' => '{DAV:}read'), array('principal' => 'principals/user1', 'privilege' => '{DAV:}read'), array('principal' => 'principals/admin', 'privilege' => '{DAV:}write'));
     $tree = array(new Sabre_DAVACL_MockACLNode('foo', $acl), new Sabre_DAV_SimpleDirectory('principals', array(new Sabre_DAVACL_MockPrincipal('admin', 'principals/admin'))));
     $server = new Sabre_DAV_Server($tree);
     $aclPlugin = new Sabre_DAVACL_Plugin();
     $server->addPlugin($aclPlugin);
     $auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(), 'SabreDAV');
     $server->addPlugin($auth);
     //forcing login
     $auth->beforeMethod('GET', '/');
     $expected = array('{DAV:}read', '{DAV:}read-acl', '{DAV:}read-current-user-privilege-set', '{DAV:}write', '{DAV:}write-acl', '{DAV:}write-properties', '{DAV:}write-content', '{DAV:}bind', '{DAV:}unbind', '{DAV:}unlock');
     $this->assertEquals($expected, $aclPlugin->getCurrentUserPrivilegeSet('foo'));
 }
예제 #12
0
 function testBeforeMethodNoExport()
 {
     $p = new Sabre_CalDAV_ICSExportPlugin();
     $s = new Sabre_DAV_Server();
     $s->addPlugin($p);
     $this->assertNull($p->beforeMethod('GET', 'UUID-123467'));
 }
예제 #13
0
 function testLockEtc()
 {
     mkdir(SABRE_TEMPDIR . '/mstest');
     $tree = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR . '/mstest');
     $server = new Sabre_DAV_Server($tree);
     $server->debugExceptions = true;
     $locksBackend = new Sabre_DAV_Locks_Backend_File(SABRE_TEMPDIR . '/locksdb');
     $locksPlugin = new Sabre_DAV_Locks_Plugin($locksBackend);
     $server->addPlugin($locksPlugin);
     $response1 = new Sabre_HTTP_ResponseMock();
     $server->httpRequest = $this->getLockRequest();
     $server->httpResponse = $response1;
     $server->exec();
     $this->assertEquals('HTTP/1.1 201 Created', $server->httpResponse->status);
     $this->assertTrue(isset($server->httpResponse->headers['Lock-Token']));
     $lockToken = $server->httpResponse->headers['Lock-Token'];
     //sleep(10);
     $response2 = new Sabre_HTTP_ResponseMock();
     $server->httpRequest = $this->getLockRequest2();
     $server->httpResponse = $response2;
     $server->exec();
     $this->assertEquals('HTTP/1.1 201 Created', $server->httpResponse->status);
     $this->assertTrue(isset($server->httpResponse->headers['Lock-Token']));
     //sleep(10);
     $response3 = new Sabre_HTTP_ResponseMock();
     $server->httpRequest = $this->getPutRequest($lockToken);
     $server->httpResponse = $response3;
     $server->exec();
     $this->assertEquals('HTTP/1.1 204 No Content', $server->httpResponse->status);
 }
예제 #14
0
 /**
  * @depends testInit
  */
 function testGetCurrentUserPrincipal()
 {
     $fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleDirectory('bla')));
     $plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(), 'realm');
     $fakeServer->addPlugin($plugin);
     $fakeServer->broadCastEvent('beforeMethod', array('GET', '/'));
     $this->assertEquals('admin', $plugin->getCurrentUser());
 }
예제 #15
0
 /**
  * @depends testNoAdminAccess
  */
 function testAdminAccess()
 {
     $principalBackend = new Sabre_DAVACL_MockPrincipalBackend();
     $tree = array(new Sabre_DAVACL_MockACLNode('adminonly', array()), new Sabre_DAVACL_PrincipalCollection($principalBackend));
     $fakeServer = new Sabre_DAV_Server($tree);
     $plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(), 'realm');
     $fakeServer->addPlugin($plugin);
     $plugin = new Sabre_DAVACL_Plugin();
     $plugin->adminPrincipals = array('principals/admin');
     $fakeServer->addPlugin($plugin);
     $request = new Sabre_HTTP_Request(array('REQUEST_METHOD' => 'OPTIONS', 'HTTP_DEPTH' => 1, 'REQUEST_URI' => '/adminonly'));
     $response = new Sabre_HTTP_ResponseMock();
     $fakeServer->httpRequest = $request;
     $fakeServer->httpResponse = $response;
     $fakeServer->exec();
     $this->assertEquals('HTTP/1.1 200 OK', $response->status);
 }
예제 #16
0
 public function gallery()
 {
     $root = new Gallery3_DAV_Album("");
     $tree = new Gallery3_DAV_Tree($root);
     // Skip the lock plugin for now, we don't want Finder to get write support for the time being.
     // $lock_backend = new Sabre_DAV_Locks_Backend_FS(TMPPATH . "sabredav");
     // $lock = new Sabre_DAV_Locks_Plugin($lock_backend);
     $filter = new Sabre_DAV_TemporaryFileFilterPlugin(TMPPATH . "sabredav");
     $server = new Sabre_DAV_Server($tree);
     $server->setBaseUri(url::site("webdav/gallery"));
     // $server->addPlugin($lock);
     $server->addPlugin($filter);
     $server->addPlugin(new Sabre_DAV_Browser_GuessContentType());
     if ($this->_authenticate()) {
         $server->exec();
     }
 }
 public function testSetBadNode()
 {
     $tree = array(new Sabre_DAV_SimpleCollection('foo'));
     $server = new Sabre_DAV_Server($tree);
     $server->addPlugin(new Sabre_DAVACL_Plugin());
     $result = $server->updateProperties('foo', array('{DAV:}group-member-set' => new Sabre_DAV_Property_HrefList(array('bar', 'baz')), '{DAV:}bar' => 'baz'));
     $expected = array('href' => 'foo', '403' => array('{DAV:}group-member-set' => null), '424' => array('{DAV:}bar' => null));
     $this->assertEquals($expected, $result);
 }
예제 #18
0
 function testResourceType()
 {
     $tree = array(new Sabre_CardDAV_DirectoryMock('directory'));
     $server = new Sabre_DAV_Server($tree);
     $plugin = new Sabre_CardDAV_Plugin();
     $server->addPlugin($plugin);
     $props = $server->getProperties('directory', array('{DAV:}resourcetype'));
     $this->assertTrue($props['{DAV:}resourcetype']->is('{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}directory'));
 }
예제 #19
0
 public function handle()
 {
     try {
         Tinebase_Core::initFramework();
     } catch (Zend_Session_Exception $exception) {
         if (Tinebase_Core::isLogLevel(Zend_Log::WARN)) {
             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' invalid session. Delete session cookie.');
         }
         Zend_Session::expireSessionCookie();
         header('WWW-Authenticate: Basic realm="WebDAV for Tine 2.0"');
         header('HTTP/1.1 401 Unauthorized');
         return;
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
         Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' is CalDav, CardDAV or WebDAV request.');
     }
     if (empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['REMOTE_USER']) && empty($_SERVER['REDIRECT_REMOTE_USER'])) {
         header('WWW-Authenticate: Basic realm="WebDav for Tine 2.0"');
         header('HTTP/1.1 401 Unauthorized');
         return;
     }
     // when used with (f)cgi no PHP_AUTH variables are available without defining a special rewrite rule
     if (!isset($_SERVER['PHP_AUTH_USER'])) {
         // $_SERVER["REMOTE_USER"] == "Basic didhfiefdhfu4fjfjdsa34drsdfterrde..."
         $basicAuthData = base64_decode(substr(isset($_SERVER["REMOTE_USER"]) ? $_SERVER["REMOTE_USER"] : $_SERVER['REDIRECT_REMOTE_USER'], 6));
         list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(":", $basicAuthData);
     }
     if (Tinebase_Controller::getInstance()->login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'], $_SERVER['REMOTE_ADDR'], 'TineWebDav') !== true) {
         header('WWW-Authenticate: Basic realm="CardDav for Tine 2.0"');
         header('HTTP/1.1 401 Unauthorized');
         return;
     }
     self::$_server = new Sabre_DAV_Server(new Tinebase_WebDav_Root());
     // compute base uri
     $request = new Zend_Controller_Request_Http();
     self::$_server->setBaseUri($request->getBaseUrl() . '/');
     $tempDir = Tinebase_Core::getTempDir();
     if (!empty($tempDir)) {
         $lockBackend = new Sabre_DAV_Locks_Backend_File($tempDir . '/webdav.lock');
         $lockPlugin = new Sabre_DAV_Locks_Plugin($lockBackend);
         self::$_server->addPlugin($lockPlugin);
     }
     $authPlugin = new Sabre_DAV_Auth_Plugin(new Tinebase_WebDav_Auth(), null);
     self::$_server->addPlugin($authPlugin);
     $aclPlugin = new Sabre_DAVACL_Plugin();
     $aclPlugin->defaultUsernamePath = 'principals/users';
     $aclPlugin->principalCollectionSet = array($aclPlugin->defaultUsernamePath);
     self::$_server->addPlugin($aclPlugin);
     self::$_server->addPlugin(new Sabre_CardDAV_Plugin());
     self::$_server->addPlugin(new Sabre_CalDAV_Plugin());
     self::$_server->addPlugin(new Sabre_CalDAV_Schedule_Plugin());
     self::$_server->addPlugin(new Sabre_DAV_Browser_Plugin());
     self::$_server->exec();
 }
예제 #20
0
파일: Index.class.php 프로젝트: rolwi/koala
 public function frameResponse(\FrameResponseObject $frameResponseObject)
 {
     $root = array(new \SteamDavDirectory($GLOBALS["STEAM"]->get_current_steam_user()->get_workroom()), new \Sabre_DAV_SimpleDirectory("Lesezeichen"), new \Sabre_DAV_SimpleDirectory("Gruppen"), new \Sabre_DAV_SimpleDirectory("Kurse"));
     $server = new \Sabre_DAV_Server($root);
     $server->setBaseUri("/webdav/index/");
     // Support for html frontend
     $browser = new \Sabre_DAV_Browser_Plugin();
     $server->addPlugin($browser);
     // And off we go!
     $server->exec();
     exit;
 }
예제 #21
0
 function testReportPassThrough()
 {
     $fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree(new Sabre_DAV_SimpleDirectory('bla')));
     $plugin = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(), 'realm');
     $fakeServer->addPlugin($plugin);
     $request = new Sabre_HTTP_Request(array('REQUEST_METHOD' => 'REPORT', 'HTTP_CONTENT_TYPE' => 'application/xml', 'REQUEST_URI' => '/'));
     $request->setBody('<?xml version="1.0"?><s:somereport xmlns:s="http://www.rooftopsolutions.nl/NS/example" />');
     $fakeServer->httpRequest = $request;
     $fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
     $fakeServer->exec();
     $this->assertEquals('HTTP/1.1 501 Not Implemented', $fakeServer->httpResponse->status);
 }
 function testCheckPrivileges()
 {
     $acl = array(array('principal' => 'principals/admin', 'privilege' => '{DAV:}read'), array('principal' => 'principals/user1', 'privilege' => '{DAV:}read'), array('principal' => 'principals/admin', 'privilege' => '{DAV:}write'));
     $tree = array(new Sabre_DAVACL_MockACLNode('foo', $acl), new Sabre_DAV_SimpleCollection('principals', array(new Sabre_DAVACL_MockPrincipal('admin', 'principals/admin'))));
     $server = new Sabre_DAV_Server($tree);
     $aclPlugin = new Sabre_DAVACL_Plugin();
     $server->addPlugin($aclPlugin);
     $auth = new Sabre_DAV_Auth_Plugin(new Sabre_DAV_Auth_MockBackend(), 'SabreDAV');
     $server->addPlugin($auth);
     //forcing login
     //$auth->beforeMethod('GET','/');
     $this->assertFalse($aclPlugin->checkPrivileges('foo', array('{DAV:}read'), Sabre_DAVACL_Plugin::R_PARENT, false));
 }
예제 #23
0
 function getServer()
 {
     $tree = array(new Sabre_DAVACL_MockPropertyNode('node1', array('{http://sabredav.org/ns}simple' => 'foo', '{http://sabredav.org/ns}href' => new Sabre_DAV_Property_Href('node2'), '{DAV:}displayname' => 'Node 1')), new Sabre_DAVACL_MockPropertyNode('node2', array('{http://sabredav.org/ns}simple' => 'simple', '{http://sabredav.org/ns}hreflist' => new Sabre_DAV_Property_HrefList(array('node1', 'node3')), '{DAV:}displayname' => 'Node 2')), new Sabre_DAVACL_MockPropertyNode('node3', array('{http://sabredav.org/ns}simple' => 'simple', '{DAV:}displayname' => 'Node 3')));
     $fakeServer = new Sabre_DAV_Server($tree);
     $fakeServer->debugExceptions = true;
     $fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
     $plugin = new Sabre_DAVACL_Plugin();
     $plugin->allowAccessToNodesWithoutACL = true;
     $this->assertTrue($plugin instanceof Sabre_DAVACL_Plugin);
     $fakeServer->addPlugin($plugin);
     $this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
     return $fakeServer;
 }
 function getServer()
 {
     $backend = new Sabre_DAV_Auth_MockBackend();
     $dir = new Sabre_DAV_SimpleDirectory('root');
     $principals = new Sabre_DAV_Auth_PrincipalCollection($backend);
     $dir->addChild($principals);
     $fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree($dir));
     $fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
     $plugin = new Sabre_DAV_Auth_Plugin($backend, 'realm');
     $this->assertTrue($plugin instanceof Sabre_DAV_Auth_Plugin);
     $fakeServer->addPlugin($plugin);
     $this->assertEquals($plugin, $fakeServer->getPlugin('Sabre_DAV_Auth_Plugin'));
     return $fakeServer;
 }
    /**
     * @expectedException Sabre_DAV_Exception
     */
    function testFreeBusyReportNoACLPlugin()
    {
        $this->server = new Sabre_DAV_Server();
        $this->plugin = new Sabre_CalDAV_Plugin();
        $this->server->addPlugin($this->plugin);
        $reportXML = <<<XML
<?xml version="1.0"?>
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
    <c:time-range start="20111001T000000Z" end="20111101T000000Z" />
</c:free-busy-query>
XML;
        $dom = Sabre_DAV_XMLUtil::loadDOMDocument($reportXML);
        $this->plugin->report('{urn:ietf:params:xml:ns:caldav}free-busy-query', $dom);
    }
 function getServer()
 {
     $backend = new Sabre_DAVACL_MockPrincipalBackend();
     $dir = new Sabre_DAV_SimpleDirectory('root');
     $principals = new Sabre_DAVACL_PrincipalCollection($backend);
     $dir->addChild($principals);
     $fakeServer = new Sabre_DAV_Server(new Sabre_DAV_ObjectTree($dir));
     $fakeServer->httpResponse = new Sabre_HTTP_ResponseMock();
     $fakeServer->debugExceptions = true;
     $plugin = new Sabre_DAVACL_MockPlugin($backend, 'realm');
     $plugin->allowAccessToNodesWithoutACL = true;
     $this->assertTrue($plugin instanceof Sabre_DAVACL_Plugin);
     $fakeServer->addPlugin($plugin);
     $this->assertEquals($plugin, $fakeServer->getPlugin('acl'));
     return $fakeServer;
 }
예제 #27
0
 /**
  * Handles a WebDAV request.
  */
 public function requestAction()
 {
     if (!isset($this->_config->resources->sabredav->enabled) || 0 == $this->_config->resources->sabredav->enabled) {
         // Render 404
         $response = $this->getResponse();
         $response->clearAllHeaders();
         $response->clearBody();
         $response->setHttpResponseCode(404);
         $response->sendResponse();
         return;
     }
     $baseUri = $this->view->url('@admin_webdav');
     $publicDir = ROOT_PATH . '/public/uploads';
     $tmpDir = ROOT_PATH . '/data/tmp';
     $auth = new Sabre_HTTP_BasicAuth();
     $auth->setRealm('Fizzy');
     $authResult = $auth->getUserPass();
     if (false === $authResult) {
         $auth->requireLogin();
         die('Authentication required');
     }
     list($username, $password) = $authResult;
     $authAdapter = new Fizzy_Doctrine_AuthAdapter($username, $password);
     $authResult = $authAdapter->authenticate();
     if ($authResult->getCode() !== Zend_Auth_Result::SUCCESS) {
         $auth->requireLogin();
         die('Authentication failed');
     }
     $publicDirObj = new Sabre_DAV_FS_Directory($publicDir);
     $objectTree = new Sabre_DAV_ObjectTree($publicDirObj);
     $server = new Sabre_DAV_Server($objectTree);
     $server->setBaseUri($baseUri);
     if (isset($this->_config->resources->sabredav->browser) && false != $this->_config->resources->sabredav->browser) {
         $browser = new Sabre_DAV_Browser_Plugin();
         $server->addPlugin($browser);
     }
     $server->exec();
 }
예제 #28
0
/**
 * @param App $a
 */
function dav_init(&$a)
{
    /*
     * Recommended settings:
     * ALTER TABLE `photo` ADD INDEX ( `contact-id` )
     */
    dav_include_files();
    if (false) {
        dbg(true);
        error_reporting(E_ALL);
        ini_set("display_errors", 1);
    }
    wdcal_create_std_calendars();
    if ($a->argc >= 2 && $a->argv[1] == "wdcal") {
        if ($a->argc >= 3 && $a->argv[2] == "feed") {
            wdcal_print_feed($a->get_baseurl() . "/dav/wdcal/");
            killme();
        } elseif ($a->argc >= 3 && strlen($a->argv[2]) > 0) {
            wdcal_addRequiredHeadersEdit();
        } else {
            wdcal_addRequiredHeaders();
        }
        return;
    }
    if ($a->argc >= 2 && $a->argv[1] == "settings") {
        return;
    }
    $authBackend = new Sabre_DAV_Auth_Backend_Friendica();
    $principalBackend = new Sabre_DAVACL_PrincipalBackend_Friendica($authBackend);
    $caldavBackend_std = new Sabre_CalDAV_Backend_Std();
    $caldavBackend_community = new Sabre_CalDAV_Backend_Friendica();
    $carddavBackend_std = new Sabre_CardDAV_Backend_Std();
    $carddavBackend_community = new Sabre_CardDAV_Backend_FriendicaCommunity();
    if (isset($_SERVER["PHP_AUTH_USER"])) {
        $tree = new Sabre_DAV_SimpleCollection('root', array(new Sabre_DAV_SimpleCollection('principals', array(new Sabre_CalDAV_Principal_Collection($principalBackend, "principals/users"))), new Sabre_CalDAV_AnimexxCalendarRootNode($principalBackend, array($caldavBackend_std, $caldavBackend_community)), new Sabre_CardDAV_AddressBookRootFriendica($principalBackend, array($carddavBackend_std, $carddavBackend_community))));
    } else {
        $tree = new Sabre_DAV_SimpleCollection('root', array());
    }
    // The object tree needs in turn to be passed to the server class
    $server = new Sabre_DAV_Server($tree);
    $url = parse_url($a->get_baseurl());
    $server->setBaseUri(CALDAV_URL_PREFIX);
    $authPlugin = new Sabre_DAV_Auth_Plugin($authBackend, 'SabreDAV');
    $server->addPlugin($authPlugin);
    $aclPlugin = new Sabre_DAVACL_Plugin_Friendica();
    $aclPlugin->defaultUsernamePath = "principals/users";
    $server->addPlugin($aclPlugin);
    $caldavPlugin = new Sabre_CalDAV_Plugin();
    $server->addPlugin($caldavPlugin);
    $carddavPlugin = new Sabre_CardDAV_Plugin();
    $server->addPlugin($carddavPlugin);
    $browser = new Sabre_DAV_Browser_Plugin();
    $server->addPlugin($browser);
    $server->exec();
    killme();
}
예제 #29
0
 function testGETPassthrough()
 {
     $server = new Sabre_DAV_Server();
     $caldav = new Sabre_CalDAV_Plugin();
     $httpResponse = new Sabre_HTTP_ResponseMock();
     $server->httpResponse = $httpResponse;
     $server->addPlugin($caldav);
     $caldav->beforeMethod('GET', 'foo');
     $this->assertNull($caldav->beforeMethod('GET', 'foozz'));
 }
예제 #30
0
 * 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/>.
 *
 */
// only need filesystem apps
$RUNTIME_APPTYPES = array('filesystem', 'authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
// Backends
$authBackend = new OC_Connector_Sabre_Auth();
$lockBackend = new OC_Connector_Sabre_Locks();
// Create ownCloud Dir
$publicDir = new OC_Connector_Sabre_Directory('');
// Fire up server
$server = new Sabre_DAV_Server($publicDir);
$server->setBaseUri($baseuri);
// Load plugins
$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new Sabre_DAV_Locks_Plugin($lockBackend));
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false));
// Show something in the Browser, but no upload
// And off we go!
$server->exec();