summaryrefslogtreecommitdiffstats
path: root/lib/private/AppFramework
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2017-12-13 14:41:56 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2018-01-02 20:30:37 +0100
commit1bcbeb24bcb82f825d1993217cdb6878375c5077 (patch)
tree83b171423eb459f92fd0ecbf926ee09864b5996a /lib/private/AppFramework
parent7fdd9097bb8cfa4a5d3afe161e1ee2a71da3a8eb (diff)
downloadnextcloud-server-1bcbeb24bcb82f825d1993217cdb6878375c5077.tar.gz
nextcloud-server-1bcbeb24bcb82f825d1993217cdb6878375c5077.zip
disable password confirmation with SSO
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'lib/private/AppFramework')
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php3
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php18
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php
index 0b6291d46de..1d8a54982b4 100644
--- a/lib/private/AppFramework/DependencyInjection/DIContainer.php
+++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php
@@ -234,7 +234,8 @@ class DIContainer extends SimpleContainer implements IAppContainer {
$server->getContentSecurityPolicyManager(),
$server->getCsrfTokenManager(),
$server->getContentSecurityPolicyNonceManager(),
- $server->getAppManager()
+ $server->getAppManager(),
+ $server->getUserSession()
);
});
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index ecd7b1bad5e..0fa76a45d29 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -55,6 +55,7 @@ use OCP\IURLGenerator;
use OCP\IRequest;
use OCP\ILogger;
use OCP\AppFramework\Controller;
+use OCP\IUserSession;
use OCP\Util;
use OC\AppFramework\Middleware\Security\Exceptions\SecurityException;
@@ -91,6 +92,8 @@ class SecurityMiddleware extends Middleware {
private $cspNonceManager;
/** @var IAppManager */
private $appManager;
+ /** @var IUserSession */
+ private $userSession;
/**
* @param IRequest $request
@@ -106,6 +109,7 @@ class SecurityMiddleware extends Middleware {
* @param CSRFTokenManager $csrfTokenManager
* @param ContentSecurityPolicyNonceManager $cspNonceManager
* @param IAppManager $appManager
+ * @param IUserSession $userSession
*/
public function __construct(IRequest $request,
ControllerMethodReflector $reflector,
@@ -119,7 +123,9 @@ class SecurityMiddleware extends Middleware {
ContentSecurityPolicyManager $contentSecurityPolicyManager,
CsrfTokenManager $csrfTokenManager,
ContentSecurityPolicyNonceManager $cspNonceManager,
- IAppManager $appManager) {
+ IAppManager $appManager,
+ IUserSession $userSession
+ ) {
$this->navigationManager = $navigationManager;
$this->request = $request;
$this->reflector = $reflector;
@@ -133,6 +139,7 @@ class SecurityMiddleware extends Middleware {
$this->csrfTokenManager = $csrfTokenManager;
$this->cspNonceManager = $cspNonceManager;
$this->appManager = $appManager;
+ $this->userSession = $userSession;
}
/**
@@ -164,8 +171,15 @@ class SecurityMiddleware extends Middleware {
}
if ($this->reflector->hasAnnotation('PasswordConfirmationRequired')) {
+ $user = $this->userSession->getUser();
+ $backendClassName = '';
+ if ($user !== null) {
+ $backendClassName = $user->getBackendClassName();
+ }
+
$lastConfirm = (int) $this->session->get('last-password-confirm');
- if ($lastConfirm < (time() - (30 * 60 + 15))) { // allow 15 seconds delay
+ // we can't check the password against a SAML backend, so skip password confirmation in this case
+ if ($backendClassName !== 'user_saml' && $lastConfirm < (time() - (30 * 60 + 15))) { // allow 15 seconds delay
throw new NotConfirmedException();
}
}