aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/integration/features/bootstrap/RemoteContext.php8
-rw-r--r--build/integration/remoteapi_features/remote.feature3
-rw-r--r--lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php21
-rw-r--r--lib/private/Template/Base.php4
-rw-r--r--lib/private/User/Session.php2
-rw-r--r--tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php20
-rw-r--r--tests/lib/Authentication/TwoFactorAuth/ProviderLoaderTest.php9
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')
]);