Moved user controller to routes
This commit is contained in:
parent
06cc776438
commit
969f70318b
12 changed files with 430 additions and 177 deletions
|
@ -1,176 +0,0 @@
|
||||||
<?php
|
|
||||||
namespace Szurubooru\Controllers;
|
|
||||||
use Szurubooru\Config;
|
|
||||||
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
|
||||||
use Szurubooru\FormData\RegistrationFormData;
|
|
||||||
use Szurubooru\FormData\UserEditFormData;
|
|
||||||
use Szurubooru\Helpers\InputReader;
|
|
||||||
use Szurubooru\Privilege;
|
|
||||||
use Szurubooru\Router;
|
|
||||||
use Szurubooru\SearchServices\Parsers\UserSearchParser;
|
|
||||||
use Szurubooru\Services\PrivilegeService;
|
|
||||||
use Szurubooru\Services\TokenService;
|
|
||||||
use Szurubooru\Services\UserService;
|
|
||||||
|
|
||||||
final class UserController extends AbstractController
|
|
||||||
{
|
|
||||||
private $config;
|
|
||||||
private $privilegeService;
|
|
||||||
private $userService;
|
|
||||||
private $tokenService;
|
|
||||||
private $userSearchParser;
|
|
||||||
private $inputReader;
|
|
||||||
private $userViewProxy;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
Config $config,
|
|
||||||
PrivilegeService $privilegeService,
|
|
||||||
UserService $userService,
|
|
||||||
TokenService $tokenService,
|
|
||||||
UserSearchParser $userSearchParser,
|
|
||||||
InputReader $inputReader,
|
|
||||||
UserViewProxy $userViewProxy)
|
|
||||||
{
|
|
||||||
$this->config = $config;
|
|
||||||
$this->privilegeService = $privilegeService;
|
|
||||||
$this->userService = $userService;
|
|
||||||
$this->tokenService = $tokenService;
|
|
||||||
$this->userSearchParser = $userSearchParser;
|
|
||||||
$this->inputReader = $inputReader;
|
|
||||||
$this->userViewProxy = $userViewProxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerRoutes(Router $router)
|
|
||||||
{
|
|
||||||
$router->post('/api/users', [$this, 'createUser']);
|
|
||||||
$router->get('/api/users', [$this, 'getFiltered']);
|
|
||||||
$router->get('/api/users/:userNameOrEmail', [$this, 'getByNameOrEmail']);
|
|
||||||
$router->put('/api/users/:userNameOrEmail', [$this, 'updateUser']);
|
|
||||||
$router->delete('/api/users/:userNameOrEmail', [$this, 'deleteUser']);
|
|
||||||
$router->post('/api/password-reset/:userNameOrEmail', [$this, 'passwordReset']);
|
|
||||||
$router->post('/api/finish-password-reset/:tokenName', [$this, 'finishPasswordReset']);
|
|
||||||
$router->post('/api/activation/:userNameOrEmail', [$this, 'activation']);
|
|
||||||
$router->post('/api/finish-activation/:tokenName', [$this, 'finishActivation']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getByNameOrEmail($userNameOrEmail)
|
|
||||||
{
|
|
||||||
if (!$this->privilegeService->isLoggedIn($userNameOrEmail))
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::VIEW_USERS);
|
|
||||||
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
|
||||||
return $this->userViewProxy->fromEntity($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFiltered()
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::LIST_USERS);
|
|
||||||
|
|
||||||
$filter = $this->userSearchParser->createFilterFromInputReader($this->inputReader);
|
|
||||||
$filter->setPageSize($this->config->users->usersPerPage);
|
|
||||||
$result = $this->userService->getFiltered($filter);
|
|
||||||
$entities = $this->userViewProxy->fromArray($result->getEntities());
|
|
||||||
return [
|
|
||||||
'data' => $entities,
|
|
||||||
'pageSize' => $result->getPageSize(),
|
|
||||||
'totalRecords' => $result->getTotalRecords()];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function createUser()
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::REGISTER);
|
|
||||||
$formData = new RegistrationFormData($this->inputReader);
|
|
||||||
$user = $this->userService->createUser($formData);
|
|
||||||
return $this->userViewProxy->fromEntity($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function updateUser($userNameOrEmail)
|
|
||||||
{
|
|
||||||
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
|
||||||
$formData = new UserEditFormData($this->inputReader);
|
|
||||||
|
|
||||||
if ($formData->avatarStyle !== null || $formData->avatarContent !== null)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(
|
|
||||||
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
|
||||||
? Privilege::CHANGE_OWN_AVATAR_STYLE
|
|
||||||
: Privilege::CHANGE_ALL_AVATAR_STYLES);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->userName !== null)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(
|
|
||||||
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
|
||||||
? Privilege::CHANGE_OWN_NAME
|
|
||||||
: Privilege::CHANGE_ALL_NAMES);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->password !== null)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(
|
|
||||||
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
|
||||||
? Privilege::CHANGE_OWN_PASSWORD
|
|
||||||
: Privilege::CHANGE_ALL_PASSWORDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->email !== null)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(
|
|
||||||
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
|
||||||
? Privilege::CHANGE_OWN_EMAIL_ADDRESS
|
|
||||||
: Privilege::CHANGE_ALL_EMAIL_ADDRESSES);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->accessRank)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_ACCESS_RANK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->browsingSettings)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertLoggedIn($userNameOrEmail);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($formData->banned !== null)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::BAN_USERS);
|
|
||||||
}
|
|
||||||
|
|
||||||
$user = $this->userService->updateUser($user, $formData);
|
|
||||||
return $this->userViewProxy->fromEntity($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteUser($userNameOrEmail)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(
|
|
||||||
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
|
||||||
? Privilege::DELETE_OWN_ACCOUNT
|
|
||||||
: Privilege::DELETE_ACCOUNTS);
|
|
||||||
|
|
||||||
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
|
||||||
return $this->userService->deleteUser($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function passwordReset($userNameOrEmail)
|
|
||||||
{
|
|
||||||
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
|
||||||
return $this->userService->sendPasswordResetEmail($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function activation($userNameOrEmail)
|
|
||||||
{
|
|
||||||
$user = $this->userService->getByNameOrEmail($userNameOrEmail, true);
|
|
||||||
return $this->userService->sendActivationEmail($user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function finishPasswordReset($tokenName)
|
|
||||||
{
|
|
||||||
$token = $this->tokenService->getByName($tokenName);
|
|
||||||
return ['newPassword' => $this->userService->finishPasswordReset($token)];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function finishActivation($tokenName)
|
|
||||||
{
|
|
||||||
$token = $this->tokenService->getByName($tokenName);
|
|
||||||
$this->userService->finishActivation($token);
|
|
||||||
}
|
|
||||||
}
|
|
7
src/Routes/Users/AbstractUserRoute.php
Normal file
7
src/Routes/Users/AbstractUserRoute.php
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Routes\AbstractRoute;
|
||||||
|
|
||||||
|
abstract class AbstractUserRoute extends AbstractRoute
|
||||||
|
{
|
||||||
|
}
|
29
src/Routes/Users/ActivateAccount.php
Normal file
29
src/Routes/Users/ActivateAccount.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class ActivateAccount extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $userService;
|
||||||
|
|
||||||
|
public function __construct(UserService $userService)
|
||||||
|
{
|
||||||
|
$this->userService = $userService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST', 'PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/activation/:userNameOrEmail';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$user = $this->userService->getByNameOrEmail($this->getArgument('userNameOrEmail'), true);
|
||||||
|
return $this->userService->sendActivationEmail($user);
|
||||||
|
}
|
||||||
|
}
|
46
src/Routes/Users/CreateUser.php
Normal file
46
src/Routes/Users/CreateUser.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
||||||
|
use Szurubooru\FormData\RegistrationFormData;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class CreateUser extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $userService;
|
||||||
|
private $inputReader;
|
||||||
|
private $userViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
UserService $userService,
|
||||||
|
InputReader $inputReader,
|
||||||
|
UserViewProxy $userViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/users';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::REGISTER);
|
||||||
|
$formData = new RegistrationFormData($this->inputReader);
|
||||||
|
$user = $this->userService->createUser($formData);
|
||||||
|
return $this->userViewProxy->fromEntity($user);
|
||||||
|
}
|
||||||
|
}
|
43
src/Routes/Users/DeleteUser.php
Normal file
43
src/Routes/Users/DeleteUser.php
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class DeleteUser extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $userService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
UserService $userService)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->userService = $userService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['DELETE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/users/:userNameOrEmail';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$userNameOrEmail = $this->getArgument('userNameOrEmail');
|
||||||
|
|
||||||
|
$this->privilegeService->assertPrivilege(
|
||||||
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
||||||
|
? Privilege::DELETE_OWN_ACCOUNT
|
||||||
|
: Privilege::DELETE_ALL_ACCOUNTS);
|
||||||
|
|
||||||
|
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
||||||
|
return $this->userService->deleteUser($user);
|
||||||
|
}
|
||||||
|
}
|
34
src/Routes/Users/FinishActivation.php
Normal file
34
src/Routes/Users/FinishActivation.php
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Services\TokenService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class FinishActivation extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $userService;
|
||||||
|
private $tokenService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
UserService $userService,
|
||||||
|
TokenService $tokenService)
|
||||||
|
{
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->tokenService = $tokenService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST', 'PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/finish-activation/:tokenName';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$token = $this->tokenService->getByName($this->getArgument('tokenName'));
|
||||||
|
$this->userService->finishActivation($token);
|
||||||
|
}
|
||||||
|
}
|
34
src/Routes/Users/FinishPasswordReset.php
Normal file
34
src/Routes/Users/FinishPasswordReset.php
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Services\TokenService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class FinishPasswordReset extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $userService;
|
||||||
|
private $tokenService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
UserService $userService,
|
||||||
|
TokenService $tokenService)
|
||||||
|
{
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->tokenService = $tokenService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST', 'PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/finish-password-reset/:tokenName';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$token = $this->tokenService->getByName($this->getArgument('tokenName'));
|
||||||
|
return ['newPassword' => $this->userService->finishPasswordReset($token)];
|
||||||
|
}
|
||||||
|
}
|
46
src/Routes/Users/GetUser.php
Normal file
46
src/Routes/Users/GetUser.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\SearchServices\Parsers\UserSearchParser;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class GetUser extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $userService;
|
||||||
|
private $userSearchParser;
|
||||||
|
private $userViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
UserService $userService,
|
||||||
|
UserSearchParser $userSearchParser,
|
||||||
|
UserViewProxy $userViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->userSearchParser = $userSearchParser;
|
||||||
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/users/:userNameOrEmail';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$userNameOrEmail = $this->getArgument('userNameOrEmail');
|
||||||
|
if (!$this->privilegeService->isLoggedIn($userNameOrEmail))
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::VIEW_USERS);
|
||||||
|
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
||||||
|
return $this->userViewProxy->fromEntity($user);
|
||||||
|
}
|
||||||
|
}
|
59
src/Routes/Users/GetUsers.php
Normal file
59
src/Routes/Users/GetUsers.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Config;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\SearchServices\Parsers\UserSearchParser;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class GetUsers extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $config;
|
||||||
|
private $privilegeService;
|
||||||
|
private $userService;
|
||||||
|
private $userSearchParser;
|
||||||
|
private $inputReader;
|
||||||
|
private $userViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
Config $config,
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
UserService $userService,
|
||||||
|
UserSearchParser $userSearchParser,
|
||||||
|
InputReader $inputReader,
|
||||||
|
UserViewProxy $userViewProxy)
|
||||||
|
{
|
||||||
|
$this->config = $config;
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->userSearchParser = $userSearchParser;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/users';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::LIST_USERS);
|
||||||
|
|
||||||
|
$filter = $this->userSearchParser->createFilterFromInputReader($this->inputReader);
|
||||||
|
$filter->setPageSize($this->config->users->usersPerPage);
|
||||||
|
$result = $this->userService->getFiltered($filter);
|
||||||
|
$entities = $this->userViewProxy->fromArray($result->getEntities());
|
||||||
|
return [
|
||||||
|
'data' => $entities,
|
||||||
|
'pageSize' => $result->getPageSize(),
|
||||||
|
'totalRecords' => $result->getTotalRecords()];
|
||||||
|
}
|
||||||
|
}
|
27
src/Routes/Users/PasswordReset.php
Normal file
27
src/Routes/Users/PasswordReset.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class PasswordReset extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
public function __construct(UserService $userService)
|
||||||
|
{
|
||||||
|
$this->userService = $userService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST', 'PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/password-reset/:userNameOrEmail';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$user = $this->userService->getByNameOrEmail($this->getArgument('userNameOrEmail'));
|
||||||
|
return $this->userService->sendPasswordResetEmail($user);
|
||||||
|
}
|
||||||
|
}
|
96
src/Routes/Users/UpdateUser.php
Normal file
96
src/Routes/Users/UpdateUser.php
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Users;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
||||||
|
use Szurubooru\FormData\UserEditFormData;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\UserService;
|
||||||
|
|
||||||
|
class UpdateUser extends AbstractUserRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $userService;
|
||||||
|
private $inputReader;
|
||||||
|
private $userViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
UserService $userService,
|
||||||
|
InputReader $inputReader,
|
||||||
|
UserViewProxy $userViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->userService = $userService;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/users/:userNameOrEmail';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$userNameOrEmail = $this->getArgument('userNameOrEmail');
|
||||||
|
|
||||||
|
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
||||||
|
$formData = new UserEditFormData($this->inputReader);
|
||||||
|
|
||||||
|
if ($formData->avatarStyle !== null || $formData->avatarContent !== null)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(
|
||||||
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
||||||
|
? Privilege::CHANGE_OWN_AVATAR_STYLE
|
||||||
|
: Privilege::CHANGE_ALL_AVATAR_STYLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->userName !== null)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(
|
||||||
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
||||||
|
? Privilege::CHANGE_OWN_NAME
|
||||||
|
: Privilege::CHANGE_ALL_NAMES);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->password !== null)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(
|
||||||
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
||||||
|
? Privilege::CHANGE_OWN_PASSWORD
|
||||||
|
: Privilege::CHANGE_ALL_PASSWORDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->email !== null)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(
|
||||||
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
||||||
|
? Privilege::CHANGE_OWN_EMAIL_ADDRESS
|
||||||
|
: Privilege::CHANGE_ALL_EMAIL_ADDRESSES);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->accessRank)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_ACCESS_RANK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->browsingSettings)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertLoggedIn($userNameOrEmail);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($formData->banned !== null)
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::BAN_USERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $this->userService->updateUser($user, $formData);
|
||||||
|
return $this->userViewProxy->fromEntity($user);
|
||||||
|
}
|
||||||
|
}
|
10
src/di.php
10
src/di.php
|
@ -57,7 +57,6 @@ return [
|
||||||
|
|
||||||
'controllers' => DI\factory(function (DI\container $container) {
|
'controllers' => DI\factory(function (DI\container $container) {
|
||||||
return [
|
return [
|
||||||
$container->get(\Szurubooru\Controllers\UserController::class),
|
|
||||||
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
||||||
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
||||||
];
|
];
|
||||||
|
@ -95,6 +94,15 @@ return [
|
||||||
$container->get(\Szurubooru\Routes\Tags\GetTags::class),
|
$container->get(\Szurubooru\Routes\Tags\GetTags::class),
|
||||||
$container->get(\Szurubooru\Routes\Tags\MergeTags::class),
|
$container->get(\Szurubooru\Routes\Tags\MergeTags::class),
|
||||||
$container->get(\Szurubooru\Routes\Tags\UpdateTag::class),
|
$container->get(\Szurubooru\Routes\Tags\UpdateTag::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\ActivateAccount::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\CreateUser::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\DeleteUser::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\FinishActivation::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\FinishPasswordReset::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\GetUser::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\GetUsers::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\PasswordReset::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Users\UpdateUser::class),
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue