Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Support subdir in the OCS v2 endpoint
We should check against the ending substring since people could
run their nextcloud in a subfolder.

* Added test
  • Loading branch information
rullzer committed Jul 28, 2016
commit 6990a4e550a872c3ac6f70da9ec5fc0f08916e30
8 changes: 7 additions & 1 deletion lib/private/AppFramework/Middleware/OCSMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ public function afterException($controller, $methodName, \Exception $exception)
if ($code === 0) {
$code = Http::STATUS_INTERNAL_SERVER_ERROR;
}
return new OCSResponse($format, $code, $exception->getMessage());

$response = new OCSResponse($format, $code, $exception->getMessage());

if (substr_compare($this->request->getScriptName(), '/ocs/v2.php', -strlen('/ocs/v2.php')) === 0) {
$response->setStatus($code);
}
return $response;
}

throw $exception;
Expand Down
33 changes: 33 additions & 0 deletions tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ public function dataAfterException() {
* @param int $code
*/
public function testAfterException($controller, $exception, $forward, $message = '', $code = 0) {
$this->request
->method('getScriptName')
->willReturn('/mysubfolder/ocs/v1.php');
$OCSMiddleware = new OCSMiddleware($this->request);

try {
Expand All @@ -105,4 +108,34 @@ public function testAfterException($controller, $exception, $forward, $message =
}
}

/**
* @dataProvider dataAfterException
*
* @param Controller $controller
* @param \Exception $exception
* @param bool $forward
* @param string $message
* @param int $code
*/
public function testAfterExceptionOCSv2SubFolder($controller, $exception, $forward, $message = '', $code = 0) {
$this->request
->method('getScriptName')
->willReturn('/mysubfolder/ocs/v2.php');
$OCSMiddleware = new OCSMiddleware($this->request);

try {
$result = $OCSMiddleware->afterException($controller, 'method', $exception);
$this->assertFalse($forward);

$this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result);

$this->assertSame($message, $this->invokePrivate($result, 'message'));
$this->assertSame($code, $this->invokePrivate($result, 'statuscode'));
$this->assertSame($code, $result->getStatus());
} catch (\Exception $e) {
$this->assertTrue($forward);
$this->assertEquals($exception, $e);
}
}

}