Browse Source

Use the new method in the old one to remove duplicate code

Signed-off-by: Joas Schilling <coding@schilljs.com>
tags/v12.0.0beta1
Joas Schilling 7 years ago
parent
commit
9212089151
No account linked to committer's email address
3 changed files with 41 additions and 36 deletions
  1. 28
    30
      lib/private/User/Manager.php
  2. 2
    1
      lib/public/IUserManager.php
  3. 11
    5
      tests/lib/User/ManagerTest.php

+ 28
- 30
lib/private/User/Manager.php View File

@@ -280,59 +280,57 @@ class Manager extends PublicEmitter implements IUserManager {
/**
* @param string $uid
* @param string $password
* @throws \Exception
* @return bool|\OC\User\User the created user or false
* @throws \InvalidArgumentException
* @return bool|IUser the created user or false
*/
public function createUser($uid, $password) {
foreach ($this->backends as $backend) {
if ($backend->implementsActions(Backend::CREATE_USER)) {
return $this->createUserFromBackend($uid, $password, $backend);
}
}

return false;
}

/**
* @param string $uid
* @param string $password
* @param UserInterface $backend
* @return IUser|null
* @throws \InvalidArgumentException
*/
public function createUserFromBackend($uid, $password, UserInterface $backend) {
$l = \OC::$server->getL10N('lib');

// Check the name for bad characters
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-'"
if (preg_match('/[^a-zA-Z0-9 _\.@\-\']/', $uid)) {
throw new \Exception($l->t('Only the following characters are allowed in a username:'
throw new \InvalidArgumentException($l->t('Only the following characters are allowed in a username:'
. ' "a-z", "A-Z", "0-9", and "_.@-\'"'));
}
// No empty username
if (trim($uid) == '') {
throw new \Exception($l->t('A valid username must be provided'));
if (trim($uid) === '') {
throw new \InvalidArgumentException($l->t('A valid username must be provided'));
}
// No whitespace at the beginning or at the end
if (trim($uid) !== $uid) {
throw new \Exception($l->t('Username contains whitespace at the beginning or at the end'));
throw new \InvalidArgumentException($l->t('Username contains whitespace at the beginning or at the end'));
}
// Username only consists of 1 or 2 dots (directory traversal)
if ($uid === '.' || $uid === '..') {
throw new \Exception($l->t('Username must not consist of dots only'));
throw new \InvalidArgumentException($l->t('Username must not consist of dots only'));
}
// No empty password
if (trim($password) == '') {
throw new \Exception($l->t('A valid password must be provided'));
if (trim($password) === '') {
throw new \InvalidArgumentException($l->t('A valid password must be provided'));
}

// Check if user already exists
if ($this->userExists($uid)) {
throw new \Exception($l->t('The username is already being used'));
throw new \InvalidArgumentException($l->t('The username is already being used'));
}

$this->emit('\OC\User', 'preCreateUser', array($uid, $password));
foreach ($this->backends as $backend) {
if ($backend->implementsActions(Backend::CREATE_USER)) {
$backend->createUser($uid, $password);
$user = $this->getUserObject($uid, $backend);
$this->emit('\OC\User', 'postCreateUser', array($user, $password));
return $user;
}
}

return false;
}

/**
* @param string $uid
* @param string $password
* @param UserInterface $backend
* @return IUser|null
*/
public function createUserFromBackend($uid, $password, UserInterface $backend) {
$this->emit('\OC\User', 'preCreateUser', [$uid, $password]);
$backend->createUser($uid, $password);
$user = $this->getUserObject($uid, $backend);

+ 2
- 1
lib/public/IUserManager.php View File

@@ -123,7 +123,7 @@ interface IUserManager {
/**
* @param string $uid
* @param string $password
* @throws \Exception
* @throws \InvalidArgumentException
* @return bool|\OCP\IUser the created user of false
* @since 8.0.0
*/
@@ -134,6 +134,7 @@ interface IUserManager {
* @param string $password
* @param UserInterface $backend
* @return IUser|null
* @throws \InvalidArgumentException
* @since 12.0.0
*/
public function createUserFromBackend($uid, $password, UserInterface $backend);

+ 11
- 5
tests/lib/User/ManagerTest.php View File

@@ -291,10 +291,18 @@ class ManagerTest extends TestCase {
* @dataProvider dataCreateUserInvalid
*/
public function testCreateUserInvalid($uid, $password, $exception) {
/** @var \Test\Util\User\Dummy|\PHPUnit_Framework_MockObject_MockObject $backend */
$backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('implementsActions')
->with(\OC\User\Backend::CREATE_USER)
->willReturn(true);

$this->setExpectedException(\Exception::class, $exception);

$manager = new \OC\User\Manager($this->config);
$manager->registerBackend($backend);

$this->setExpectedException(\InvalidArgumentException::class, $exception);
$manager->createUser($uid, $password);

}
@@ -362,10 +370,8 @@ class ManagerTest extends TestCase {
$backend->expects($this->never())
->method('createUser');

$backend->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
->will($this->returnValue(false));
$backend->expects($this->never())
->method('userExists');

$manager = new \OC\User\Manager($this->config);
$manager->registerBackend($backend);

Loading…
Cancel
Save