[Pkg-owncloud-commits] [php-sabredav] 30/34: Updated our support for the Prefer header to conform the latest spec.
David Prévot
taffit at moszumanska.debian.org
Wed May 27 13:57:12 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to tag 3.0.0-beta1
in repository php-sabredav.
commit 0bd4e046cbbf4b54096605c0b339c1daaa21dae3
Author: Evert Pot <me at evertpot.com>
Date: Mon May 25 19:23:44 2015 -0400
Updated our support for the Prefer header to conform the latest spec.
Fixes #656.
---
lib/DAV/CorePlugin.php | 4 +-
lib/DAV/Server.php | 47 ++++---------
tests/Sabre/DAV/HTTPPreferParsingTest.php | 111 ++++++++++++++----------------
3 files changed, 65 insertions(+), 97 deletions(-)
diff --git a/lib/DAV/CorePlugin.php b/lib/DAV/CorePlugin.php
index 5c37400..6a4c247 100644
--- a/lib/DAV/CorePlugin.php
+++ b/lib/DAV/CorePlugin.php
@@ -350,7 +350,7 @@ class CorePlugin extends ServerPlugin {
$response->setHeader('DAV', implode(', ', $features));
$prefer = $this->server->getHTTPPrefer();
- $minimal = $prefer['return-minimal'];
+ $minimal = $prefer['return'] === 'minimal';
$data = $this->server->generateMultiStatus($newProperties, $minimal);
$response->setBody($data);
@@ -387,7 +387,7 @@ class CorePlugin extends ServerPlugin {
$prefer = $this->server->getHTTPPrefer();
$response->setHeader('Vary', 'Brief,Prefer');
- if ($prefer['return-minimal']) {
+ if ($prefer['return'] === 'minimal') {
// If return-minimal is specified, we only have to check if the
// request was succesful, and don't need to return the
diff --git a/lib/DAV/Server.php b/lib/DAV/Server.php
index ae91a42..80a285e 100644
--- a/lib/DAV/Server.php
+++ b/lib/DAV/Server.php
@@ -645,48 +645,25 @@ class Server extends EventEmitter {
function getHTTPPrefer() {
$result = [
- 'return-asynch' => false,
- 'return-minimal' => false,
- 'return-representation' => false,
- 'wait' => null,
- 'strict' => false,
- 'lenient' => false,
+ // can be true or false
+ 'respond-async' => false,
+ // Could be set to 'representation' or 'minimal'.
+ 'return' => null,
+ // Used as a timeout, is usually a number.
+ 'wait' => null,
+ // can be 'strict' or 'lenient'.
+ 'handling' => false,
];
if ($prefer = $this->httpRequest->getHeader('Prefer')) {
- $parameters = array_map('trim',
- explode(',', $prefer)
+ $result = array_merge(
+ $result,
+ \Sabre\HTTP\parsePrefer($prefer)
);
- foreach ($parameters as $parameter) {
-
- // Right now our regex only supports the tokens actually
- // specified in the draft. We may need to expand this if new
- // tokens get registered.
- if (!preg_match('/^(?P<token>[a-z0-9-]+)(?:=(?P<value>[0-9]+))?$/', $parameter, $matches)) {
- continue;
- }
-
- switch ($matches['token']) {
-
- case 'return-asynch' :
- case 'return-minimal' :
- case 'return-representation' :
- case 'strict' :
- case 'lenient' :
- $result[$matches['token']] = true;
- break;
- case 'wait' :
- $result[$matches['token']] = $matches['value'];
- break;
-
- }
-
- }
-
} elseif ($this->httpRequest->getHeader('Brief') == 't') {
- $result['return-minimal'] = true;
+ $result['return'] = 'minimal';
}
return $result;
diff --git a/tests/Sabre/DAV/HTTPPreferParsingTest.php b/tests/Sabre/DAV/HTTPPreferParsingTest.php
index 4f9e1d4..cd8bee9 100644
--- a/tests/Sabre/DAV/HTTPPreferParsingTest.php
+++ b/tests/Sabre/DAV/HTTPPreferParsingTest.php
@@ -4,105 +4,96 @@ namespace Sabre\DAV;
use Sabre\HTTP;
-class HTTPPReferParsingTest extends \Sabre\DAVServerTest {
+class HTTPPreferParsingTest extends \Sabre\DAVServerTest {
function testParseSimple() {
- $httpRequest = HTTP\Sapi::createFromServerArray(array(
+ $httpRequest = HTTP\Sapi::createFromServerArray([
'HTTP_PREFER' => 'return-asynch',
- ));
+ ]);
$server = new Server();
$server->httpRequest = $httpRequest;
- $this->assertEquals(array(
- 'return-asynch' => true,
- 'return-minimal' => false,
- 'return-representation' => false,
- 'strict' => false,
- 'lenient' => false,
- 'wait' => null,
- ), $server->getHTTPPrefer());
+ $this->assertEquals([
+ 'respond-async' => true,
+ 'return' => null,
+ 'handling' => null,
+ 'wait' => null,
+ ], $server->getHTTPPrefer());
}
function testParseValue() {
- $httpRequest = HTTP\Sapi::createFromServerArray(array(
+ $httpRequest = HTTP\Sapi::createFromServerArray([
'HTTP_PREFER' => 'wait=10',
- ));
+ ]);
$server = new Server();
$server->httpRequest = $httpRequest;
- $this->assertEquals(array(
- 'return-asynch' => false,
- 'return-minimal' => false,
- 'return-representation' => false,
- 'strict' => false,
- 'lenient' => false,
- 'wait' => 10,
- ), $server->getHTTPPrefer());
+ $this->assertEquals([
+ 'respond-async' => false,
+ 'return' => null,
+ 'handling' => null,
+ 'wait' => '10',
+ ], $server->getHTTPPrefer());
}
function testParseMultiple() {
- $httpRequest = HTTP\Sapi::createFromServerArray(array(
+ $httpRequest = HTTP\Sapi::createFromServerArray([
'HTTP_PREFER' => 'return-minimal, strict,lenient',
- ));
+ ]);
$server = new Server();
$server->httpRequest = $httpRequest;
- $this->assertEquals(array(
- 'return-asynch' => false,
- 'return-minimal' => true,
- 'return-representation' => false,
- 'strict' => true,
- 'lenient' => true,
- 'wait' => null,
- ), $server->getHTTPPrefer());
+ $this->assertEquals([
+ 'respond-async' => false,
+ 'return' => 'minimal',
+ 'handling' => 'lenient',
+ 'wait' => null,
+ ], $server->getHTTPPrefer());
}
function testParseWeirdValue() {
- $httpRequest = HTTP\Sapi::createFromServerArray(array(
+ $httpRequest = HTTP\Sapi::createFromServerArray([
'HTTP_PREFER' => 'BOOOH',
- ));
+ ]);
$server = new Server();
$server->httpRequest = $httpRequest;
- $this->assertEquals(array(
- 'strict' => false,
- 'lenient' => false,
- 'wait' => null,
- 'return-asynch' => false,
- 'return-minimal' => false,
- 'return-representation' => false,
- ), $server->getHTTPPrefer());
+ $this->assertEquals([
+ 'respond-async' => false,
+ 'return' => null,
+ 'handling' => null,
+ 'wait' => null,
+ 'boooh' => true,
+ ], $server->getHTTPPrefer());
}
function testBrief() {
- $httpRequest = HTTP\Sapi::createFromServerArray(array(
+ $httpRequest = HTTP\Sapi::createFromServerArray([
'HTTP_BRIEF' => 't',
- ));
+ ]);
$server = new Server();
$server->httpRequest = $httpRequest;
- $this->assertEquals(array(
- 'strict' => false,
- 'lenient' => false,
- 'wait' => null,
- 'return-asynch' => false,
- 'return-minimal' => true,
- 'return-representation' => false,
- ), $server->getHTTPPrefer());
+ $this->assertEquals([
+ 'respond-async' => false,
+ 'return' => 'minimal',
+ 'handling' => null,
+ 'wait' => null,
+ ], $server->getHTTPPrefer());
}
@@ -113,11 +104,11 @@ class HTTPPReferParsingTest extends \Sabre\DAVServerTest {
*/
function testpropfindMinimal() {
- $request = HTTP\Sapi::createFromServerArray(array(
+ $request = HTTP\Sapi::createFromServerArray([
'REQUEST_METHOD' => 'PROPFIND',
'REQUEST_URI' => '/',
- 'HTTP_PREFER' => 'return-minimal',
- ));
+ 'HTTP_PREFER' => 'return-minimal',
+ ]);
$request->setBody(<<<BLA
<?xml version="1.0"?>
<d:propfind xmlns:d="DAV:">
@@ -135,14 +126,14 @@ BLA
$this->assertEquals(207, $response->getStatus(), $body);
- $this->assertTrue(strpos($body, 'resourcetype')!==false, $body);
- $this->assertTrue(strpos($body, 'something')===false, $body);
+ $this->assertTrue(strpos($body, 'resourcetype') !== false, $body);
+ $this->assertTrue(strpos($body, 'something') === false, $body);
}
function testproppatchMinimal() {
- $request = new HTTP\Request('PROPPATCH','/', ['Prefer' => 'return-minimal']);
+ $request = new HTTP\Request('PROPPATCH', '/', ['Prefer' => 'return-minimal']);
$request->setBody(<<<BLA
<?xml version="1.0"?>
<d:propertyupdate xmlns:d="DAV:">
@@ -172,7 +163,7 @@ BLA
function testproppatchMinimalError() {
- $request = new HTTP\Request('PROPPATCH','/', ['Prefer' => 'return-minimal']);
+ $request = new HTTP\Request('PROPPATCH', '/', ['Prefer' => 'return-minimal']);
$request->setBody(<<<BLA
<?xml version="1.0"?>
<d:propertyupdate xmlns:d="DAV:">
@@ -190,8 +181,8 @@ BLA
$body = $response->getBodyAsString();
$this->assertEquals(207, $response->status);
- $this->assertTrue(strpos($body, 'something')!==false);
- $this->assertTrue(strpos($body, '403 Forbidden')!==false, $body);
+ $this->assertTrue(strpos($body, 'something') !== false);
+ $this->assertTrue(strpos($body, '403 Forbidden') !== false, $body);
}
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/php-sabredav.git
More information about the Pkg-owncloud-commits
mailing list