diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-06-12 13:28:03 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-06-12 13:28:03 +0200 |
commit | 3e1576011fbfa4a6e1e8020142cbad4ff38f9115 (patch) | |
tree | 38f7c73a701b9957de66fdf5658e13bb635ff0e4 /lib/private/appframework | |
parent | 5def2a72dddb92bb2289839054ae39c1850c891d (diff) | |
parent | 93169eca1e754bf9a91599f7a7a84e461cfd974f (diff) | |
download | nextcloud-server-3e1576011fbfa4a6e1e8020142cbad4ff38f9115.tar.gz nextcloud-server-3e1576011fbfa4a6e1e8020142cbad4ff38f9115.zip |
Merge pull request #8980 from owncloud/better-accept-header
handle http accept headers more gracefully
Diffstat (limited to 'lib/private/appframework')
-rw-r--r-- | lib/private/appframework/http/dispatcher.php | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/lib/private/appframework/http/dispatcher.php b/lib/private/appframework/http/dispatcher.php index 442e33ee726..fa8d3c47a8b 100644 --- a/lib/private/appframework/http/dispatcher.php +++ b/lib/private/appframework/http/dispatcher.php @@ -52,9 +52,9 @@ class Dispatcher { * @param IRequest $request the incoming request */ public function __construct(Http $protocol, - MiddlewareDispatcher $middlewareDispatcher, - ControllerMethodReflector $reflector, - IRequest $request) { + MiddlewareDispatcher $middlewareDispatcher, + ControllerMethodReflector $reflector, + IRequest $request) { $this->protocol = $protocol; $this->middlewareDispatcher = $middlewareDispatcher; $this->reflector = $reflector; @@ -75,7 +75,7 @@ class Dispatcher { $out = array(null, array(), null); try { - // prefill reflector with everything thats needed for the + // prefill reflector with everything thats needed for the // middlewares $this->reflector->reflect($controller, $methodName); @@ -132,14 +132,14 @@ class Dispatcher { // it to the type annotated in the @param annotation $value = $this->request->getParam($param, $default); $type = $this->reflector->getType($param); - - // if this is submitted using GET or a POST form, 'false' should be + + // if this is submitted using GET or a POST form, 'false' should be // converted to false if(($type === 'bool' || $type === 'boolean') && - $value === 'false' && + $value === 'false' && ( $this->request->method === 'GET' || - strpos($this->request->getHeader('Content-Type'), + strpos($this->request->getHeader('Content-Type'), 'application/x-www-form-urlencoded') !== false ) ) { @@ -148,7 +148,7 @@ class Dispatcher { } elseif(in_array($type, $types)) { settype($value, $type); } - + $arguments[] = $value; } @@ -156,21 +156,14 @@ class Dispatcher { // format response if not of type response if(!($response instanceof Response)) { - + // get format from the url format or request format parameter $format = $this->request->getParam('format'); - + // if none is given try the first Accept header if($format === null) { - $header = $this->request->getHeader('Accept'); - $formats = explode(',', $header); - - if($header !== null && count($formats) > 0) { - $accept = strtolower(trim($formats[0])); - $format = str_replace('application/', '', $accept); - } else { - $format = 'json'; - } + $headers = $this->request->getHeader('Accept'); + $format = $controller->getResponderByHTTPHeader($headers); } $response = $controller->buildResponse($response, $format); |