Moved validation to services
This commit is contained in:
parent
cb82416f27
commit
c83c609b51
5 changed files with 60 additions and 7 deletions
|
@ -5,3 +5,8 @@ name = booru-dev
|
|||
|
||||
[security]
|
||||
secret = change
|
||||
minPasswordLength = 5
|
||||
|
||||
[users]
|
||||
minUserNameLength = 1
|
||||
maxUserNameLength = 32
|
||||
|
|
|
@ -4,15 +4,20 @@ namespace Szurubooru\Controllers;
|
|||
final class AuthController extends AbstractController
|
||||
{
|
||||
private $authService;
|
||||
private $userService;
|
||||
private $passwordService;
|
||||
private $inputReader;
|
||||
|
||||
public function __construct(
|
||||
\Szurubooru\Services\AuthService $authService,
|
||||
\Szurubooru\Services\UserService $userService,
|
||||
\Szurubooru\Services\PasswordService $passwordService,
|
||||
\Szurubooru\Helpers\InputReader $inputReader)
|
||||
{
|
||||
$this->authService = $authService;
|
||||
$this->userService = $userService;
|
||||
$this->passwordService = $passwordService;
|
||||
$this->inputReader = $inputReader;
|
||||
|
||||
}
|
||||
|
||||
public function registerRoutes(\Szurubooru\Router $router)
|
||||
|
@ -25,10 +30,8 @@ final class AuthController extends AbstractController
|
|||
{
|
||||
if (isset($this->inputReader->userName) and isset($this->inputReader->password))
|
||||
{
|
||||
if (!$this->inputReader->userName)
|
||||
throw new \DomainException('User name cannot be empty.');
|
||||
else if (!$this->inputReader->password)
|
||||
throw new \DomainException('Password cannot be empty.');
|
||||
$this->userService->validateUserName($this->inputReader->userName);
|
||||
$this->passwordService->validatePassword($this->inputReader->password);
|
||||
|
||||
$this->authService->loginFromCredentials($this->inputReader->userName, $this->inputReader->password);
|
||||
}
|
||||
|
|
|
@ -4,10 +4,17 @@ namespace Szurubooru\Controllers;
|
|||
final class UserController extends AbstractController
|
||||
{
|
||||
private $userService;
|
||||
private $passwordService;
|
||||
private $inputReader;
|
||||
|
||||
public function __construct(\Szurubooru\Services\UserService $userService)
|
||||
public function __construct(
|
||||
\Szurubooru\Services\UserService $userService,
|
||||
\Szurubooru\Services\PasswordService $passwordService,
|
||||
\Szurubooru\Helpers\InputReader $inputReader)
|
||||
{
|
||||
$this->inputReader = $inputReader;
|
||||
$this->userService = $userService;
|
||||
$this->passwordService = $passwordService;
|
||||
}
|
||||
|
||||
public function registerRoutes(\Szurubooru\Router $router)
|
||||
|
@ -21,6 +28,9 @@ final class UserController extends AbstractController
|
|||
|
||||
public function create()
|
||||
{
|
||||
$this->userService->validateUserName($this->inputReader->userName);
|
||||
$this->passwordService->validatePassword($this->inputReader->password);
|
||||
|
||||
throw new \BadMethodCallException('Not implemented');
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,24 @@ class PasswordService
|
|||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function validatePassword($password)
|
||||
{
|
||||
if (!$password)
|
||||
throw new \DomainException('Password cannot be empty.');
|
||||
|
||||
$minPasswordLength = intval($this->config->security->minPasswordLength);
|
||||
if (strlen($password) < $minPasswordLength)
|
||||
throw new \DomainException('Password must have at least ' . $minPasswordLength . ' character(s).');
|
||||
|
||||
if (preg_match('/[^\x20-\x7f]/', $password))
|
||||
{
|
||||
throw new \DomainException(
|
||||
'Password should contain only characters from ASCII range to avoid potential problems with encoding.');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getHash($password)
|
||||
{
|
||||
return hash('sha256', $this->config->security->secret . '/' . $password);
|
||||
|
|
|
@ -4,10 +4,14 @@ namespace Szurubooru\Services;
|
|||
class UserService
|
||||
{
|
||||
private $userDao;
|
||||
private $config;
|
||||
|
||||
public function __construct(\Szurubooru\Dao\UserDao $userDao)
|
||||
public function __construct(
|
||||
\Szurubooru\Dao\UserDao $userDao,
|
||||
\Szurubooru\Config $config)
|
||||
{
|
||||
$this->userDao = $userDao;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function getById($userId)
|
||||
|
@ -25,6 +29,19 @@ class UserService
|
|||
return $this->userDao->save($user);
|
||||
}
|
||||
|
||||
public function validateUserName($userName)
|
||||
{
|
||||
if (!$userName)
|
||||
throw new \DomainException('User name cannot be empty.');
|
||||
|
||||
$minUserNameLength = intval($this->config->users->minUserNameLength);
|
||||
$maxUserNameLength = intval($this->config->users->maxserNameLength);
|
||||
if (strlen($userName) < $minUserNameLength)
|
||||
throw new \DomainException('User name must have at least ' . $minUserNameLength . ' character(s).');
|
||||
if (strlen($userName) < $maxUserNameLength)
|
||||
throw new \DomainException('User name must have at most ' . $minUserNameLength . ' character(s).');
|
||||
}
|
||||
|
||||
public function getAnonymousUser()
|
||||
{
|
||||
$user = new \Szurubooru\Entities\User();
|
||||
|
|
Loading…
Reference in a new issue