diff options
-rw-r--r-- | apps/user_ldap/ajax/wizard.php | 3 | ||||
-rw-r--r-- | apps/user_ldap/lib/Access.php | 64 | ||||
-rw-r--r-- | apps/user_ldap/lib/AccessFactory.php | 10 | ||||
-rw-r--r-- | apps/user_ldap/lib/Connection.php | 70 | ||||
-rw-r--r-- | apps/user_ldap/lib/Group_LDAP.php | 6 | ||||
-rw-r--r-- | apps/user_ldap/lib/Jobs/Sync.php | 12 | ||||
-rw-r--r-- | apps/user_ldap/lib/Jobs/UpdateGroups.php | 3 | ||||
-rw-r--r-- | apps/user_ldap/lib/Proxy.php | 5 | ||||
-rw-r--r-- | apps/user_ldap/lib/User_LDAP.php | 42 | ||||
-rw-r--r-- | apps/user_ldap/lib/Wizard.php | 50 | ||||
-rw-r--r-- | apps/user_ldap/tests/AccessTest.php | 13 | ||||
-rw-r--r-- | apps/user_ldap/tests/Integration/AbstractIntegrationTest.php | 2 | ||||
-rw-r--r-- | core/Middleware/TwoFactorMiddleware.php | 6 | ||||
-rw-r--r-- | lib/private/Files/Storage/Local.php | 2 | ||||
-rw-r--r-- | lib/private/Files/Storage/Wrapper/Encryption.php | 8 | ||||
-rw-r--r-- | lib/private/legacy/OC_Image.php | 2 | ||||
-rw-r--r-- | psalm.xml | 1 | ||||
-rw-r--r-- | resources/codesigning/root.crl | 63 | ||||
-rw-r--r-- | tests/lib/Files/Storage/Wrapper/EncryptionTest.php | 4 |
19 files changed, 225 insertions, 141 deletions
diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php index 34c9729f6f3..3e0a23e9d04 100644 --- a/apps/user_ldap/ajax/wizard.php +++ b/apps/user_ldap/ajax/wizard.php @@ -71,7 +71,8 @@ $access = new \OCA\User_LDAP\Access( $userManager, new \OCA\User_LDAP\Helper(\OC::$server->getConfig()), \OC::$server->getConfig(), - \OC::$server->getUserManager() + \OC::$server->getUserManager(), + \OC::$server->get(\Psr\Log\LoggerInterface::class) ); $wizard = new \OCA\User_LDAP\Wizard($configuration, $ldapWrapper, $access); diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 222443cfa8e..5c515d37a73 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -56,8 +56,8 @@ use OCA\User_LDAP\Mapping\AbstractMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OCP\IConfig; -use OCP\ILogger; use OCP\IUserManager; +use Psr\Log\LoggerInterface; use function strlen; use function substr; @@ -96,6 +96,8 @@ class Access extends LDAPUtility { private $config; /** @var IUserManager */ private $ncUserManager; + /** @var LoggerInterface */ + private $logger; /** @var string */ private $lastCookie = ''; @@ -105,7 +107,8 @@ class Access extends LDAPUtility { Manager $userManager, Helper $helper, IConfig $config, - IUserManager $ncUserManager + IUserManager $ncUserManager, + LoggerInterface $logger ) { parent::__construct($ldap); $this->connection = $connection; @@ -114,6 +117,7 @@ class Access extends LDAPUtility { $this->helper = $helper; $this->config = $config; $this->ncUserManager = $ncUserManager; + $this->logger = $logger; } /** @@ -189,15 +193,16 @@ class Access extends LDAPUtility { */ public function readAttribute($dn, $attr, $filter = 'objectClass=*') { if (!$this->checkConnection()) { - \OCP\Util::writeLog('user_ldap', + $this->logger->warning( 'No LDAP Connector assigned, access impossible for readAttribute.', - ILogger::WARN); + ['app' => 'user_ldap'] + ); return false; } $cr = $this->connection->getConnectionResource(); if (!$this->ldap->isResource($cr)) { //LDAP not available - \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', ILogger::DEBUG); + $this->logger->debug('LDAP resource not available.', ['app' => 'user_ldap']); return false; } //Cancel possibly running Paged Results operation, otherwise we run in @@ -252,7 +257,7 @@ class Access extends LDAPUtility { } } while ($isRangeRequest); - \OCP\Util::writeLog('user_ldap', 'Requested attribute ' . $attr . ' not found for ' . $dn, ILogger::DEBUG); + $this->logger->debug('Requested attribute ' . $attr . ' not found for ' . $dn, ['app' => 'user_ldap']); return false; } @@ -283,13 +288,13 @@ class Access extends LDAPUtility { if (!$this->ldap->isResource($rr)) { if ($attribute !== '') { //do not throw this message on userExists check, irritates - \OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN ' . $dn, ILogger::DEBUG); + $this->logger->debug('readAttribute failed for DN ' . $dn, ['app' => 'user_ldap']); } //in case an error occurs , e.g. object does not exist return false; } if ($attribute === '' && ($filter === 'objectclass=*' || $this->invokeLDAPMethod('countEntries', $cr, $rr) === 1)) { - \OCP\Util::writeLog('user_ldap', 'readAttribute: ' . $dn . ' found', ILogger::DEBUG); + $this->logger->debug('readAttribute: ' . $dn . ' found', ['app' => 'user_ldap']); return true; } $er = $this->invokeLDAPMethod('firstEntry', $cr, $rr); @@ -375,7 +380,7 @@ class Access extends LDAPUtility { $cr = $this->connection->getConnectionResource(); if (!$this->ldap->isResource($cr)) { //LDAP not available - \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', ILogger::DEBUG); + $this->logger->debug('LDAP resource not available.', ['app' => 'user_ldap']); return false; } try { @@ -549,14 +554,14 @@ class Access extends LDAPUtility { } } else { //If the UUID can't be detected something is foul. - \OCP\Util::writeLog('user_ldap', 'Cannot determine UUID for ' . $fdn . '. Skipping.', ILogger::INFO); + $this->logger->debug('Cannot determine UUID for ' . $fdn . '. Skipping.', ['app' => 'user_ldap']); return false; } if (is_null($ldapName)) { $ldapName = $this->readAttribute($fdn, $nameAttribute, $filter); - if (!isset($ldapName[0]) && empty($ldapName[0])) { - \OCP\Util::writeLog('user_ldap', 'No or empty name for ' . $fdn . ' with filter ' . $filter . '.', ILogger::DEBUG); + if (!isset($ldapName[0]) || empty($ldapName[0])) { + $this->logger->debug('No or empty name for ' . $fdn . ' with filter ' . $filter . '.', ['app' => 'user_ldap']); return false; } $ldapName = $ldapName[0]; @@ -566,6 +571,10 @@ class Access extends LDAPUtility { $usernameAttribute = (string)$this->connection->ldapExpertUsernameAttr; if ($usernameAttribute !== '') { $username = $this->readAttribute($fdn, $usernameAttribute); + if (!isset($username[0]) || empty($username[0])) { + $this->logger->debug('No or empty username (' . $usernameAttribute . ') for ' . $fdn . '.', ['app' => 'user_ldap']); + return false; + } $username = $username[0]; } else { $username = $uuid; @@ -573,9 +582,8 @@ class Access extends LDAPUtility { try { $intName = $this->sanitizeUsername($username); } catch (\InvalidArgumentException $e) { - \OC::$server->getLogger()->logException($e, [ - 'app' => 'user_ldap', - 'level' => ILogger::WARN, + $this->logger->warning('Error sanitizing username: ' . $e->getMessage(), [ + 'exception' => $e, ]); // we don't attempt to set a username here. We can go for // for an alternative 4 digit random number as we would append @@ -615,7 +623,7 @@ class Access extends LDAPUtility { } //if everything else did not help.. - \OCP\Util::writeLog('user_ldap', 'Could not create unique name for ' . $fdn . '.', ILogger::INFO); + $this->logger->info('Could not create unique name for ' . $fdn . '.', ['app' => 'user_ldap']); return false; } @@ -937,7 +945,7 @@ class Access extends LDAPUtility { if ($user !== null) { $user->processAttributes($userRecord); } else { - \OC::$server->getLogger()->debug( + $this->logger->debug( "The ldap user manager returned null for $ocName", ['app' => 'user_ldap'] ); @@ -1116,13 +1124,13 @@ class Access extends LDAPUtility { * Maybe implement exponential backoff? * This was enough to get solr indexer working which has large delays between LDAP fetches. */ - \OCP\Util::writeLog('user_ldap', "Connection lost on $command, attempting to reestablish.", ILogger::DEBUG); + $this->logger->debug("Connection lost on $command, attempting to reestablish.", ['app' => 'user_ldap']); $this->connection->resetConnectionResource(); $cr = $this->connection->getConnectionResource(); if (!$this->ldap->isResource($cr)) { // Seems like we didn't find any resource. - \OCP\Util::writeLog('user_ldap', "Could not $command, because resource is missing.", ILogger::DEBUG); + $this->logger->debug("Could not $command, because resource is missing.", ['app' => 'user_ldap']); throw $e; } @@ -1156,7 +1164,7 @@ class Access extends LDAPUtility { if (!$this->ldap->isResource($cr)) { // Seems like we didn't find any resource. // Return an empty array just like before. - \OCP\Util::writeLog('user_ldap', 'Could not search, because resource is missing.', ILogger::DEBUG); + $this->logger->debug('Could not search, because resource is missing.', ['app' => 'user_ldap']); return false; } @@ -1172,7 +1180,7 @@ class Access extends LDAPUtility { // cannot use $cr anymore, might have changed in the previous call! $error = $this->ldap->errno($this->connection->getConnectionResource()); if (!$this->ldap->isResource($sr) || $error !== 0) { - \OCP\Util::writeLog('user_ldap', 'Attempt for Paging? ' . print_r($pagedSearchOK, true), ILogger::ERROR); + $this->logger->error('Attempt for Paging? ' . print_r($pagedSearchOK, true), ['app' => 'user_ldap']); return false; } @@ -1217,7 +1225,7 @@ class Access extends LDAPUtility { } } else { if (!is_null($limit) && (int)$this->connection->ldapPagingSize !== 0) { - \OC::$server->getLogger()->debug( + $this->logger->debug( 'Paged search was not available', ['app' => 'user_ldap'] ); @@ -1253,7 +1261,7 @@ class Access extends LDAPUtility { ?int $offset = null, bool $skipHandling = false ) { - \OC::$server->getLogger()->debug('Count filter: {filter}', [ + $this->logger->debug('Count filter: {filter}', [ 'app' => 'user_ldap', 'filter' => $filter ]); @@ -1763,7 +1771,7 @@ class Access extends LDAPUtility { $value = $this->readAttribute($dn, $attribute); if (is_array($value) && isset($value[0]) && !empty($value[0])) { - \OC::$server->getLogger()->debug( + $this->logger->debug( 'Setting {attribute} as {subject}', [ 'app' => 'user_ldap', @@ -1776,7 +1784,7 @@ class Access extends LDAPUtility { return true; } } - \OC::$server->getLogger()->debug('Could not autodetect the UUID attribute', ['app' => 'user_ldap']); + $this->logger->debug('Could not autodetect the UUID attribute', ['app' => 'user_ldap']); return false; } @@ -1871,7 +1879,7 @@ class Access extends LDAPUtility { * an exception here would kill the experience for a valid, acting * user. Instead we write a log message. */ - \OC::$server->getLogger()->info( + $this->logger->info( 'Passed string does not resemble a valid GUID. Known UUID ' . '({uuid}) probably does not match UUID configuration.', ['app' => 'user_ldap', 'uuid' => $guid] @@ -2046,7 +2054,7 @@ class Access extends LDAPUtility { ): bool { $pagedSearchOK = false; if ($limit !== 0) { - \OC::$server->getLogger()->debug( + $this->logger->debug( 'initializing paged search for filter {filter}, base {base}, attr {attr}, limit {limit}, offset {offset}', [ 'app' => 'user_ldap', @@ -2078,7 +2086,7 @@ class Access extends LDAPUtility { 'controlPagedResult', $this->connection->getConnectionResource(), $limit, false ); if ($pagedSearchOK) { - \OC::$server->getLogger()->debug('Ready for a paged search', ['app' => 'user_ldap']); + $this->logger->debug('Ready for a paged search', ['app' => 'user_ldap']); } /* ++ Fixing RHDS searches with pages with zero results ++ * We coudn't get paged searches working with our RHDS for login ($limit = 0), diff --git a/apps/user_ldap/lib/AccessFactory.php b/apps/user_ldap/lib/AccessFactory.php index 96f2655f046..7b67401efb4 100644 --- a/apps/user_ldap/lib/AccessFactory.php +++ b/apps/user_ldap/lib/AccessFactory.php @@ -27,6 +27,7 @@ namespace OCA\User_LDAP; use OCA\User_LDAP\User\Manager; use OCP\IConfig; use OCP\IUserManager; +use Psr\Log\LoggerInterface; class AccessFactory { /** @var ILDAPWrapper */ @@ -39,18 +40,22 @@ class AccessFactory { protected $config; /** @var IUserManager */ private $ncUserManager; + /** @var LoggerInterface */ + private $logger; public function __construct( ILDAPWrapper $ldap, Manager $userManager, Helper $helper, IConfig $config, - IUserManager $ncUserManager) { + IUserManager $ncUserManager, + LoggerInterface $logger) { $this->ldap = $ldap; $this->userManager = $userManager; $this->helper = $helper; $this->config = $config; $this->ncUserManager = $ncUserManager; + $this->logger = $logger; } public function get(Connection $connection) { @@ -60,7 +65,8 @@ class AccessFactory { $this->userManager, $this->helper, $this->config, - $this->ncUserManager + $this->ncUserManager, + $this->logger ); } } diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index dd1d966361b..63f2296a167 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -38,7 +38,7 @@ namespace OCA\User_LDAP; use OC\ServerNotAvailableException; -use OCP\ILogger; +use Psr\Log\LoggerInterface; /** * magic properties (incomplete) @@ -104,6 +104,9 @@ class Connection extends LDAPUtility { protected $bindResult = []; + /** @var LoggerInterface */ + protected $logger; + /** * Constructor * @param ILDAPWrapper $ldap @@ -123,6 +126,7 @@ class Connection extends LDAPUtility { $helper = new Helper(\OC::$server->getConfig()); $this->doNotValidate = !in_array($this->configPrefix, $helper->getServerConfigurationPrefixes()); + $this->logger = \OC::$server->get(LoggerInterface::class); } public function __destruct() { @@ -209,7 +213,10 @@ class Connection extends LDAPUtility { $this->establishConnection(); } if (is_null($this->ldapConnectionRes)) { - \OCP\Util::writeLog('user_ldap', 'No LDAP Connection to server ' . $this->configuration->ldapHost, ILogger::ERROR); + $this->logger->error( + 'No LDAP Connection to server ' . $this->configuration->ldapHost, + ['app' => 'user_ldap'] + ); throw new ServerNotAvailableException('Connection to LDAP server could not be established'); } return $this->ldapConnectionRes; @@ -381,10 +388,10 @@ class Connection extends LDAPUtility { && (!is_null($this->configID))) { $this->configuration->$effectiveSetting = 'auto'; $this->configuration->saveConfiguration(); - \OCP\Util::writeLog('user_ldap', - 'Illegal value for the '. - $effectiveSetting.', '.'reset to '. - 'autodetect.', ILogger::INFO); + $this->logger->info( + 'Illegal value for the '.$effectiveSetting.', reset to autodetect.', + ['app' => 'user_ldap'] + ); } } } @@ -407,10 +414,9 @@ class Connection extends LDAPUtility { if ((stripos($this->configuration->ldapHost, 'ldaps://') === 0) && $this->configuration->ldapTLS) { $this->configuration->ldapTLS = false; - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->info( 'LDAPS (already using secure connection) and TLS do not work together. Switched off TLS.', - ILogger::INFO + ['app' => 'user_ldap'] ); } } @@ -450,10 +456,9 @@ class Connection extends LDAPUtility { break; } $configurationOK = false; - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( $errorStr.'No '.$subj.' given!', - ILogger::WARN + ['app' => 'user_ldap'] ); } } @@ -465,11 +470,11 @@ class Connection extends LDAPUtility { ($agent === '' && $pwd !== '') || ($agent !== '' && $pwd === '') ) { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( $errorStr.'either no password is given for the user ' . 'agent or a password is given, but not an LDAP agent.', - ILogger::WARN); + ['app' => 'user_ldap'] + ); $configurationOK = false; } @@ -478,20 +483,18 @@ class Connection extends LDAPUtility { $baseGroups = $this->configuration->ldapBaseGroups; if (empty($base) && empty($baseUsers) && empty($baseGroups)) { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( $errorStr.'Not a single Base DN given.', - ILogger::WARN + ['app' => 'user_ldap'] ); $configurationOK = false; } if (mb_strpos($this->configuration->ldapLoginFilter, '%uid', 0, 'UTF-8') === false) { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( $errorStr.'login filter does not contain %uid place holder.', - ILogger::WARN + ['app' => 'user_ldap'] ); $configurationOK = false; } @@ -535,34 +538,32 @@ class Connection extends LDAPUtility { return false; } if (!$this->ignoreValidation && !$this->configured) { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( 'Configuration is invalid, cannot connect', - ILogger::WARN + ['app' => 'user_ldap'] ); return false; } if (!$this->ldapConnectionRes) { if (!$this->ldap->areLDAPFunctionsAvailable()) { $phpLDAPinstalled = false; - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->error( 'function ldap_connect is not available. Make sure that the PHP ldap module is installed.', - ILogger::ERROR + ['app' => 'user_ldap'] ); return false; } if ($this->configuration->turnOffCertCheck) { if (putenv('LDAPTLS_REQCERT=never')) { - \OCP\Util::writeLog('user_ldap', + $this->logger->debug( 'Turned off SSL certificate validation successfully.', - ILogger::DEBUG); + ['app' => 'user_ldap'] + ); } else { - \OCP\Util::writeLog( - 'user_ldap', + $this->logger->warning( 'Could not turn off SSL certificate validation.', - ILogger::WARN + ['app' => 'user_ldap'] ); } } @@ -672,9 +673,10 @@ class Connection extends LDAPUtility { if (!$ldapLogin) { $errno = $this->ldap->errno($cr); - \OCP\Util::writeLog('user_ldap', + $this->logger->warning( 'Bind failed: ' . $errno . ': ' . $this->ldap->error($cr), - ILogger::WARN); + ['app' => 'user_ldap'] + ); // Set to failure mode, if LDAP error code is not one of // - LDAP_SUCCESS (0) diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index 9c2e3ebb713..a1ceeffba58 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -50,7 +50,7 @@ use OC\Cache\CappedMemoryCache; use OC\ServerNotAvailableException; use OCP\Group\Backend\IGetDisplayNameBackend; use OCP\GroupInterface; -use OCP\ILogger; +use Psr\Log\LoggerInterface; class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend { protected $enabled = false; @@ -63,7 +63,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I protected $cachedNestedGroups; /** @var GroupPluginManager */ protected $groupPluginManager; - /** @var ILogger */ + /** @var LoggerInterface */ protected $logger; /** @@ -83,7 +83,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I $this->cachedGroupsByMember = new CappedMemoryCache(); $this->cachedNestedGroups = new CappedMemoryCache(); $this->groupPluginManager = $groupPluginManager; - $this->logger = OC::$server->getLogger(); + $this->logger = OC::$server->get(LoggerInterface::class); $this->ldapGroupMemberAssocAttr = strtolower($gAssoc); } diff --git a/apps/user_ldap/lib/Jobs/Sync.php b/apps/user_ldap/lib/Jobs/Sync.php index 053ca894902..226a994cf57 100644 --- a/apps/user_ldap/lib/Jobs/Sync.php +++ b/apps/user_ldap/lib/Jobs/Sync.php @@ -41,6 +41,7 @@ use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager; +use Psr\Log\LoggerInterface; class Sync extends TimedJob { public const MAX_INTERVAL = 12 * 60 * 60; // 12h @@ -61,6 +62,8 @@ class Sync extends TimedJob { protected $dbc; /** @var IUserManager */ protected $ncUserManager; + /** @var LoggerInterface */ + protected $logger; /** @var IManager */ protected $notificationManager; /** @var ConnectionFactory */ @@ -337,6 +340,12 @@ class Sync extends TimedJob { $this->ncUserManager = \OC::$server->getUserManager(); } + if (isset($argument['logger'])) { + $this->logger = $argument['logger']; + } else { + $this->logger = \OC::$server->get(LoggerInterface::class); + } + if (isset($argument['notificationManager'])) { $this->notificationManager = $argument['notificationManager']; } else { @@ -378,7 +387,8 @@ class Sync extends TimedJob { $this->userManager, $this->ldapHelper, $this->config, - $this->ncUserManager + $this->ncUserManager, + $this->logger ); } } diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php index 85615a46181..387c4cb3a55 100644 --- a/apps/user_ldap/lib/Jobs/UpdateGroups.php +++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php @@ -48,6 +48,7 @@ use OCP\Group\Events\UserAddedEvent; use OCP\Group\Events\UserRemovedEvent; use OCP\ILogger; use OCP\IUser; +use Psr\Log\LoggerInterface; class UpdateGroups extends \OC\BackgroundJob\TimedJob { private static $groupsFromDB; @@ -210,7 +211,7 @@ class UpdateGroups extends \OC\BackgroundJob\TimedJob { \OC::$server->getUserManager(), \OC::$server->getNotificationManager()); $connector = new Connection($ldapWrapper, $configPrefixes[0]); - $ldapAccess = new Access($connector, $ldapWrapper, $userManager, $helper, \OC::$server->getConfig(), \OC::$server->getUserManager()); + $ldapAccess = new Access($connector, $ldapWrapper, $userManager, $helper, \OC::$server->getConfig(), \OC::$server->getUserManager(), \OC::$server->get(LoggerInterface::class)); $groupMapper = new GroupMapping($dbc); $userMapper = new UserMapping($dbc); $ldapAccess->setGroupMapper($groupMapper); diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index 7bcbd19ff1c..2b290f0ef32 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -36,6 +36,7 @@ namespace OCA\User_LDAP; use OCA\User_LDAP\Mapping\GroupMapping; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; +use Psr\Log\LoggerInterface; abstract class Proxy { private static $accesses = []; @@ -70,6 +71,7 @@ abstract class Proxy { static $db; static $coreUserManager; static $coreNotificationManager; + static $logger; if ($fs === null) { $ocConfig = \OC::$server->getConfig(); $fs = new FilesystemHelper(); @@ -80,12 +82,13 @@ abstract class Proxy { $groupMap = new GroupMapping($db); $coreUserManager = \OC::$server->getUserManager(); $coreNotificationManager = \OC::$server->getNotificationManager(); + $logger = \OC::$server->get(LoggerInterface::class); } $userManager = new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), $db, $coreUserManager, $coreNotificationManager); $connector = new Connection($this->ldap, $configPrefix); - $access = new Access($connector, $this->ldap, $userManager, new Helper($ocConfig), $ocConfig, $coreUserManager); + $access = new Access($connector, $this->ldap, $userManager, new Helper($ocConfig), $ocConfig, $coreUserManager, $logger); $access->setUserMapper($userMap); $access->setGroupMapper($groupMap); self::$accesses[$configPrefix] = $access; diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 79f230ae00b..2af0cf8e48c 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -46,10 +46,9 @@ use OCA\User_LDAP\Exceptions\NotOnLDAP; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; -use OCP\ILogger; use OCP\IUserSession; use OCP\Notification\IManager as INotificationManager; -use OCP\Util; +use Psr\Log\LoggerInterface; class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { /** @var \OCP\IConfig */ @@ -61,6 +60,9 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** @var UserPluginManager */ protected $userPluginManager; + /** @var LoggerInterface */ + protected $logger; + /** * @param Access $access * @param \OCP\IConfig $ocConfig @@ -72,6 +74,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $this->ocConfig = $ocConfig; $this->notificationManager = $notificationManager; $this->userPluginManager = $userPluginManager; + $this->logger = \OC::$server->get(LoggerInterface::class); } /** @@ -173,17 +176,21 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn try { $ldapRecord = $this->getLDAPUserByLoginName($uid); } catch (NotOnLDAP $e) { - \OC::$server->getLogger()->logException($e, ['app' => 'user_ldap', 'level' => ILogger::DEBUG]); + $this->logger->debug( + $e->getMessage(), + ['app' => 'user_ldap', 'exception' => $e] + ); return false; } $dn = $ldapRecord['dn'][0]; $user = $this->access->userManager->get($dn); if (!$user instanceof User) { - Util::writeLog('user_ldap', + $this->logger->warning( 'LDAP Login: Could not get user object for DN ' . $dn . '. Maybe the LDAP entry has no set display name attribute?', - ILogger::WARN); + ['app' => 'user_ldap'] + ); return false; } if ($user->getUsername() !== false) { @@ -266,16 +273,20 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $this->access->getFilterPartForUserSearch($search) ]); - Util::writeLog('user_ldap', + $this->logger->debug( 'getUsers: Options: search '.$search.' limit '.$limit.' offset '.$offset.' Filter: '.$filter, - ILogger::DEBUG); + ['app' => 'user_ldap'] + ); //do the search and translate results to Nextcloud names $ldap_users = $this->access->fetchListOfUsers( $filter, $this->access->userManager->getAttributes(true), $limit, $offset); $ldap_users = $this->access->nextcloudUserNames($ldap_users); - Util::writeLog('user_ldap', 'getUsers: '.count($ldap_users). ' Users found', ILogger::DEBUG); + $this->logger->debug( + 'getUsers: '.count($ldap_users). ' Users found', + ['app' => 'user_ldap'] + ); $this->access->connection->writeToCache($cachekey, $ldap_users); return $ldap_users; @@ -353,8 +364,10 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $user = $this->access->userManager->get($uid); if (is_null($user)) { - Util::writeLog('user_ldap', 'No DN found for '.$uid.' on '. - $this->access->connection->ldapHost, ILogger::DEBUG); + $this->logger->debug( + 'No DN found for '.$uid.' on '.$this->access->connection->ldapHost, + ['app' => 'user_ldap'] + ); $this->access->connection->writeToCache('userExists'.$uid, false); return false; } @@ -379,12 +392,13 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn $marked = $this->ocConfig->getUserValue($uid, 'user_ldap', 'isDeleted', 0); if ((int)$marked === 0) { - \OC::$server->getLogger()->notice( + $this->logger->notice( 'User '.$uid . ' is not marked as deleted, not cleaning up.', - ['app' => 'user_ldap']); + ['app' => 'user_ldap'] + ); return false; } - \OC::$server->getLogger()->info('Cleaning up after user ' . $uid, + $this->logger->info('Cleaning up after user ' . $uid, ['app' => 'user_ldap']); $this->access->getUserMapper()->unmap($uid); // we don't emit unassign signals here, since it is implicit to delete signals fired from core @@ -619,7 +633,7 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn ); $this->access->cacheUserExists($username); } else { - \OC::$server->getLogger()->warning( + $this->logger->warning( 'Failed to map created LDAP user with userid {userid}, because UUID could not be determined', [ 'app' => 'user_ldap', diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php index 78337ff32b1..67a130555f2 100644 --- a/apps/user_ldap/lib/Wizard.php +++ b/apps/user_ldap/lib/Wizard.php @@ -40,7 +40,7 @@ namespace OCA\User_LDAP; use OC\ServerNotAvailableException; -use OCP\ILogger; +use Psr\Log\LoggerInterface; class Wizard extends LDAPUtility { /** @var \OCP\IL10N */ @@ -51,6 +51,9 @@ class Wizard extends LDAPUtility { protected $result; protected $resultCache = []; + /** @var LoggerInterface */ + protected $logger; + public const LRESULT_PROCESSED_OK = 2; public const LRESULT_PROCESSED_INVALID = 3; public const LRESULT_PROCESSED_SKIP = 4; @@ -78,6 +81,7 @@ class Wizard extends LDAPUtility { } $this->access = $access; $this->result = new WizardResult(); + $this->logger = \OC::$server->get(LoggerInterface::class); } public function __destruct() { @@ -301,9 +305,11 @@ class Wizard extends LDAPUtility { if ($winner !== '') { $this->applyFind('ldap_email_attr', $winner); if ($writeLog) { - \OCP\Util::writeLog('user_ldap', 'The mail attribute has ' . - 'automatically been reset, because the original value ' . - 'did not return any results.', ILogger::INFO); + $this->logger->info( + 'The mail attribute has automatically been reset, '. + 'because the original value did not return any results.', + ['app' => 'user_ldap'] + ); } } @@ -681,7 +687,10 @@ class Wizard extends LDAPUtility { foreach ($portSettings as $setting) { $p = $setting['port']; $t = $setting['tls']; - \OCP\Util::writeLog('user_ldap', 'Wiz: trying port '. $p . ', TLS '. $t, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: trying port '. $p . ', TLS '. $t, + ['app' => 'user_ldap'] + ); //connectAndBind may throw Exception, it needs to be catched by the //callee of this method @@ -704,7 +713,10 @@ class Wizard extends LDAPUtility { 'ldapTLS' => (int)$t ]; $this->configuration->setConfiguration($config); - \OCP\Util::writeLog('user_ldap', 'Wiz: detected Port ' . $p, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: detected Port ' . $p, + ['app' => 'user_ldap'] + ); $this->result->addChange('ldap_port', $p); return $this->result; } @@ -849,8 +861,10 @@ class Wizard extends LDAPUtility { if (!$this->ldap->isResource($rr)) { $errorNo = $this->ldap->errno($cr); $errorMsg = $this->ldap->error($cr); - \OCP\Util::writeLog('user_ldap', 'Wiz: Could not search base '.$base. - ' Error '.$errorNo.': '.$errorMsg, ILogger::INFO); + $this->logger->info( + 'Wiz: Could not search base '.$base.' Error '.$errorNo.': '.$errorMsg, + ['app' => 'user_ldap'] + ); return false; } $entries = $this->ldap->countEntries($cr, $rr); @@ -1026,7 +1040,10 @@ class Wizard extends LDAPUtility { break; } - \OCP\Util::writeLog('user_ldap', 'Wiz: Final filter '.$filter, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Final filter '.$filter, + ['app' => 'user_ldap'] + ); return $filter; } @@ -1046,7 +1063,10 @@ class Wizard extends LDAPUtility { if (!$hostInfo) { throw new \Exception(self::$l->t('Invalid Host')); } - \OCP\Util::writeLog('user_ldap', 'Wiz: Attempting to connect ', ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Attempting to connect', + ['app' => 'user_ldap'] + ); $cr = $this->ldap->connect($host, $port); if (!is_resource($cr)) { throw new \Exception(self::$l->t('Invalid Host')); @@ -1065,7 +1085,10 @@ class Wizard extends LDAPUtility { } } - \OCP\Util::writeLog('user_ldap', 'Wiz: Attemping to Bind ', ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Attemping to Bind', + ['app' => 'user_ldap'] + ); //interesting part: do the bind! $login = $this->ldap->bind($cr, $this->configuration->ldapAgentName, @@ -1080,7 +1103,10 @@ class Wizard extends LDAPUtility { if ($login === true) { $this->ldap->unbind($cr); - \OCP\Util::writeLog('user_ldap', 'Wiz: Bind successful to Port '. $port . ' TLS ' . (int)$tls, ILogger::DEBUG); + $this->logger->debug( + 'Wiz: Bind successful to Port '. $port . ' TLS ' . (int)$tls, + ['app' => 'user_ldap'] + ); return true; } diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index 6fe0fb1f24f..b97fe321bf7 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -53,6 +53,7 @@ use OCP\IDBConnection; use OCP\Image; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use Psr\Log\LoggerInterface; use Test\TestCase; /** @@ -79,6 +80,8 @@ class AccessTest extends TestCase { private $config; /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */ private $ncUserManager; + /** @var LoggerInterface|MockObject */ + private $logger; /** @var Access */ private $access; @@ -91,6 +94,7 @@ class AccessTest extends TestCase { $this->userMapper = $this->createMock(UserMapping::class); $this->groupMapper = $this->createMock(GroupMapping::class); $this->ncUserManager = $this->createMock(IUserManager::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->access = new Access( $this->connection, @@ -98,7 +102,8 @@ class AccessTest extends TestCase { $this->userManager, $this->helper, $this->config, - $this->ncUserManager + $this->ncUserManager, + $this->logger ); $this->access->setUserMapper($this->userMapper); $this->access->setGroupMapper($this->groupMapper); @@ -238,7 +243,7 @@ class AccessTest extends TestCase { list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject $config */ $config = $this->createMock(IConfig::class); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager, $this->logger); $lw->expects($this->exactly(1)) ->method('explodeDN') @@ -261,7 +266,7 @@ class AccessTest extends TestCase { /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject $config */ $config = $this->createMock(IConfig::class); $lw = new LDAP(); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager, $this->logger); if (!function_exists('ldap_explode_dn')) { $this->markTestSkipped('LDAP Module not available'); @@ -442,7 +447,7 @@ class AccessTest extends TestCase { $attribute => ['count' => 1, $dnFromServer] ]); - $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager); + $access = new Access($con, $lw, $um, $helper, $config, $this->ncUserManager, $this->logger); $values = $access->readAttribute('uid=whoever,dc=example,dc=org', $attribute); $this->assertSame($values[0], strtolower($dnFromServer)); } diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index e40f73a7596..acca987a81d 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -143,7 +143,7 @@ abstract class AbstractIntegrationTest { * initializes the Access test instance */ protected function initAccess() { - $this->access = new Access($this->connection, $this->ldap, $this->userManager, $this->helper, \OC::$server->getConfig()); + $this->access = new Access($this->connection, $this->ldap, $this->userManager, $this->helper, \OC::$server->getConfig(), \OC::$server->getLogger()); } /** diff --git a/core/Middleware/TwoFactorMiddleware.php b/core/Middleware/TwoFactorMiddleware.php index d5a8a2f877a..c0e01cbe033 100644 --- a/core/Middleware/TwoFactorMiddleware.php +++ b/core/Middleware/TwoFactorMiddleware.php @@ -32,6 +32,7 @@ use OC\Authentication\TwoFactorAuth\Manager; use OC\Core\Controller\LoginController; use OC\Core\Controller\TwoFactorChallengeController; use OC\User\Session; +use OCA\TwoFactorNextcloudNotification\Controller\APIController; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Middleware; @@ -83,6 +84,11 @@ class TwoFactorMiddleware extends Middleware { * @param string $methodName */ public function beforeController($controller, $methodName) { + if ($controller instanceof APIController && $methodName === 'poll') { + // Allow polling the twofactor nextcloud notifications state + return; + } + if ($controller instanceof TwoFactorChallengeController && $this->userSession->getUser() !== null && !$this->reflector->hasAnnotation('TwoFactorSetUpDoneRequired')) { diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php index 1bfb9f611bb..13344243fd5 100644 --- a/lib/private/Files/Storage/Local.php +++ b/lib/private/Files/Storage/Local.php @@ -217,7 +217,7 @@ class Local extends \OC\Files\Storage\Common { } public function filesize($path) { - if ($this->is_dir($path)) { + if (!$this->is_file($path)) { return 0; } $fullPath = $this->getSourcePath($path); diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index 22201c9db83..b12e11576dd 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -389,7 +389,7 @@ class Encryption extends Wrapper { if ($this->util->isExcluded($fullPath) === false) { $size = $unencryptedSize = 0; $realFile = $this->util->stripPartialFileExtension($path); - $targetExists = $this->file_exists($realFile) || $this->file_exists($path); + $targetExists = $this->is_file($realFile) || $this->file_exists($path); $targetIsEncrypted = false; if ($targetExists) { // in case the file exists we require the explicit module as @@ -853,7 +853,7 @@ class Encryption extends Wrapper { */ protected function readFirstBlock($path) { $firstBlock = ''; - if ($this->storage->file_exists($path)) { + if ($this->storage->is_file($path)) { $handle = $this->storage->fopen($path, 'r'); $firstBlock = fread($handle, $this->util->getHeaderSize()); fclose($handle); @@ -870,7 +870,7 @@ class Encryption extends Wrapper { protected function getHeaderSize($path) { $headerSize = 0; $realFile = $this->util->stripPartialFileExtension($path); - if ($this->storage->file_exists($realFile)) { + if ($this->storage->is_file($realFile)) { $path = $realFile; } $firstBlock = $this->readFirstBlock($path); @@ -918,7 +918,7 @@ class Encryption extends Wrapper { */ protected function getHeader($path) { $realFile = $this->util->stripPartialFileExtension($path); - $exists = $this->storage->file_exists($realFile); + $exists = $this->storage->is_file($realFile); if ($exists) { $path = $realFile; } diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index 3e9812c99f2..2ae55afd5a2 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -621,7 +621,7 @@ class OC_Image implements \OCP\IImage { default: // this is mostly file created from encrypted file - $this->resource = imagecreatefromstring(\OC\Files\Filesystem::file_get_contents(\OC\Files\Filesystem::getLocalPath($imagePath))); + $this->resource = imagecreatefromstring(file_get_contents($imagePath)); $iType = IMAGETYPE_PNG; $this->logger->debug('OC_Image->loadFromFile, Default', ['app' => 'core']); break; diff --git a/psalm.xml b/psalm.xml index 6a870f0e8db..7ba0b1f8c40 100644 --- a/psalm.xml +++ b/psalm.xml @@ -77,6 +77,7 @@ <UndefinedClass> <errorLevel type="suppress"> <referencedClass name="OCA\GroupFolders\Mount\GroupFolderStorage"/> + <referencedClass name="OCA\TwoFactorNextcloudNotification\Controller\APIController"/> </errorLevel> </UndefinedClass> <UndefinedFunction> diff --git a/resources/codesigning/root.crl b/resources/codesigning/root.crl index 0f938e89499..d825b73e7ef 100644 --- a/resources/codesigning/root.crl +++ b/resources/codesigning/root.crl @@ -1,38 +1,39 @@ -----BEGIN X509 CRL----- -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 -/dakdyqbPJfp1EYXk3HnE/up5ZyonD5I2JynyA== +ECMXDTE5MTIxMjA5MzUzMVowEwICECYXDTIxMTAyNzIxMzExNVowEwICECgXDTIw +MDgyNDEwMjgzN1owEwICEE0XDTE4MTIyMTE1MzIxOFowEwICEE4XDTIwMDEwNzEz +NTc0NlowEwICEGoXDTE5MDIxMjA5MDgxNFowEwICEG4XDTE5MTEyMDE5NDYyOFow +EwICEG8XDTE4MDQxNzA5MzkzNlowEwICEHQXDTE3MTEyMzE2NTQ1OVowEwICEHUX +DTE5MTIxMjA5MzkwNVowEwICEHYXDTE5MTIxMjA5MzkxMlowEwICEJAXDTE4MDIw +OTA4Mzg1OFowEwICEJkXDTIxMTAxNTA4MzkxNFowEwICEKcXDTE4MDgxMzA3NTIw +OFowEwICEK8XDTE4MDgxMzA4MjYyMFowEwICELIXDTIxMDkxNjIyMDAwNVowEwIC +ELUXDTE4MTAwOTA5NTMxMVowEwICELcXDTE4MTIyMTE1MzAyN1owEwICEMIXDTE4 +MTAxNzE5MjAyNFowEwICEMMXDTE4MTAxNzE5MjUzM1owEwICEMQXDTIxMDcxNTE4 +NDA0NlowEwICEMwXDTIxMDExODEyNDUxM1owEwICENcXDTE5MDIxNDEwMzMwNlow +EwICENwXDTIwMDkxNjEwNDQwNFowEwICEOAXDTE5MDUyMDA5MzAxMFowEwICEPgX +DTIwMDQyODA2MjIzNlowEwICEPkXDTIwMDQyODA2MjI0NVowEwICEPoXDTIwMDQy +ODA2MDQzMFowEwICEPsXDTIwMDQyODA2MDUzMFowEwICEPwXDTIwMDQyODA2MDU0 +MFowEwICEP0XDTE5MTIxMjA5MzUzNlowEwICEP4XDTIwMDQyODA2MDYwNVowEwIC +EP8XDTIwMDQyODA2MDYxM1owEwICEQAXDTIwMDQyODA2MDYyMlowEwICEQEXDTIw +MDQyNzExMjI1NFowEwICEQIXDTIwMDQyODA2MDY0MFowEwICEQMXDTIwMDQyODA2 +MDY0N1owEwICEQQXDTIwMDQyODA2MDY1NFowEwICEQUXDTIwMDQyODA2MDcwMVow +EwICEQYXDTIwMDQyODA2MDcwNlowEwICEQcXDTIwMDQyODA2MDcxM1owEwICES0X +DTIxMDEwNjEyMjEzMVowEwICEUcXDTIxMDIxNTE5MTQwMVowEwICEUgXDTIxMDIx +NTE5MTQxM1owEwICEUkXDTIxMDIxNTE5MTUyNFowEwICEUoXDTIxMDIxNTE5MTQ0 +OFowEwICEUsXDTIxMDIxNTE5MTM0NlowEwICEUwXDTIxMDIxNTE5MTUwOVowEwIC +EU0XDTIxMDIxNTE5MTUxNlowEwICEVIXDTIxMDIxNTE5MTQ1OFowEwICEVMXDTIx +MDIxNTE5MTQzOFowEwICEVQXDTIxMDIxNTE5MTQyMlowEwICEaMXDTIxMTAyNzIx +NTExNFqgMDAuMB8GA1UdIwQYMBaAFG3qbqqpNyw8iS0XPv1G7sOeeO10MAsGA1Ud +FAQEAgIQHTANBgkqhkiG9w0BAQsFAAOCAQEAVHlUJ+g9573rnFUA5MtAZSudYlH3 +nyyI7F1AarUrI0jiqb8lkjCHMcuToA31uNVa+iOl3ZuAQ//To9YZ/Br8dYwSde/H +yDlqEB5Ku/iB9ApCzMjNyayj7fu51pQcNzcgikQ+72Y2YYwmVh3DEeKSsI3axG4P +Ke4bhGkffg/Mlu10VsQHfLxPknqmobGl4jRK4dC0IpWqnSp3U15ZQfFqlG5hFvcK +X/xW149jHbfD1vhKLrTdd25NaqEfMyq4mhnJ3J3ol14RpvYe/j54OrEySPrc5vOP +UWFSXPLyJWFJ72RIo7t5qmezH1pcl0wvgSvsdfIuCfk1eXwJwx1gBQnOWQ== -----END X509 CRL----- diff --git a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php index d152a51ed85..8e0b31aaa43 100644 --- a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php +++ b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php @@ -613,7 +613,7 @@ class EncryptionTest extends Storage { $util->expects($this->once())->method('stripPartialFileExtension') ->with($path)->willReturn($strippedPath); $sourceStorage->expects($this->once()) - ->method('file_exists') + ->method('is_file') ->with($strippedPath) ->willReturn($strippedPathExists); @@ -641,7 +641,7 @@ class EncryptionTest extends Storage { ->disableOriginalConstructor()->getMock(); $sourceStorage->expects($this->once()) - ->method('file_exists') + ->method('is_file') ->willReturn($exists); $util = $this->getMockBuilder('\OC\Encryption\Util') |