Skip to content
Snippets Groups Projects
Commit 14e0b1b6 authored by Robin Appelman's avatar Robin Appelman
Browse files

Merge pull request #6513 from owncloud/user-no-change-displayname

Re-add the config options to remove the ability for users to change their displayname
parents 095f9b8e 0ed1b646
No related branches found
No related tags found
No related merge requests found
......@@ -69,10 +69,18 @@ class Server extends SimpleContainer implements IServerContainer {
return new Root($manager, $view, $user);
});
$this->registerService('UserManager', function($c) {
return new \OC\User\Manager();
/**
* @var SimpleContainer $c
* @var \OC\AllConfig $config
*/
$config = $c->query('AllConfig');
return new \OC\User\Manager($config);
});
$this->registerService('UserSession', function($c) {
/** @var $c SimpleContainer */
/**
* @var SimpleContainer $c
* @var \OC\User\Manager $manager
*/
$manager = $c->query('UserManager');
$userSession = new \OC\User\Session($manager, \OC::$session);
$userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
......
......@@ -35,7 +35,16 @@ class Manager extends PublicEmitter {
*/
private $cachedUsers = array();
public function __construct() {
/**
* @var \OC\AllConfig $config
*/
private $config;
/**
* @param \OC\AllConfig $config
*/
public function __construct($config = null) {
$this->config = $config;
$cachedUsers = $this->cachedUsers;
$this->listen('\OC\User', 'postDelete', function ($user) use (&$cachedUsers) {
$i = array_search($user, $cachedUsers);
......@@ -103,7 +112,7 @@ class Manager extends PublicEmitter {
if (isset($this->cachedUsers[$uid])) {
return $this->cachedUsers[$uid];
}
$this->cachedUsers[$uid] = new User($uid, $backend, $this);
$this->cachedUsers[$uid] = new User($uid, $backend, $this, $this->config);
return $this->cachedUsers[$uid];
}
......@@ -141,7 +150,7 @@ class Manager extends PublicEmitter {
*/
public function checkPassword($loginname, $password) {
foreach ($this->backends as $backend) {
if($backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
if ($backend->implementsActions(\OC_USER_BACKEND_CHECK_PASSWORD)) {
$uid = $backend->checkPassword($loginname, $password);
if ($uid !== false) {
return $this->getUserObject($uid, $backend);
......@@ -234,7 +243,7 @@ class Manager extends PublicEmitter {
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-"
if (preg_match('/[^a-zA-Z0-9 _\.@\-]/', $uid)) {
throw new \Exception('Only the following characters are allowed in a username:'
. ' "a-z", "A-Z", "0-9", and "_.@-"');
. ' "a-z", "A-Z", "0-9", and "_.@-"');
}
// No empty username
if (trim($uid) == '') {
......
......@@ -42,12 +42,18 @@ class User {
*/
private $home;
/**
* @var \OC\AllConfig $config
*/
private $config;
/**
* @param string $uid
* @param \OC_User_Backend $backend
* @param Emitter $emitter
* @param \OC\Hooks\Emitter $emitter
* @param \OC\AllConfig $config
*/
public function __construct($uid, $backend, $emitter = null) {
public function __construct($uid, $backend, $emitter = null, $config = null) {
$this->uid = $uid;
if ($backend and $backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
$this->displayName = $backend->getDisplayName($uid);
......@@ -56,8 +62,13 @@ class User {
}
$this->backend = $backend;
$this->emitter = $emitter;
$enabled = \OC_Preferences::getValue($uid, 'core', 'enabled', 'true'); //TODO: DI for OC_Preferences
$this->enabled = ($enabled === 'true');
$this->config = $config;
if ($this->config) {
$enabled = $this->config->getUserValue($uid, 'core', 'enabled', 'true');
$this->enabled = ($enabled === 'true');
} else {
$this->enabled = true;
}
}
/**
......@@ -141,8 +152,10 @@ class User {
if (!$this->home) {
if ($this->backend->implementsActions(\OC_USER_BACKEND_GET_HOME) and $home = $this->backend->getHome($this->uid)) {
$this->home = $home;
} elseif ($this->config) {
$this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid;
} else {
$this->home = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data") . '/' . $this->uid; //TODO switch to Config object once implemented
$this->home = \OC::$SERVERROOT . '/data/' . $this->uid;
}
}
return $this->home;
......@@ -175,7 +188,11 @@ class User {
* @return bool
*/
public function canChangeDisplayName() {
return $this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME);
if ($this->config and $this->config->getSystemValue('allow_user_to_change_display_name') === false) {
return false;
} else {
return $this->backend->implementsActions(\OC_USER_BACKEND_SET_DISPLAYNAME);
}
}
/**
......@@ -194,7 +211,9 @@ class User {
*/
public function setEnabled($enabled) {
$this->enabled = $enabled;
$enabled = ($enabled) ? 'true' : 'false';
\OC_Preferences::setValue($this->uid, 'core', 'enabled', $enabled);
if ($this->config) {
$enabled = ($enabled) ? 'true' : 'false';
$this->config->setUserValue($this->uid, 'core', 'enabled', $enabled);
}
}
}
......@@ -9,6 +9,7 @@
namespace Test\User;
use OC\AllConfig;
use OC\Hooks\PublicEmitter;
class User extends \PHPUnit_Framework_TestCase {
......@@ -205,7 +206,9 @@ class User extends \PHPUnit_Framework_TestCase {
->method('implementsActions')
->will($this->returnValue(false));
$user = new \OC\User\User('foo', $backend);
$allConfig = new AllConfig();
$user = new \OC\User\User('foo', $backend, null, $allConfig);
$this->assertEquals(\OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data") . '/foo', $user->getHome());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment