partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit c91eec05c0f63feb4c2e55db9322901d205b5606
parent 37630d8e86401d994c025798bc007afe0af83470
Author: Felicitus <felicitus@felicitus.org>
Date:   Wed,  9 Dec 2015 17:08:06 +0100

Implemented user protection, which allows an administrator to protect a given user against changes

Diffstat:
Msrc/PartKeepr/AuthBundle/Command/ProtectUserCommand.php | 13+++++++++++--
Msrc/PartKeepr/AuthBundle/Command/UnprotectUserCommand.php | 13+++++++++++--
Msrc/PartKeepr/AuthBundle/Entity/User.php | 6+++---
Msrc/PartKeepr/AuthBundle/Tests/UserTest.php | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
4 files changed, 85 insertions(+), 15 deletions(-)

diff --git a/src/PartKeepr/AuthBundle/Command/ProtectUserCommand.php b/src/PartKeepr/AuthBundle/Command/ProtectUserCommand.php @@ -22,8 +22,17 @@ class ProtectUserCommand extends ContainerAwareCommand { $userService = $this->getContainer()->get("partkeepr.userservice"); - $user = $userService->getProxyUser($input->getArgument("username"), $userService->getBuiltinProvider()); - $userService->protect($user); + $fosUser = $this->getContainer()->get("fos_user.user_manager")->findUserByUsername( + $input->getArgument("username") + ); + + if ($fosUser === null) { + $output->writeln(sprintf("User %s not found", $input->getArgument("username"))); + } else { + $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true); + $userService->protect($user); + $output->writeln(sprintf("User %s protected against changes", $input->getArgument("username"))); + } } } diff --git a/src/PartKeepr/AuthBundle/Command/UnprotectUserCommand.php b/src/PartKeepr/AuthBundle/Command/UnprotectUserCommand.php @@ -22,8 +22,17 @@ class UnprotectUserCommand extends ContainerAwareCommand { $userService = $this->getContainer()->get("partkeepr.userservice"); - $user = $userService->getProxyUser($input->getArgument("username"), $userService->getBuiltinProvider()); - $userService->unprotect($user); + $fosUser = $this->getContainer()->get("fos_user.user_manager")->findUserByUsername( + $input->getArgument("username") + ); + + if ($fosUser === null) { + $output->writeln(sprintf("User %s not found", $input->getArgument("username"))); + } else { + $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true); + $userService->unprotect($user); + $output->writeln(sprintf("User %s unprotected against changes", $input->getArgument("username"))); + } } } diff --git a/src/PartKeepr/AuthBundle/Entity/User.php b/src/PartKeepr/AuthBundle/Entity/User.php @@ -137,15 +137,15 @@ class User extends BaseEntity implements UserInterface, EquatableInterface } /** - * @return mixed + * @return boolean */ - public function getProtected() + public function isProtected() { return $this->protected; } /** - * @param mixed $protected + * @param boolean $protected */ public function setProtected($protected) { diff --git a/src/PartKeepr/AuthBundle/Tests/UserTest.php b/src/PartKeepr/AuthBundle/Tests/UserTest.php @@ -2,22 +2,34 @@ namespace PartKeepr\AuthBundle\Tests; +use Doctrine\Common\DataFixtures\ProxyReferenceRepository; +use PartKeepr\AuthBundle\Entity\FOSUser; use PartKeepr\AuthBundle\Entity\User; use PartKeepr\CoreBundle\Tests\WebTestCase; class UserTest extends WebTestCase { + /** + * @var ProxyReferenceRepository + */ + protected $fixtures; + public function setUp() { - $this->loadFixtures(array()); + $this->fixtures = $this->loadFixtures( + array( + 'PartKeepr\AuthBundle\DataFixtures\LoadUserData', + ) + )->getReferenceRepository(); } - public function testCreateUser () { + public function testCreateUser() + { $client = static::makeClient(true); $data = array( "username" => "foobartest", - "newPassword" => "1234" + "newPassword" => "1234", ); $client->request("POST", "/api/users", array(), array(), array(), json_encode($data)); @@ -31,7 +43,8 @@ class UserTest extends WebTestCase $this->assertFalse($response->{"legacy"}); } - public function testChangeUserPassword () { + public function testChangeUserPassword() + { $builtinProvider = $this->getContainer()->get("partkeepr.userservice")->getBuiltinProvider(); $user = new User("bernd"); @@ -63,7 +76,8 @@ class UserTest extends WebTestCase $this->assertFalse($response->{"legacy"}); } - public function testSelfChangeUserPassword () { + public function testSelfChangeUserPassword() + { $builtinProvider = $this->getContainer()->get("partkeepr.userservice")->getBuiltinProvider(); $user = new User("bernd2"); @@ -76,7 +90,7 @@ class UserTest extends WebTestCase $client = static::makeClient(false, array( 'PHP_AUTH_USER' => "bernd2", - 'PHP_AUTH_PW' => "admin" + 'PHP_AUTH_PW' => "admin", ) ); @@ -85,7 +99,7 @@ class UserTest extends WebTestCase $parameters = array( "oldpassword" => "admin", - "newpassword" => "foobar" + "newpassword" => "foobar", ); $client->request("PUT", $iri, $parameters); @@ -99,7 +113,7 @@ class UserTest extends WebTestCase $client = static::makeClient(false, array( 'PHP_AUTH_USER' => "bernd2", - 'PHP_AUTH_PW' => "foobar" + 'PHP_AUTH_PW' => "foobar", ) ); @@ -111,4 +125,42 @@ class UserTest extends WebTestCase $this->assertObjectHasAttribute("@type", $response); $this->assertEquals("Error", $response->{"@type"}); } + + public function testUserProtect() + { + /** + * @var FOSUser $fosUser + */ + $fosUser = $this->fixtures->getReference("user.admin"); + $userService = $this->getContainer()->get("partkeepr.userservice"); + + + $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true); + + /** + * @var User $user + */ + $userService->protect($user); + + $this->assertTrue($user->isProtected()); + } + + public function testUserUnprotect() + { + /** + * @var FOSUser $fosUser + */ + $fosUser = $this->fixtures->getReference("user.admin"); + $userService = $this->getContainer()->get("partkeepr.userservice"); + + + $user = $userService->getProxyUser($fosUser->getUsername(), $userService->getBuiltinProvider(), true); + + /** + * @var User $user + */ + $userService->unprotect($user); + + $this->assertFalse($user->isProtected()); + } }