Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>pull/46315/head
parent
a8e581ca94
commit
247fbb5538
@ -0,0 +1,40 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/* |
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors |
||||
* SPDX-License-Identifier: AGPL-3.0-or-later |
||||
*/ |
||||
namespace OCA\DAV\CalDAV\Validation; |
||||
|
||||
use OCA\DAV\AppInfo\Application; |
||||
use OCP\IAppConfig; |
||||
use Sabre\DAV\Exception\Forbidden; |
||||
use Sabre\DAV\Server; |
||||
use Sabre\DAV\ServerPlugin; |
||||
use Sabre\HTTP\RequestInterface; |
||||
use Sabre\HTTP\ResponseInterface; |
||||
|
||||
class CalDavValidatePlugin extends ServerPlugin { |
||||
|
||||
public function __construct( |
||||
private IAppConfig $config |
||||
) { |
||||
} |
||||
|
||||
public function initialize(Server $server): void { |
||||
$server->on('beforeMethod:PUT', [$this, 'beforePut']); |
||||
} |
||||
|
||||
public function beforePut(RequestInterface $request, ResponseInterface $response): bool { |
||||
// evaluate if card size exceeds defined limit |
||||
$eventSizeLimit = $this->config->getValueInt(Application::APP_ID, 'event_size_limit', 10485760); |
||||
if ((int) $request->getRawServerValue('CONTENT_LENGTH') > $eventSizeLimit) { |
||||
throw new Forbidden("VEvent or VTodo object exceeds $eventSizeLimit bytes"); |
||||
} |
||||
// all tests passed return true |
||||
return true; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,73 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/* |
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors |
||||
* SPDX-License-Identifier: AGPL-3.0-or-later |
||||
*/ |
||||
|
||||
namespace OCA\DAV\Tests\unit\CalDAV\Validation; |
||||
|
||||
use OCA\DAV\CalDAV\Validation\CalDavValidatePlugin; |
||||
use OCP\IAppConfig; |
||||
use PHPUnit\Framework\MockObject\MockObject; |
||||
use Sabre\DAV\Exception\Forbidden; |
||||
use Sabre\HTTP\RequestInterface; |
||||
use Sabre\HTTP\ResponseInterface; |
||||
use Test\TestCase; |
||||
|
||||
class CalDavValidatePluginTest extends TestCase { |
||||
|
||||
private CalDavValidatePlugin $plugin; |
||||
private IAppConfig|MockObject $config; |
||||
private RequestInterface|MockObject $request; |
||||
private ResponseInterface|MockObject $response; |
||||
|
||||
protected function setUp(): void { |
||||
parent::setUp(); |
||||
// construct mock objects |
||||
$this->config = $this->createMock(IAppConfig::class); |
||||
$this->request = $this->createMock(RequestInterface::class); |
||||
$this->response = $this->createMock(ResponseInterface::class); |
||||
$this->plugin = new CalDavValidatePlugin( |
||||
$this->config, |
||||
); |
||||
} |
||||
|
||||
public function testPutSizeLessThenLimit(): void { |
||||
|
||||
// construct method responses |
||||
$this->config |
||||
->method('getValueInt') |
||||
->with('dav', 'event_size_limit', 10485760) |
||||
->willReturn(10485760); |
||||
$this->request |
||||
->method('getRawServerValue') |
||||
->with('CONTENT_LENGTH') |
||||
->willReturn('1024'); |
||||
// test condition |
||||
$this->assertTrue( |
||||
$this->plugin->beforePut($this->request, $this->response) |
||||
); |
||||
|
||||
} |
||||
|
||||
public function testPutSizeMoreThenLimit(): void { |
||||
|
||||
// construct method responses |
||||
$this->config |
||||
->method('getValueInt') |
||||
->with('dav', 'event_size_limit', 10485760) |
||||
->willReturn(10485760); |
||||
$this->request |
||||
->method('getRawServerValue') |
||||
->with('CONTENT_LENGTH') |
||||
->willReturn('16242880'); |
||||
$this->expectException(Forbidden::class); |
||||
// test condition |
||||
$this->plugin->beforePut($this->request, $this->response); |
||||
|
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue