$larevelRequest->path()]); //\Log::debug('[DAV] raw headers', getallheaders()); /** * sabre back-ends tied to laravel's current db connection */ $pdo = DB::connection()->getPdo(); $principalBackend = new PrincipalBackend(); $calBackend = new CalDavPDO($pdo); $cardBackend = new CardDavPDO($pdo); /** * resource tree */ $nodes = [ new \Sabre\DAVACL\PrincipalCollection($principalBackend), new \Sabre\CalDAV\CalendarRoot($principalBackend, $calBackend), new \Sabre\CardDAV\AddressBookRoot($principalBackend, $cardBackend), ]; /** * create the server */ $server = new Server($nodes); $server->setBaseUri('/dav/'); /** * add plugins (order matters!) */ if ($existing = $server->getPlugin('auth')) { $server->removePlugin($existing); } $server->addPlugin( new AuthPlugin(new LaravelSabreAuthBackend(), 'KithkinDAV') ); $server->addPlugin(new \Sabre\DAVACL\Plugin()); //$server->addPlugin(new \Sabre\CalDAV\Plugin()); //$server->addPlugin(new \Sabre\CardDAV\Plugin()); //$server->addPlugin(new \Sabre\DAV\Browser\Plugin()); /** * execute (sabre sends the response and exits) */ // logging \Log::debug('[DAV] listener attached to', ['hash' => spl_object_hash($server)]); $server->on('beforeMethod', function ($req) { \Log::debug('[DAV] beforeMethod', [ 'verb' => $req->getMethod(), 'url' => $req->getUrl(), 'auth' => $req->getHeader('Authorization'), ]); }); $server->on('method:PROPFIND', function ($req) { \Log::debug('[DAV] method:PROPFIND', [ 'url' => $req->getUrl(), 'auth' => $req->getHeader('Authorization'), ]); }); \Log::debug('[DAV] about to exec', ['hash' => spl_object_hash($server)]); ob_start(); $server->exec(); $body = ob_get_clean(); $sabre = $server->httpResponse; return new Response($body, $sabre->getStatus(), $sabre->getHeaders()); } }