diff options
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/App/InfoParser.php | 11 | ||||
-rw-r--r-- | lib/private/Installer.php | 3 | ||||
-rw-r--r-- | lib/private/Lock/AbstractLockingProvider.php | 3 | ||||
-rw-r--r-- | lib/private/Log.php | 2 | ||||
-rw-r--r-- | lib/private/Log/ErrorHandler.php (renamed from lib/private/log/errorhandler.php) | 0 | ||||
-rw-r--r-- | lib/private/Log/Errorlog.php (renamed from lib/private/log/errorlog.php) | 4 | ||||
-rw-r--r-- | lib/private/Log/Owncloud.php (renamed from lib/private/log/owncloud.php) | 16 | ||||
-rw-r--r-- | lib/private/Log/Rotate.php (renamed from lib/private/log/rotate.php) | 0 | ||||
-rw-r--r-- | lib/private/Log/Syslog.php (renamed from lib/private/log/syslog.php) | 4 | ||||
-rw-r--r-- | lib/private/Server.php | 7 | ||||
-rw-r--r-- | lib/private/Share/Constants.php (renamed from lib/private/share/constants.php) | 0 | ||||
-rw-r--r-- | lib/private/Share/Helper.php (renamed from lib/private/share/helper.php) | 0 | ||||
-rw-r--r-- | lib/private/Share/MailNotifications.php (renamed from lib/private/share/mailnotifications.php) | 0 | ||||
-rw-r--r-- | lib/private/Share/SearchResultSorter.php (renamed from lib/private/share/searchresultsorter.php) | 0 | ||||
-rw-r--r-- | lib/private/Share/Share.php (renamed from lib/private/share/share.php) | 0 | ||||
-rw-r--r-- | lib/private/legacy/api.php | 6 | ||||
-rw-r--r-- | lib/private/legacy/app.php | 8 | ||||
-rw-r--r-- | lib/private/legacy/user.php | 35 | ||||
-rw-r--r-- | lib/private/user/database.php | 12 | ||||
-rw-r--r-- | lib/private/user/manager.php | 14 | ||||
-rw-r--r-- | lib/private/user/session.php | 46 | ||||
-rw-r--r-- | lib/private/user/user.php | 1 |
22 files changed, 117 insertions, 55 deletions
diff --git a/lib/private/App/InfoParser.php b/lib/private/App/InfoParser.php index 21422d40603..e9456550206 100644 --- a/lib/private/App/InfoParser.php +++ b/lib/private/App/InfoParser.php @@ -89,6 +89,9 @@ class InfoParser { if (!array_key_exists('uninstall', $array['repair-steps'])) { $array['repair-steps']['uninstall'] = []; } + if (!array_key_exists('background-jobs', $array)) { + $array['background-jobs'] = []; + } if (array_key_exists('documentation', $array) && is_array($array['documentation'])) { foreach ($array['documentation'] as $key => $url) { @@ -128,6 +131,9 @@ class InfoParser { if (isset($array['repair-steps']['uninstall']['step']) && is_array($array['repair-steps']['uninstall']['step'])) { $array['repair-steps']['uninstall'] = $array['repair-steps']['uninstall']['step']; } + if (isset($array['background-jobs']['job']) && is_array($array['background-jobs']['job'])) { + $array['background-jobs'] = $array['background-jobs']['job']; + } return $array; } @@ -147,10 +153,7 @@ class InfoParser { if (!isset($array[$element])) { $array[$element] = ""; } - /** - * @var \SimpleXMLElement $node - */ - + /** @var \SimpleXMLElement $node */ // Has attributes if ($attributes = $node->attributes()) { $data = [ diff --git a/lib/private/Installer.php b/lib/private/Installer.php index 8ecc92e134b..edc6306b8f1 100644 --- a/lib/private/Installer.php +++ b/lib/private/Installer.php @@ -133,6 +133,8 @@ class Installer { } } + \OC_App::setupBackgroundJobs($info['background-jobs']); + //run appinfo/install.php if((!isset($data['noinstall']) or $data['noinstall']==false)) { self::includeAppScript($basedir . '/appinfo/install.php'); @@ -569,6 +571,7 @@ class Installer { if (is_null($info)) { return false; } + \OC_App::setupBackgroundJobs($info['background-jobs']); OC_App::executeRepairSteps($app, $info['repair-steps']['install']); diff --git a/lib/private/Lock/AbstractLockingProvider.php b/lib/private/Lock/AbstractLockingProvider.php index 1886fbea082..ff9f99a9630 100644 --- a/lib/private/Lock/AbstractLockingProvider.php +++ b/lib/private/Lock/AbstractLockingProvider.php @@ -77,6 +77,9 @@ abstract class AbstractLockingProvider implements ILockingProvider { if ($type === self::LOCK_SHARED) { if (isset($this->acquiredLocks['shared'][$path]) and $this->acquiredLocks['shared'][$path] > 0) { $this->acquiredLocks['shared'][$path]--; + if ($this->acquiredLocks['shared'][$path] === 0) { + unset($this->acquiredLocks['shared'][$path]); + } } } else if ($type === self::LOCK_EXCLUSIVE) { unset($this->acquiredLocks['exclusive'][$path]); diff --git a/lib/private/Log.php b/lib/private/Log.php index d82346bbcf0..9248070c067 100644 --- a/lib/private/Log.php +++ b/lib/private/Log.php @@ -73,7 +73,7 @@ class Log implements ILogger { // FIXME: Add this for backwards compatibility, should be fixed at some point probably if($logger === null) { - $this->logger = 'OC_Log_'.ucfirst($this->config->getValue('log_type', 'owncloud')); + $this->logger = 'OC\\Log\\'.ucfirst($this->config->getValue('log_type', 'owncloud')); call_user_func(array($this->logger, 'init')); } else { $this->logger = $logger; diff --git a/lib/private/log/errorhandler.php b/lib/private/Log/ErrorHandler.php index 8899bcfcb03..8899bcfcb03 100644 --- a/lib/private/log/errorhandler.php +++ b/lib/private/Log/ErrorHandler.php diff --git a/lib/private/log/errorlog.php b/lib/private/Log/Errorlog.php index ad3605136d0..37498c36aba 100644 --- a/lib/private/log/errorlog.php +++ b/lib/private/Log/Errorlog.php @@ -23,7 +23,9 @@ * THE SOFTWARE. */ -class OC_Log_Errorlog { +namespace OC\Log; + +class Errorlog { /** diff --git a/lib/private/log/owncloud.php b/lib/private/Log/Owncloud.php index 9c106299e4c..13997a0d552 100644 --- a/lib/private/log/owncloud.php +++ b/lib/private/Log/Owncloud.php @@ -27,13 +27,15 @@ * */ +namespace OC\Log; + /** * logging utilities * * Log is saved at data/owncloud.log (on default) */ -class OC_Log_Owncloud { +class Owncloud { static protected $logFile; /** @@ -41,7 +43,7 @@ class OC_Log_Owncloud { */ public static function init() { $systemConfig = \OC::$server->getSystemConfig(); - $defaultLogFile = $systemConfig->getValue("datadirectory", OC::$SERVERROOT.'/data').'/owncloud.log'; + $defaultLogFile = $systemConfig->getValue("datadirectory", \OC::$SERVERROOT.'/data').'/owncloud.log'; self::$logFile = $systemConfig->getValue("logfile", $defaultLogFile); /** @@ -72,13 +74,13 @@ class OC_Log_Owncloud { $format = $config->getValue('logdateformat', 'c'); $logTimeZone = $config->getValue( "logtimezone", 'UTC' ); try { - $timezone = new DateTimeZone($logTimeZone); - } catch (Exception $e) { - $timezone = new DateTimeZone('UTC'); + $timezone = new \DateTimeZone($logTimeZone); + } catch (\Exception $e) { + $timezone = new \DateTimeZone('UTC'); } - $time = DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", "")); + $time = \DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", "")); if ($time === false) { - $time = new DateTime(null, $timezone); + $time = new \DateTime(null, $timezone); } else { // apply timezone if $time is created from UNIX timestamp $time->setTimezone($timezone); diff --git a/lib/private/log/rotate.php b/lib/private/Log/Rotate.php index 458661c82d0..458661c82d0 100644 --- a/lib/private/log/rotate.php +++ b/lib/private/Log/Rotate.php diff --git a/lib/private/log/syslog.php b/lib/private/Log/Syslog.php index 96cf463d042..115103f26d6 100644 --- a/lib/private/log/syslog.php +++ b/lib/private/Log/Syslog.php @@ -21,7 +21,9 @@ * */ -class OC_Log_Syslog { +namespace OC\Log; + +class Syslog { static protected $levels = array( \OCP\Util::DEBUG => LOG_DEBUG, \OCP\Util::INFO => LOG_INFO, diff --git a/lib/private/Server.php b/lib/private/Server.php index a98ddc36b58..bbe6b88876f 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -329,7 +329,7 @@ class Server extends ServerContainer implements IServerContainer { }); $this->registerService('Logger', function (Server $c) { $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud'); - $logger = 'OC_Log_' . ucfirst($logClass); + $logger = 'OC\\Log\\' . ucfirst($logClass); call_user_func(array($logger, 'init')); return new Log($logger); @@ -837,8 +837,7 @@ class Server extends ServerContainer implements IServerContainer { } /** - * For internal use only - * + * @internal For internal use only * @return \OC\SystemConfig */ public function getSystemConfig() { @@ -1180,7 +1179,7 @@ class Server extends ServerContainer implements IServerContainer { return $this->query('MountManager'); } - /* + /** * Get the MimeTypeDetector * * @return \OCP\Files\IMimeTypeDetector diff --git a/lib/private/share/constants.php b/lib/private/Share/Constants.php index e60eb98832b..e60eb98832b 100644 --- a/lib/private/share/constants.php +++ b/lib/private/Share/Constants.php diff --git a/lib/private/share/helper.php b/lib/private/Share/Helper.php index f9581e48e62..f9581e48e62 100644 --- a/lib/private/share/helper.php +++ b/lib/private/Share/Helper.php diff --git a/lib/private/share/mailnotifications.php b/lib/private/Share/MailNotifications.php index f71651e71fc..f71651e71fc 100644 --- a/lib/private/share/mailnotifications.php +++ b/lib/private/Share/MailNotifications.php diff --git a/lib/private/share/searchresultsorter.php b/lib/private/Share/SearchResultSorter.php index 6d5542146e7..6d5542146e7 100644 --- a/lib/private/share/searchresultsorter.php +++ b/lib/private/Share/SearchResultSorter.php diff --git a/lib/private/share/share.php b/lib/private/Share/Share.php index 5b61f418a4d..5b61f418a4d 100644 --- a/lib/private/share/share.php +++ b/lib/private/Share/Share.php diff --git a/lib/private/legacy/api.php b/lib/private/legacy/api.php index bab879c95f8..702b9df1927 100644 --- a/lib/private/legacy/api.php +++ b/lib/private/legacy/api.php @@ -356,7 +356,11 @@ class OC_API { if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) ) { $authUser = $_SERVER['PHP_AUTH_USER']; $authPw = $_SERVER['PHP_AUTH_PW']; - $return = OC_User::login($authUser, $authPw); + try { + $return = OC_User::login($authUser, $authPw); + } catch (\OC\User\LoginException $e) { + return false; + } if ($return === true) { self::$logoutRequired = true; diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index fe590e4159e..dab4c1a70c7 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -1190,6 +1190,7 @@ class OC_App { self::loadApp($appId, false); include $appPath . '/appinfo/update.php'; } + self::setupBackgroundJobs($appData['background-jobs']); //set remote/public handlers if (array_key_exists('ocsid', $appData)) { @@ -1240,6 +1241,13 @@ class OC_App { $r->run(); } + public static function setupBackgroundJobs(array $jobs) { + $queue = \OC::$server->getJobList(); + foreach ($jobs as $job) { + $queue->add($job); + } + } + /** * @param string $appId * @param string[] $steps diff --git a/lib/private/legacy/user.php b/lib/private/legacy/user.php index 11c35daa0de..f0e829bbe33 100644 --- a/lib/private/legacy/user.php +++ b/lib/private/legacy/user.php @@ -63,8 +63,6 @@ class OC_User { return OC::$server->getUserSession(); } - private static $_backends = array(); - private static $_usedBackends = array(); private static $_setupedBackends = array(); @@ -105,7 +103,7 @@ class OC_User { break; default: \OCP\Util::writeLog('core', 'Adding default user backend ' . $backend . '.', \OCP\Util::DEBUG); - $className = 'OC_USER_' . strToUpper($backend); + $className = 'OC_USER_' . strtoupper($backend); self::$_usedBackends[$backend] = new $className(); \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]); break; @@ -152,14 +150,22 @@ class OC_User { /** * Try to login a user * - * @param string $loginname The login name of the user to log in + * @param string $loginName The login name of the user to log in * @param string $password The password of the user * @return boolean|null * * Log in a user and regenerate a new session - if the password is ok */ - public static function login($loginname, $password) { - $result = self::getUserSession()->login($loginname, $password); + public static function login($loginName, $password) { + + $result = self::getUserSession()->login($loginName, $password); + if (!$result) { + $users = \OC::$server->getUserManager()->getByEmail($loginName); + // we only allow login by email if unique + if (count($users) === 1) { + $result = self::getUserSession()->login($users[0]->getUID(), $password); + } + } if ($result) { // Refresh the token \OC::$server->getCsrfTokenManager()->refreshToken(); @@ -175,6 +181,7 @@ class OC_User { /** * Try to login a user using the magic cookie (remember login) * + * @deprecated use \OCP\IUserSession::loginWithCookie() * @param string $uid The username of the user to log in * @param string $token * @return bool @@ -205,10 +212,13 @@ class OC_User { self::getUserSession()->setLoginName($uid); // setup the filesystem OC_Util::setupFS($uid); + // first call the post_login hooks, the login-process needs to be + // completed before we can safely create the users folder. + // For example encryption needs to initialize the users keys first + // before we can create the user folder with the skeleton files + OC_Hook::emit("OC_User", "post_login", array("uid" => $uid, 'password' => '')); //trigger creation of user home and /files folder \OC::$server->getUserFolder($uid); - - OC_Hook::emit("OC_User", "post_login", array("uid" => $uid, 'password' => '')); } return true; } @@ -241,6 +251,8 @@ class OC_User { /** * Sets user id for session and triggers emit + * + * @param string $uid */ public static function setUserId($uid) { $userSession = \OC::$server->getUserSession(); @@ -296,14 +308,11 @@ class OC_User { /** * Check if the user is logged in, considers also the HTTP basic credentials * + * @deprecated use \OC::$server->getUserSession()->isLoggedIn() * @return bool */ public static function isLoggedIn() { - if (\OC::$server->getSession()->get('user_id') !== null && self::$incognitoMode === false) { - return self::userExists(\OC::$server->getSession()->get('user_id')); - } - - return false; + return \OC::$server->getUserSession()->isLoggedIn(); } /** diff --git a/lib/private/user/database.php b/lib/private/user/database.php index 22a05090b96..fd273055ae1 100644 --- a/lib/private/user/database.php +++ b/lib/private/user/database.php @@ -48,11 +48,21 @@ * */ +use OC\Cache\CappedMemoryCache; + /** * Class for user management in a SQL Database (e.g. MySQL, SQLite) */ class OC_User_Database extends OC_User_Backend implements \OCP\IUserBackend { - private $cache = array(); + /** @var CappedMemoryCache */ + private $cache; + + /** + * OC_User_Database constructor. + */ + public function __construct() { + $this->cache = new CappedMemoryCache(); + } /** * Create a new user diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php index 4371be134aa..37a3e5ba134 100644 --- a/lib/private/user/manager.php +++ b/lib/private/user/manager.php @@ -33,6 +33,7 @@ namespace OC\User; use OC\Hooks\PublicEmitter; +use OCP\IUser; use OCP\IUserBackend; use OCP\IUserManager; use OCP\IConfig; @@ -354,4 +355,17 @@ class Manager extends PublicEmitter implements IUserManager { } while (count($users) >= $limit); } } + + /** + * @param string $email + * @return IUser[] + * @since 9.1.0 + */ + public function getByEmail($email) { + $userIds = $this->config->getUsersForUserValue('settings', 'email', $email); + + return array_map(function($uid) { + return $this->get($uid); + }, $userIds); + } } diff --git a/lib/private/user/session.php b/lib/private/user/session.php index 5402c5cf74f..c7f8a6920de 100644 --- a/lib/private/user/session.php +++ b/lib/private/user/session.php @@ -32,6 +32,8 @@ namespace OC\User; use OC\Hooks\Emitter; +use OCP\ISession; +use OCP\IUserManager; use OCP\IUserSession; /** @@ -53,26 +55,20 @@ use OCP\IUserSession; * @package OC\User */ class Session implements IUserSession, Emitter { - /** - * @var \OC\User\Manager $manager - */ + /** @var \OC\User\Manager $manager */ private $manager; - /** - * @var \OC\Session\Session $session - */ + /** @var \OC\Session\Session $session */ private $session; - /** - * @var \OC\User\User $activeUser - */ + /** @var \OC\User\User $activeUser */ protected $activeUser; /** - * @param \OCP\IUserManager $manager - * @param \OCP\ISession $session + * @param IUserManager $manager + * @param ISession $session */ - public function __construct(\OCP\IUserManager $manager, \OCP\ISession $session) { + public function __construct(IUserManager $manager, ISession $session) { $this->manager = $manager; $this->session = $session; } @@ -107,7 +103,7 @@ class Session implements IUserSession, Emitter { /** * get the session object * - * @return \OCP\ISession + * @return ISession */ public function getSession() { return $this->session; @@ -116,10 +112,10 @@ class Session implements IUserSession, Emitter { /** * set the session object * - * @param \OCP\ISession $session + * @param ISession $session */ - public function setSession(\OCP\ISession $session) { - if ($this->session instanceof \OCP\ISession) { + public function setSession(ISession $session) { + if ($this->session instanceof ISession) { $this->session->close(); } $this->session = $session; @@ -170,7 +166,12 @@ class Session implements IUserSession, Emitter { * @return bool if logged in */ public function isLoggedIn() { - return $this->getUser() !== null; + $user = $this->getUser(); + if (is_null($user)) { + return false; + } + + return $user->isEnabled(); } /** @@ -226,15 +227,18 @@ class Session implements IUserSession, Emitter { if ($this->isLoggedIn()) { return true; } else { - throw new LoginException('Login canceled by app'); + // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory + $message = \OC::$server->getL10N('lib')->t('Login canceled by app'); + throw new LoginException($message); } } else { - return false; + // injecting l10n does not work - there is a circular dependency between session and \OCP\L10N\IFactory + $message = \OC::$server->getL10N('lib')->t('User disabled'); + throw new LoginException($message); } } - } else { - return false; } + return false; } /** diff --git a/lib/private/user/user.php b/lib/private/user/user.php index 3199790dba0..36680436769 100644 --- a/lib/private/user/user.php +++ b/lib/private/user/user.php @@ -417,5 +417,4 @@ class User implements IUser { $this->emitter->emit('\OC\User', 'changeUser', array($this, $feature, $value)); } } - } |