Skip to content

Commit

Permalink
Improvements, Fixes and Coding Standards
Browse files Browse the repository at this point in the history
- fixed all files with new php-cs-fixer config
- added setting `common.user.fields` instead of `common.user_mapping_fields`
- added setting `common.user.class`
- doctrine's target entities are resolved in DI (no need to do it manually in the neon config)
- added english and czech translations for `ForgotPassword` Components
- added interface `ITranslatableService`, implementors `NullTranslator` and `PrefixedTranslator` and trait `TTranslatableService`
- added exception `ConfigurationException`
- fixed catching of `DBALException` in method `PasswordRequestManager::findRequest()`
  • Loading branch information
tg666 committed Nov 30, 2020
1 parent 4a4f01a commit 080b0e6
Show file tree
Hide file tree
Showing 66 changed files with 606 additions and 212 deletions.
77 changes: 68 additions & 9 deletions src/Common/DI/CommonExtensionAdapter.php
Expand Up @@ -4,36 +4,55 @@

namespace SixtyEightPublishers\User\Common\DI;

use Kdyby;
use Nette;
use SixtyEightPublishers;

final class CommonExtensionAdapter extends SixtyEightPublishers\User\DI\AbstractExtensionAdapter
final class CommonExtensionAdapter extends SixtyEightPublishers\User\DI\AbstractExtensionAdapter implements Kdyby\Doctrine\DI\ITargetEntityProvider
{
const SHARED_DATA_USER_CLASS_NAME = 'common.user_class_name';

/** @var array */
protected static $defaults = [
'user' => [
'class' => '',
'fields' => [],
],
'password_strategy' => SixtyEightPublishers\User\Common\PasswordHashStrategy\DefaultPasswordHashStrategy::class,
'user_mapping_fields' => [],
'logger' => SixtyEightPublishers\User\Common\Logger\TracyLogger::class,
'mail_sender' => SixtyEightPublishers\User\Common\Mail\NullMailSender::class,
];

/**
* {@inheritdoc}
*/
protected function processConfig(array $config) : array
protected function processConfig(array $config, \ArrayObject $sharedData): array
{
Nette\Utils\Validators::assertField($config, 'user', 'array');
Nette\Utils\Validators::assertField($config['user'], 'class', 'string');
Nette\Utils\Validators::assertField($config['user'], 'fields', 'array');

Nette\Utils\Validators::assertField($config, 'password_strategy', 'string|' . Nette\DI\Statement::class);
Nette\Utils\Validators::assertField($config, 'user_mapping_fields', 'array');
Nette\Utils\Validators::assertField($config, 'logger', 'string|' . Nette\DI\Statement::class);
Nette\Utils\Validators::assertField($config, 'mail_sender', 'string|' . Nette\DI\Statement::class);

if (!is_subclass_of($config['user']['class'], SixtyEightPublishers\User\Common\DoctrineEntity\IUser::class, TRUE)) {
throw new SixtyEightPublishers\User\Common\Exception\ConfigurationException(sprintf(
'Required setting %s.user_class_name must be valid classname of your User\'s entity that implements interface %s',
$this->name,
SixtyEightPublishers\User\Common\DoctrineEntity\IUser::class
));
}

$sharedData[self::SHARED_DATA_USER_CLASS_NAME] = $config['user']['class'];

return $config;
}

/**
* {@inheritdoc}
*/
public function loadConfiguration() : void
public function loadConfiguration(): void
{
$config = $this->getConfig();
$builder = $this->getContainerBuilder();
Expand All @@ -56,7 +75,7 @@ public function loadConfiguration() : void
->setFactory($config['mail_sender']);
}

$fields = $config['user_mapping_fields'];
$fields = $config['user']['fields'];

foreach ($fields as $k => $v) {
if (defined($k)) {
Expand All @@ -65,20 +84,60 @@ public function loadConfiguration() : void
}
}

$builder->addDefinition($this->prefix('user_mapping_fields'))
->setType(SixtyEightPublishers\User\Common\UserMappingFields::class)
$builder->addDefinition($this->prefix('user_mapping'))
->setType(SixtyEightPublishers\User\Common\UserMapping::class)
->setArguments([
'className' => $config['user']['class'],
'fields' => $fields,
]);
}

