2014-08-31 13:34:31 +02:00
|
|
|
<?php
|
|
|
|
namespace Szurubooru\Controllers;
|
|
|
|
|
|
|
|
final class UserController extends AbstractController
|
|
|
|
{
|
2014-09-06 10:00:26 +02:00
|
|
|
private $privilegeService;
|
2014-08-31 17:42:48 +02:00
|
|
|
private $userService;
|
2014-09-09 19:38:16 +02:00
|
|
|
private $tokenService;
|
2014-09-04 19:57:06 +02:00
|
|
|
private $inputReader;
|
2014-09-05 19:18:49 +02:00
|
|
|
private $userViewProxy;
|
2014-08-31 13:34:31 +02:00
|
|
|
|
2014-08-31 14:07:46 +02:00
|
|
|
public function __construct(
|
2014-09-06 10:00:26 +02:00
|
|
|
\Szurubooru\Services\PrivilegeService $privilegeService,
|
2014-08-31 14:07:46 +02:00
|
|
|
\Szurubooru\Services\UserService $userService,
|
2014-09-09 19:38:16 +02:00
|
|
|
\Szurubooru\Services\TokenService $tokenService,
|
2014-09-05 19:18:49 +02:00
|
|
|
\Szurubooru\Helpers\InputReader $inputReader,
|
|
|
|
\Szurubooru\Controllers\ViewProxies\UserViewProxy $userViewProxy)
|
2014-08-31 13:34:31 +02:00
|
|
|
{
|
2014-09-06 10:00:26 +02:00
|
|
|
$this->privilegeService = $privilegeService;
|
2014-08-31 13:34:31 +02:00
|
|
|
$this->userService = $userService;
|
2014-09-09 19:38:16 +02:00
|
|
|
$this->tokenService = $tokenService;
|
2014-09-04 19:57:06 +02:00
|
|
|
$this->inputReader = $inputReader;
|
2014-09-05 19:18:49 +02:00
|
|
|
$this->userViewProxy = $userViewProxy;
|
2014-08-31 13:34:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function registerRoutes(\Szurubooru\Router $router)
|
|
|
|
{
|
2014-09-07 00:33:46 +02:00
|
|
|
$router->post('/api/users', [$this, 'createUser']);
|
2014-09-03 19:07:53 +02:00
|
|
|
$router->get('/api/users', [$this, 'getFiltered']);
|
2014-09-08 13:06:32 +02:00
|
|
|
$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']);
|
2014-08-31 13:34:31 +02:00
|
|
|
}
|
|
|
|
|
2014-09-08 13:06:32 +02:00
|
|
|
public function getByNameOrEmail($userNameOrEmail)
|
2014-09-05 13:50:51 +02:00
|
|
|
{
|
2014-09-08 13:06:32 +02:00
|
|
|
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
2014-09-05 19:18:49 +02:00
|
|
|
return $this->userViewProxy->fromEntity($user);
|
2014-09-05 13:50:51 +02:00
|
|
|
}
|
|
|
|
|
2014-09-03 19:07:53 +02:00
|
|
|
public function getFiltered()
|
|
|
|
{
|
2014-09-06 17:54:02 +02:00
|
|
|
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::LIST_USERS);
|
2014-09-04 19:57:06 +02:00
|
|
|
|
2014-09-07 00:33:46 +02:00
|
|
|
$formData = new \Szurubooru\FormData\SearchFormData($this->inputReader);
|
|
|
|
$searchResult = $this->userService->getFiltered($formData);
|
2014-09-05 19:18:49 +02:00
|
|
|
$entities = $this->userViewProxy->fromArray($searchResult->entities);
|
2014-09-03 19:07:53 +02:00
|
|
|
return [
|
|
|
|
'data' => $entities,
|
|
|
|
'pageSize' => $searchResult->filter->pageSize,
|
|
|
|
'totalRecords' => $searchResult->totalRecords];
|
|
|
|
}
|
|
|
|
|
2014-09-07 00:33:46 +02:00
|
|
|
public function createUser()
|
2014-08-31 13:34:31 +02:00
|
|
|
{
|
2014-09-06 17:54:02 +02:00
|
|
|
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::REGISTER);
|
2014-09-07 00:33:46 +02:00
|
|
|
$formData = new \Szurubooru\FormData\RegistrationFormData($this->inputReader);
|
|
|
|
$user = $this->userService->createUser($formData);
|
2014-09-09 12:34:57 +02:00
|
|
|
return array_merge((array) $this->userViewProxy->fromEntity($user), ['confirmed' => !$user->emailUnconfirmed]);
|
2014-08-31 13:34:31 +02:00
|
|
|
}
|
|
|
|
|
2014-09-08 13:06:32 +02:00
|
|
|
public function updateUser($userNameOrEmail)
|
2014-08-31 13:34:31 +02:00
|
|
|
{
|
2014-09-08 13:06:32 +02:00
|
|
|
$user = $this->userService->getByNameOrEmail($userNameOrEmail);
|
2014-09-07 00:33:46 +02:00
|
|
|
$formData = new \Szurubooru\FormData\UserEditFormData($this->inputReader);
|
|
|
|
|
|
|
|
if ($formData->avatarStyle !== null)
|
|
|
|
{
|
|
|
|
$this->privilegeService->assertPrivilege(
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
2014-09-07 00:33:46 +02:00
|
|
|
? \Szurubooru\Privilege::CHANGE_OWN_AVATAR_STYLE
|
|
|
|
: \Szurubooru\Privilege::CHANGE_ALL_AVATAR_STYLES);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($formData->userName !== null)
|
|
|
|
{
|
|
|
|
$this->privilegeService->assertPrivilege(
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
2014-09-07 00:33:46 +02:00
|
|
|
? \Szurubooru\Privilege::CHANGE_OWN_NAME
|
|
|
|
: \Szurubooru\Privilege::CHANGE_ALL_NAMES);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($formData->password !== null)
|
|
|
|
{
|
|
|
|
$this->privilegeService->assertPrivilege(
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
2014-09-07 00:33:46 +02:00
|
|
|
? \Szurubooru\Privilege::CHANGE_OWN_PASSWORD
|
|
|
|
: \Szurubooru\Privilege::CHANGE_ALL_PASSWORDS);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($formData->email !== null)
|
|
|
|
{
|
|
|
|
$this->privilegeService->assertPrivilege(
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
2014-09-07 00:33:46 +02:00
|
|
|
? \Szurubooru\Privilege::CHANGE_OWN_EMAIL_ADDRESS
|
|
|
|
: \Szurubooru\Privilege::CHANGE_ALL_EMAIL_ADDRESSES);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($formData->accessRank)
|
|
|
|
{
|
|
|
|
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::CHANGE_ACCESS_RANK);
|
|
|
|
}
|
|
|
|
|
2014-09-07 14:50:16 +02:00
|
|
|
if ($formData->browsingSettings)
|
|
|
|
{
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->assertLoggedIn($userNameOrEmail);
|
2014-09-07 14:50:16 +02:00
|
|
|
}
|
|
|
|
|
2014-09-08 13:06:32 +02:00
|
|
|
$user = $this->userService->updateUser($user, $formData);
|
2014-09-07 00:33:46 +02:00
|
|
|
return $this->userViewProxy->fromEntity($user);
|
2014-08-31 13:34:31 +02:00
|
|
|
}
|
|
|
|
|
2014-09-08 13:06:32 +02:00
|
|
|
public function deleteUser($userNameOrEmail)
|
2014-08-31 13:34:31 +02:00
|
|
|
{
|
2014-09-06 10:00:26 +02:00
|
|
|
$this->privilegeService->assertPrivilege(
|
2014-09-08 13:06:32 +02:00
|
|
|
$this->privilegeService->isLoggedIn($userNameOrEmail)
|
2014-09-06 17:54:02 +02:00
|
|
|
? \Szurubooru\Privilege::DELETE_OWN_ACCOUNT
|
|
|
|
: \Szurubooru\Privilege::DELETE_ACCOUNTS);
|
2014-09-06 10:00:26 +02:00
|
|
|
|
2014-09-08 13:06:32 +02:00
|
|
|
$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)
|
|
|
|
{
|
2014-09-09 19:38:16 +02:00
|
|
|
$token = $this->tokenService->getByName($tokenName);
|
|
|
|
return ['newPassword' => $this->userService->finishPasswordReset($token)];
|
2014-09-08 13:06:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function finishActivation($tokenName)
|
|
|
|
{
|
2014-09-09 19:38:16 +02:00
|
|
|
$token = $this->tokenService->getByName($tokenName);
|
|
|
|
$this->userService->finishActivation($token);
|
2014-08-31 13:34:31 +02:00
|
|
|
}
|
|
|
|
}
|