[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