/**
* {@inheritdoc}
*/
public function beforeCompile(): void
{
$builder = $this->getContainerBuilder();
$translator = $builder->getByType(Nette\Localization\ITranslator::class, FALSE);

if (NULL === $translator) {
return;
}

$translator = $builder->getDefinition($translator);

/** @var \Nette\DI\ServiceDefinition[] $translatableServices */
$translatableServices = array_filter($builder->getDefinitions(), function (Nette\DI\ServiceDefinition $def) {
return is_a($def->getImplement(), SixtyEightPublishers\User\Common\Translator\ITranslatableService::class, TRUE)
|| ($def->getImplementMode() !== $def::IMPLEMENT_MODE_GET && is_a($def->getType(), SixtyEightPublishers\User\Common\Translator\ITranslatableService::class, TRUE));
});

foreach ($translatableServices as $translatableService) {
$translatableService->addSetup('setTranslator', [
'translator' => $translator,
]);
}
}

/**
* @param mixed $what
*
* @return bool
*/
private function needRegister($what) : bool
private function needRegister($what): bool
{
return (!is_string($what) || !Nette\Utils\Strings::startsWith($what, '@'));
}

/**************** interface \Kdyby\Doctrine\DI\ITargetEntityProvider ****************/

/**
* {@inheritdoc}
*/
public function getTargetEntityMappings(): array
{
return [
SixtyEightPublishers\User\Common\DoctrineEntity\IUser::class => $this->getSharedData(self::SHARED_DATA_USER_CLASS_NAME),
];
}
}
2 changes: 1 addition & 1 deletion src/Common/DoctrineEntity/Accessor/IEmailAccessor.php
Expand Up @@ -9,5 +9,5 @@ interface IEmailAccessor
/**
* @return string
*/
public function getEmail() : string;
public function getEmail(): string;
}
2 changes: 1 addition & 1 deletion src/Common/DoctrineEntity/Accessor/ILoginAccessor.php
Expand Up @@ -9,5 +9,5 @@ interface ILoginAccessor
/**
* @return string
*/
public function getLogin() : string;
public function getLogin(): string;
}
2 changes: 1 addition & 1 deletion src/Common/DoctrineEntity/Accessor/IPasswordAccessor.php
Expand Up @@ -9,5 +9,5 @@ interface IPasswordAccessor
/**
* @return string
*/
public function getPassword() : string;
public function getPassword(): string;
}
2 changes: 1 addition & 1 deletion src/Common/DoctrineEntity/Assigner/IPasswordAssigner.php
Expand Up @@ -11,5 +11,5 @@ interface IPasswordAssigner
*
* @return void
*/
public function setPassword(string $password) : void;
public function setPassword(string $password): void;
}
2 changes: 1 addition & 1 deletion src/Common/DoctrineEntity/IUser.php
Expand Up @@ -11,5 +11,5 @@ interface IUser extends Nette\Security\IIdentity
/**
* {@inheritdoc}
*/
public function getRoles() : array;
public function getRoles(): array;
}
9 changes: 9 additions & 0 deletions src/Common/Exception/ConfigurationException.php
@@ -0,0 +1,9 @@
<?php

declare(strict_types=1);

namespace SixtyEightPublishers\User\Common\Exception;

final class ConfigurationException extends RuntimeException
{
}
6 changes: 3 additions & 3 deletions src/Common/Logger/ILogger.php
Expand Up @@ -11,19 +11,19 @@ interface ILogger
*
* @return void
*/
public function error(string $message) : void;
public function error(string $message): void;

/**
* @param string $message
*
* @return void
*/
public function notice(string $message) : void;
public function notice(string $message): void;

/**
* @param string $message
*
* @return void
*/
public function info(string $message) : void;
public function info(string $message): void;
}
6 changes: 3 additions & 3 deletions src/Common/Logger/NullLogger.php
Expand Up @@ -15,21 +15,21 @@ final class NullLogger implements ILogger
/**
* {@inheritdoc}
*/
public function error(string $message) : void
public function error(string $message): void
{
}

/**
* {@inheritdoc}
*/
public function notice(string $message) : void
public function notice(string $message): void
{
}

/**
* {@inheritdoc}
*/
public function info(string $message) : void
public function info(string $message): void
{
}
}
6 changes: 3 additions & 3 deletions src/Common/Logger/PsrLogger.php
Expand Up @@ -27,23 +27,23 @@ public function __construct(Psr\Log\LoggerInterface $logger)
/**
* {@inheritdoc}
*/
public function error(string $message) : void
public function error(string $message): void
{
$this->logger->error($message);
}

