setBaseUri('/carddav'); $server->debugExceptions = true; // Modify Laravel request to include trailing slash. Laravel removes it by default, Sabre needs it. $server->httpRequest->setUrl(str_replace('/carddav', '/carddav/', $request->getRequestUri())); $server->httpRequest->setBaseUrl('/carddav/'); // Testing needs method verb to be set manually if (App::environment('testing')) { $server->httpRequest->setMethod($request->method()); } // Add required plugins $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, 'SabreDAV')); // CardDAV plugin $server->addPlugin(new \Sabre\CardDAV\Plugin()); // ACL plugnin $aclPlugin = new \Sabre\DAVACL\Plugin(); $aclPlugin->allowUnauthenticatedAccess = false; $server->addPlugin($aclPlugin); // In debug mode add browser plugin if (App::environment('local')) { $server->addPlugin(new \Sabre\DAV\Browser\Plugin()); } // Execute requests and catch output // We do this because laravel always sends a 200 back, but we need to use the StatusCode and of Sabre ob_start(); $server->exec(); $status = $server->httpResponse->getStatus(); $content = ob_get_contents(); $headers = $server->httpResponse->getHeaders(); ob_end_clean(); // Return response through laravel Log::debug(__CLASS__.' init', [ 'status' => $status, 'content' => $content, ]); return response($content, $status) ->withHeaders($headers); } }