aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/App/InfoParser.php11
-rw-r--r--lib/private/Installer.php3
-rw-r--r--lib/private/Lock/AbstractLockingProvider.php3
-rw-r--r--lib/private/Log.php2
-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.php7
-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.php6
-rw-r--r--lib/private/legacy/app.php8
-rw-r--r--lib/private/legacy/user.php35
-rw-r--r--lib/private/user/database.php12
-rw-r--r--lib/private/user/manager.php14
-rw-r--r--lib/private/user/session.php46
-rw-r--r--lib/private/user/user.php1
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));
}
}
-
}