Merge pull request #2758 from nextcloud/only-one-dav-backend

Register only one dav backend
This commit is contained in:
Lukas Reschke 2016-12-21 13:03:48 +01:00 committed by GitHub
commit 591b60d11c
6 changed files with 76 additions and 25 deletions

View File

@ -24,9 +24,7 @@
namespace OCA\DAV\Connector\Sabre; namespace OCA\DAV\Connector\Sabre;
use OC\Files\View; use OC\Files\View;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Exception\PreconditionFailed; use Sabre\DAV\Exception\PreconditionFailed;
use Sabre\DAV\Exception\ReportNotSupported;
use Sabre\DAV\Exception\BadRequest; use Sabre\DAV\Exception\BadRequest;
use Sabre\DAV\ServerPlugin; use Sabre\DAV\ServerPlugin;
use Sabre\DAV\Tree; use Sabre\DAV\Tree;
@ -105,7 +103,7 @@ class FilesReportPlugin extends ServerPlugin {
* @param ITagManager $fileTagger manager for private tags * @param ITagManager $fileTagger manager for private tags
* @param IUserSession $userSession * @param IUserSession $userSession
* @param IGroupManager $groupManager * @param IGroupManager $groupManager
* @param Folder $userfolder * @param Folder $userFolder
*/ */
public function __construct(Tree $tree, public function __construct(Tree $tree,
View $view, View $view,
@ -161,11 +159,12 @@ class FilesReportPlugin extends ServerPlugin {
* REPORT operations to look for files * REPORT operations to look for files
* *
* @param string $reportName * @param string $reportName
* @param [] $report * @param $report
* @param string $uri * @param string $uri
* @return bool * @return bool
* @throws NotFound * @throws BadRequest
* @throws ReportNotSupported * @throws PreconditionFailed
* @internal param $ [] $report
*/ */
public function onReport($reportName, $report, $uri) { public function onReport($reportName, $report, $uri) {
$reportTargetNode = $this->server->tree->getNodeForPath($uri); $reportTargetNode = $this->server->tree->getNodeForPath($uri);
@ -232,7 +231,6 @@ class FilesReportPlugin extends ServerPlugin {
private function getFilesBaseUri($uri, $subPath) { private function getFilesBaseUri($uri, $subPath) {
$uri = trim($uri, '/'); $uri = trim($uri, '/');
$subPath = trim($subPath, '/'); $subPath = trim($subPath, '/');
$filesUri = '';
if (empty($subPath)) { if (empty($subPath)) {
$filesUri = $uri; $filesUri = $uri;
} else { } else {

View File

@ -21,6 +21,7 @@
*/ */
namespace OCA\DAV\Files; namespace OCA\DAV\Files;
use Sabre\DAV\INode;
use Sabre\DAVACL\AbstractPrincipalCollection; use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\HTTP\URLUtil; use Sabre\HTTP\URLUtil;
use Sabre\DAV\SimpleCollection; use Sabre\DAV\SimpleCollection;

View File

@ -33,11 +33,14 @@ use OCA\DAV\CardDAV\ImageExportPlugin;
use OCA\DAV\Comments\CommentsPlugin; use OCA\DAV\Comments\CommentsPlugin;
use OCA\DAV\Connector\Sabre\Auth; use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin; use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin;
use OCA\DAV\Connector\Sabre\CommentPropertiesPlugin;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin; use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use OCA\DAV\Connector\Sabre\DavAclPlugin; use OCA\DAV\Connector\Sabre\DavAclPlugin;
use OCA\DAV\Connector\Sabre\DummyGetResponsePlugin; use OCA\DAV\Connector\Sabre\DummyGetResponsePlugin;
use OCA\DAV\Connector\Sabre\FakeLockerPlugin; use OCA\DAV\Connector\Sabre\FakeLockerPlugin;
use OCA\DAV\Connector\Sabre\FilesPlugin; use OCA\DAV\Connector\Sabre\FilesPlugin;
use OCA\DAV\Connector\Sabre\FilesReportPlugin;
use OCA\DAV\Connector\Sabre\SharesPlugin;
use OCA\DAV\DAV\PublicAuth; use OCA\DAV\DAV\PublicAuth;
use OCA\DAV\Connector\Sabre\QuotaPlugin; use OCA\DAV\Connector\Sabre\QuotaPlugin;
use OCA\DAV\Files\BrowserErrorPagePlugin; use OCA\DAV\Files\BrowserErrorPagePlugin;
@ -85,7 +88,6 @@ class Server {
$this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig())); $this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig()));
$authPlugin = new Plugin(); $authPlugin = new Plugin();
$authPlugin->addBackend($authBackend);
$authPlugin->addBackend(new PublicAuth()); $authPlugin->addBackend(new PublicAuth());
$this->server->addPlugin($authPlugin); $this->server->addPlugin($authPlugin);
@ -166,7 +168,7 @@ class Server {
// custom properties plugin must be the last one // custom properties plugin must be the last one
$userSession = \OC::$server->getUserSession(); $userSession = \OC::$server->getUserSession();
$user = $userSession->getUser(); $user = $userSession->getUser();
if (!is_null($user)) { if ($user !== null) {
$view = \OC\Files\Filesystem::getView(); $view = \OC\Files\Filesystem::getView();
$this->server->addPlugin( $this->server->addPlugin(
new FilesPlugin( new FilesPlugin(
@ -188,9 +190,10 @@ class Server {
) )
) )
); );
$this->server->addPlugin( if ($view !== null) {
new QuotaPlugin($view) $this->server->addPlugin(
); new QuotaPlugin($view));
}
$this->server->addPlugin( $this->server->addPlugin(
new TagsPlugin( new TagsPlugin(
$this->server->tree, \OC::$server->getTagManager() $this->server->tree, \OC::$server->getTagManager()
@ -198,28 +201,29 @@ class Server {
); );
// TODO: switch to LazyUserFolder // TODO: switch to LazyUserFolder
$userFolder = \OC::$server->getUserFolder(); $userFolder = \OC::$server->getUserFolder();
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\SharesPlugin( $this->server->addPlugin(new SharesPlugin(
$this->server->tree, $this->server->tree,
$userSession, $userSession,
$userFolder, $userFolder,
\OC::$server->getShareManager() \OC::$server->getShareManager()
)); ));
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin( $this->server->addPlugin(new CommentPropertiesPlugin(
\OC::$server->getCommentsManager(), \OC::$server->getCommentsManager(),
$userSession $userSession
)); ));
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesReportPlugin( if ($view !== null) {
$this->server->tree, $this->server->addPlugin(new FilesReportPlugin(
$view, $this->server->tree,
\OC::$server->getSystemTagManager(), $view,
\OC::$server->getSystemTagObjectMapper(), \OC::$server->getSystemTagManager(),
\OC::$server->getTagManager(), \OC::$server->getSystemTagObjectMapper(),
$userSession, \OC::$server->getTagManager(),
\OC::$server->getGroupManager(), $userSession,
$userFolder \OC::$server->getGroupManager(),
)); $userFolder
));
}
} }
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin());
}); });
} }

View File

@ -24,6 +24,8 @@ namespace OCA\Federation\DAV;
use OCA\Federation\DbHandler; use OCA\Federation\DbHandler;
use Sabre\DAV\Auth\Backend\AbstractBasic; use Sabre\DAV\Auth\Backend\AbstractBasic;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
class FedAuth extends AbstractBasic { class FedAuth extends AbstractBasic {
@ -57,4 +59,10 @@ class FedAuth extends AbstractBasic {
protected function validateUserPass($username, $password) { protected function validateUserPass($username, $password) {
return $this->db->auth($username, $password); return $this->db->auth($username, $password);
} }
/**
* @inheritdoc
*/
function challenge(RequestInterface $request, ResponseInterface $response) {
}
} }

View File

@ -657,4 +657,28 @@ trait WebDav {
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable); $this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
PHPUnit_Framework_Assert::assertNotEquals($this->response['{DAV:}getetag'], $this->storedETAG[$user][$path]); PHPUnit_Framework_Assert::assertNotEquals($this->response['{DAV:}getetag'], $this->storedETAG[$user][$path]);
} }
/**
* @When Connecting to dav endpoint
*/
public function connectingToDavEndpoint() {
try {
$this->response = $this->makeDavRequest(null, 'PROPFIND', '', []);
} catch (\GuzzleHttp\Exception\ClientException $e) {
$this->response = $e->getResponse();
}
}
/**
* @Then there are no duplicate headers
*/
public function thereAreNoDuplicateHeaders() {
$headers = $this->response->getHeaders();
foreach ($headers as $headerName => $headerValues) {
// if a header has multiple values, they must be different
if (count($headerValues) > 1 && count(array_unique($headerValues)) < count($headerValues)) {
throw new \Exception('Duplicate header found: ' . $headerName);
}
}
}
} }

View File

@ -2,6 +2,22 @@ Feature: webdav-related
Background: Background:
Given using api version "1" Given using api version "1"
Scenario: Unauthenticated call old dav path
Given using old dav path
When connecting to dav endpoint
Then the HTTP status code should be "401"
And there are no duplicate headers
And The following headers should be set
|WWW-Authenticate|Basic realm="Nextcloud"|
Scenario: Unauthenticated call new dav path
Given using new dav path
When connecting to dav endpoint
Then the HTTP status code should be "401"
And there are no duplicate headers
And The following headers should be set
|WWW-Authenticate|Basic realm="Nextcloud"|
Scenario: Moving a file Scenario: Moving a file
Given using old dav path Given using old dav path
And As an "admin" And As an "admin"