. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Classes\FieldValidators\User\UserName; use Espo\Core\FieldValidation\Validator; use Espo\Core\FieldValidation\Validator\Data; use Espo\Core\FieldValidation\Validator\Failure; use Espo\Core\Utils\Config; use Espo\Entities\User; use Espo\ORM\Entity; use RuntimeException; /** * @implements Validator */ class Valid implements Validator { private Config $config; public function __construct(Config $config) { $this->config = $config; } /** * @param User $entity */ public function validate(Entity $entity, string $field, Data $data): ?Failure { $value = $entity->getUserName(); if ($value === null) { return null; } /** @var ?string $regExp */ $regExp = $this->config->get('userNameRegularExpression'); if (!$regExp) { throw new RuntimeException("No `userNameRegularExpression` in config."); } if (strpos($value, ' ') !== false) { return Failure::create(); } if (preg_replace("/{$regExp}/", '_', $value) !== $value) { return Failure::create(); } return null; } }