diff options
7 files changed, 35 insertions, 32 deletions
diff --git a/build/integration/features/bootstrap/RemoteContext.php b/build/integration/features/bootstrap/RemoteContext.php index 38f3ab76487..69ebad43208 100644 --- a/build/integration/features/bootstrap/RemoteContext.php +++ b/build/integration/features/bootstrap/RemoteContext.php @@ -138,7 +138,13 @@ class RemoteContext implements Context { * @param string $value */ public function hasCapability($key, $value) { - $capabilities = $this->getApiClient()->getCapabilities(); + try { + $capabilities = $this->getApiClient()->getCapabilities(); + } catch (\Exception $e) { + Assert::assertInstanceOf($value, $e); + $this->lastException = $e; + return; + } $current = $capabilities; $parts = explode('.', $key); foreach ($parts as $part) { diff --git a/build/integration/remoteapi_features/remote.feature b/build/integration/remoteapi_features/remote.feature index 72daf8226cd..62fd95e0130 100644 --- a/build/integration/remoteapi_features/remote.feature +++ b/build/integration/remoteapi_features/remote.feature @@ -34,4 +34,5 @@ Feature: remote Given using remote server "REMOTE" And user "user0" exists And using credentials "user0", "invalid" - Then the capability "theming.name" is "Nextcloud" + Then the capability "theming.name" is "OC\ForbiddenException" + Then the request should throw a "OC\ForbiddenException" diff --git a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php index 712becb3be5..f5960880546 100644 --- a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php @@ -27,7 +27,7 @@ namespace OC\AppFramework\Middleware\Security; use OC\AppFramework\Utility\ControllerMethodReflector; use OC\Security\RateLimiting\Exception\RateLimitExceededException; use OC\Security\RateLimiting\Limiter; -use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Middleware; use OCP\IRequest; @@ -110,21 +110,14 @@ class RateLimitingMiddleware extends Middleware { public function afterException($controller, $methodName, \Exception $exception) { if ($exception instanceof RateLimitExceededException) { if (stripos($this->request->getHeader('Accept'),'html') === false) { - $response = new JSONResponse( - [ - 'message' => $exception->getMessage(), - ], - $exception->getCode() - ); + $response = new DataResponse([], $exception->getCode()); } else { $response = new TemplateResponse( - 'core', - '403', - [ - 'file' => $exception->getMessage() - ], - 'guest' - ); + 'core', + '429', + [], + TemplateResponse::RENDER_AS_GUEST + ); $response->setStatus($exception->getCode()); } diff --git a/lib/private/Template/Base.php b/lib/private/Template/Base.php index c95958ceea1..65d0ad469ff 100644 --- a/lib/private/Template/Base.php +++ b/lib/private/Template/Base.php @@ -168,7 +168,9 @@ class Base { if (!is_null($additionalParams)) { $_ = array_merge($additionalParams, $this->vars); foreach ($_ as $var => $value) { - ${$var} = $value; + if (!isset(${$var})) { + ${$var} = $value; + } } } diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index c33d79b83cf..5e6501f9045 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -599,6 +599,8 @@ class Session implements IUserSession, Emitter { return true; } + // If credentials were provided, they need to be valid, otherwise we do boom + throw new LoginException(); } catch (PasswordLoginForbiddenException $ex) { // Nothing to do } diff --git a/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php index 0d27a9a070f..aa713b99156 100644 --- a/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php @@ -26,13 +26,16 @@ use OC\AppFramework\Utility\ControllerMethodReflector; use OC\Security\RateLimiting\Exception\RateLimitExceededException; use OC\Security\RateLimiting\Limiter; use OCP\AppFramework\Controller; -use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\IRequest; use OCP\IUser; use OCP\IUserSession; use Test\TestCase; +/** + * @group DB + */ class RateLimitingMiddlewareTest extends TestCase { /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */ private $request; @@ -250,11 +253,7 @@ class RateLimitingMiddlewareTest extends TestCase { ->willReturn('JSON'); $result = $this->rateLimitingMiddleware->afterException($controller, 'testMethod', new RateLimitExceededException()); - $expected = new JSONResponse( - [ - 'message' => 'Rate limit exceeded', - ], - 429 + $expected = new DataResponse([], 429 ); $this->assertEquals($expected, $result); } @@ -271,13 +270,12 @@ class RateLimitingMiddlewareTest extends TestCase { $result = $this->rateLimitingMiddleware->afterException($controller, 'testMethod', new RateLimitExceededException()); $expected = new TemplateResponse( 'core', - '403', - [ - 'file' => 'Rate limit exceeded', - ], - 'guest' + '429', + [], + TemplateResponse::RENDER_AS_GUEST ); $expected->setStatus(429); $this->assertEquals($expected, $result); + $this->assertIsString($result->render()); } } diff --git a/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php b/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php index 1b813b5f36b..d9c565a3f6d 100644 --- a/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php @@ -32,15 +32,16 @@ use OC\AppFramework\Bootstrap\ServiceRegistration; use OC\Authentication\TwoFactorAuth\ProviderLoader; use OCP\App\IAppManager; use OCP\Authentication\TwoFactorAuth\IProvider; +use OCP\IUser; use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class ProviderLoaderTest extends TestCase { - /** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */ + /** @var IAppManager|MockObject */ private $appManager; - /** @var \OCP\IUser|\PHPUnit\Framework\MockObject\MockObject */ + /** @var IUser|MockObject */ private $user; /** @var RegistrationContext|MockObject */ @@ -53,7 +54,7 @@ class ProviderLoaderTest extends TestCase { parent::setUp(); $this->appManager = $this->createMock(IAppManager::class); - $this->user = $this->createMock(\OCP\IUser::class); + $this->user = $this->createMock(IUser::class); $this->registrationContext = $this->createMock(RegistrationContext::class); $coordinator = $this->createMock(Coordinator::class); @@ -123,7 +124,7 @@ class ProviderLoaderTest extends TestCase { ->with($this->user) ->willReturn([]); - $this->registrationContext->method('getTwoFactorProvider') + $this->registrationContext->method('getTwoFactorProviders') ->willReturn([ new ServiceRegistration('twofactor_test', '\\OCA\\TwoFactorTest\\Provider') ]); |