/**
* {@inheritdoc}
*/
public function notice(string $message) : void
public function notice(string $message): void
{
$this->logger->notice($message);
}

/**
* {@inheritdoc}
*/
public function info(string $message) : void
public function info(string $message): void
{
$this->logger->info($message);
}
Expand Down
6 changes: 3 additions & 3 deletions src/Common/Logger/TracyLogger.php
Expand Up @@ -16,23 +16,23 @@ final class TracyLogger implements ILogger
/**
* {@inheritdoc}
*/
public function error(string $message) : void
public function error(string $message): void
{
Tracy\Debugger::log($message, Tracy\ILogger::ERROR);
}

/**
* {@inheritdoc}
*/
public function notice(string $message) : void
public function notice(string $message): void
{
Tracy\Debugger::log($message, Tracy\ILogger::WARNING);
}

/**
* {@inheritdoc}
*/
public function info(string $message) : void
public function info(string $message): void
{
Tracy\Debugger::log($message, Tracy\ILogger::INFO);
}
Expand Down
4 changes: 2 additions & 2 deletions src/Common/Mail/Address.php
Expand Up @@ -33,15 +33,15 @@ public function __construct(string $email, ?string $name = NULL)
/**
* @return string
*/
public function getEmail() : string
public function getEmail(): string
{
return $this->email;
}

/**
* @return NULL|string
*/
public function getName() : ?string
public function getName(): ?string
{
return $this->name;
}
Expand Down
2 changes: 1 addition & 1 deletion src/Common/Mail/DefaultMailSender.php
Expand Up @@ -47,7 +47,7 @@ public function __construct(
/**
* {@inheritdoc}
*/
public function send(string $mailName, array $to, array $args) : void
public function send(string $mailName, array $to, array $args): void
{
$file = $this->templatesDir . '/' . $mailName . '.latte';

Expand Down
2 changes: 1 addition & 1 deletion src/Common/Mail/IMailSender.php
Expand Up @@ -13,5 +13,5 @@ interface IMailSender
*
* @return void
*/
public function send(string $mailName, array $to, array $args) : void;
public function send(string $mailName, array $to, array $args): void;
}
2 changes: 1 addition & 1 deletion src/Common/Mail/NullMailSender.php
Expand Up @@ -15,7 +15,7 @@ final class NullMailSender implements IMailSender
/**
* {@inheritdoc}
*/
public function send(string $mailName, array $to, array $args) : void
public function send(string $mailName, array $to, array $args): void
{
}
}
Expand Up @@ -26,23 +26,23 @@ public function __construct(array $options = [])
/**
* {@inheritdoc}
*/
public function hash(string $password) : string
public function hash(string $password): string
{
return Nette\Security\Passwords::hash($password, $this->options);
}

/**
* {@inheritdoc}
*/
public function needRehash(string $password) : bool
public function needRehash(string $password): bool
{
return Nette\Security\Passwords::needsRehash($password, $this->options);
}

/**
* {@inheritdoc}
*/
public function verify(string $password, string $hash) : bool
public function verify(string $password, string $hash): bool
{
return Nette\Security\Passwords::verify($password, $hash);
}
Expand Down
6 changes: 3 additions & 3 deletions src/Common/PasswordHashStrategy/IPasswordHashStrategy.php
Expand Up @@ -11,20 +11,20 @@ interface IPasswordHashStrategy
*
* @return string
*/
public function hash(string $password) : string;
public function hash(string $password): string;

/**
* @param string $password
*
* @return bool
*/
public function needRehash(string $password) : bool;
public function needRehash(string $password): bool;

/**
* @param string $password
* @param string $hash
*
* @return bool
*/
public function verify(string $password, string $hash) : bool;
public function verify(string $password, string $hash): bool;
}
24 changes: 24 additions & 0 deletions src/Common/Translator/ITranslatableService.php
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace SixtyEightPublishers\User\Common\Translator;

use Nette;

interface ITranslatableService
{
/**
* @param \Nette\Localization\ITranslator $translator
*
* @return void
*/
public function setTranslator(Nette\Localization\ITranslator $translator): void;

/**
* @return \Nette\Localization\ITranslator
*
* @return void
*/
public function getTranslator(): Nette\Localization\ITranslator;
}

0 comments on commit 080b0e6

Please sign in to comment.