|
|
|
|
@ -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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|