ヤミRoot VoidGate
User / IP
:
216.73.216.81
Host / Server
:
146.88.233.70 / dev.loger.cm
System
:
Linux hybrid1120.fr.ns.planethoster.net 3.10.0-957.21.2.el7.x86_64 #1 SMP Wed Jun 5 14:26:44 UTC 2019 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
logercm
/
dev.loger.cm
/
fixtures
/
assert
/
Viewing: security-core.tar
Authentication/Provider/AnonymousAuthenticationProvider.php 0000644 00000003730 15120140445 0020430 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', AnonymousAuthenticationProvider::class); /** * AnonymousAuthenticationProvider validates AnonymousToken instances. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ class AnonymousAuthenticationProvider implements AuthenticationProviderInterface { /** * Used to determine if the token is created by the application * instead of a malicious client. * * @var string */ private $secret; /** * @param string $secret The secret shared with the AnonymousToken */ public function __construct(string $secret) { $this->secret = $secret; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { if (!$this->supports($token)) { throw new AuthenticationException('The token is not supported by this authentication provider.'); } if ($this->secret !== $token->getSecret()) { throw new BadCredentialsException('The Token does not contain the expected key.'); } return $token; } /** * {@inheritdoc} */ public function supports(TokenInterface $token) { return $token instanceof AnonymousToken; } } Authentication/Provider/AuthenticationProviderInterface.php 0000644 00000002457 15120140445 0020345 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" interface is deprecated, use the new authenticator system instead.', AuthenticationProviderInterface::class); /** * AuthenticationProviderInterface is the interface for all authentication * providers. * * Concrete implementations processes specific Token instances. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ interface AuthenticationProviderInterface extends AuthenticationManagerInterface { /** * Use this constant for not provided username. * * @var string */ public const USERNAME_NONE_PROVIDED = 'NONE_PROVIDED'; /** * Checks whether this provider supports the given token. * * @return bool */ public function supports(TokenInterface $token); } Authentication/Provider/DaoAuthenticationProvider.php 0000644 00000015025 15120140445 0017143 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface; use Symfony\Component\Security\Core\Exception\AuthenticationServiceException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', DaoAuthenticationProvider::class); /** * DaoAuthenticationProvider uses a UserProviderInterface to retrieve the user * for a UsernamePasswordToken. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ class DaoAuthenticationProvider extends UserAuthenticationProvider { private $hasherFactory; private $userProvider; /** * @param PasswordHasherFactoryInterface $hasherFactory */ public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, $hasherFactory, bool $hideUserNotFoundExceptions = true) { parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions); if ($hasherFactory instanceof EncoderFactoryInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Passing a "%s" instance to the "%s" constructor is deprecated, use "%s" instead.', EncoderFactoryInterface::class, __CLASS__, PasswordHasherFactoryInterface::class); } $this->hasherFactory = $hasherFactory; $this->userProvider = $userProvider; } /** * {@inheritdoc} */ protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token) { $currentUser = $token->getUser(); if ($currentUser instanceof UserInterface) { if ($currentUser->getPassword() !== $user->getPassword()) { throw new BadCredentialsException('The credentials were changed from another session.'); } } else { if ('' === ($presentedPassword = $token->getCredentials())) { throw new BadCredentialsException('The presented password cannot be empty.'); } if (null === $user->getPassword()) { throw new BadCredentialsException('The presented password is invalid.'); } if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Using password-based authentication listeners while not implementing "%s" interface from class "%s" is deprecated.', PasswordAuthenticatedUserInterface::class, get_debug_type($user)); } $salt = $user->getSalt(); if ($salt && !$user instanceof LegacyPasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Returning a string from "getSalt()" without implementing the "%s" interface is deprecated, the "%s" class should implement it.', LegacyPasswordAuthenticatedUserInterface::class, get_debug_type($user)); } // deprecated since Symfony 5.3 if ($this->hasherFactory instanceof EncoderFactoryInterface) { $encoder = $this->hasherFactory->getEncoder($user); if (!$encoder->isPasswordValid($user->getPassword(), $presentedPassword, $salt)) { throw new BadCredentialsException('The presented password is invalid.'); } if ($this->userProvider instanceof PasswordUpgraderInterface && method_exists($encoder, 'needsRehash') && $encoder->needsRehash($user->getPassword())) { $this->userProvider->upgradePassword($user, $encoder->encodePassword($presentedPassword, $user->getSalt())); } return; } $hasher = $this->hasherFactory->getPasswordHasher($user); if (!$hasher->verify($user->getPassword(), $presentedPassword, $salt)) { throw new BadCredentialsException('The presented password is invalid.'); } if ($this->userProvider instanceof PasswordUpgraderInterface && $hasher->needsRehash($user->getPassword())) { $this->userProvider->upgradePassword($user, $hasher->hash($presentedPassword, $salt)); } } } /** * {@inheritdoc} */ protected function retrieveUser(string $userIdentifier, UsernamePasswordToken $token) { $user = $token->getUser(); if ($user instanceof UserInterface) { return $user; } try { // @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0 if (method_exists($this->userProvider, 'loadUserByIdentifier')) { $user = $this->userProvider->loadUserByIdentifier($userIdentifier); } else { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider)); $user = $this->userProvider->loadUserByUsername($userIdentifier); } if (!$user instanceof UserInterface) { throw new AuthenticationServiceException('The user provider must return a UserInterface object.'); } return $user; } catch (UserNotFoundException $e) { $e->setUserIdentifier($userIdentifier); throw $e; } catch (\Exception $e) { $e = new AuthenticationServiceException($e->getMessage(), 0, $e); $e->setToken($token); throw $e; } } } Authentication/Provider/LdapBindAuthenticationProvider.php 0000644 00000012110 15120140445 0020105 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Ldap\Exception\ConnectionException; use Symfony\Component\Ldap\LdapInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\LogicException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', LdapBindAuthenticationProvider::class); /** * LdapBindAuthenticationProvider authenticates a user against an LDAP server. * * The only way to check user credentials is to try to connect the user with its * credentials to the ldap. * * @author Charles Sarrazin <charles@sarraz.in> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ class LdapBindAuthenticationProvider extends UserAuthenticationProvider { private $userProvider; private $ldap; private $dnString; private $queryString; private $searchDn; private $searchPassword; public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, LdapInterface $ldap, string $dnString = '{user_identifier}', bool $hideUserNotFoundExceptions = true, string $searchDn = '', string $searchPassword = '') { parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions); $this->userProvider = $userProvider; $this->ldap = $ldap; $this->dnString = $dnString; $this->searchDn = $searchDn; $this->searchPassword = $searchPassword; } /** * Set a query string to use in order to find a DN for the user identifier. */ public function setQueryString(string $queryString) { $this->queryString = $queryString; } /** * {@inheritdoc} */ protected function retrieveUser(string $userIdentifier, UsernamePasswordToken $token) { if (AuthenticationProviderInterface::USERNAME_NONE_PROVIDED === $userIdentifier) { throw new UserNotFoundException('User identifier cannot be null.'); } // @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0 if (method_exists($this->userProvider, 'loadUserByIdentifier')) { return $this->userProvider->loadUserByIdentifier($userIdentifier); } else { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider)); return $this->userProvider->loadUserByUsername($userIdentifier); } } /** * {@inheritdoc} */ protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token) { // @deprecated since Symfony 5.3, change to $token->getUserIdentifier() in 6.0 $userIdentifier = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername(); $password = $token->getCredentials(); if ('' === (string) $password) { throw new BadCredentialsException('The presented password must not be empty.'); } try { if ($this->queryString) { if ('' !== $this->searchDn && '' !== $this->searchPassword) { $this->ldap->bind($this->searchDn, $this->searchPassword); } else { throw new LogicException('Using the "query_string" config without using a "search_dn" and a "search_password" is not supported.'); } $userIdentifier = $this->ldap->escape($userIdentifier, '', LdapInterface::ESCAPE_FILTER); $query = str_replace(['{username}', '{user_identifier}'], $userIdentifier, $this->queryString); $result = $this->ldap->query($this->dnString, $query)->execute(); if (1 !== $result->count()) { throw new BadCredentialsException('The presented username is invalid.'); } $dn = $result[0]->getDn(); } else { $userIdentifier = $this->ldap->escape($userIdentifier, '', LdapInterface::ESCAPE_DN); $dn = str_replace(['{username}', '{user_identifier}'], $userIdentifier, $this->dnString); } $this->ldap->bind($dn, $password); } catch (ConnectionException $e) { throw new BadCredentialsException('The presented password is invalid.'); } } } Authentication/Provider/PreAuthenticatedAuthenticationProvider.php 0000644 00000006567 15120140445 0021704 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', PreAuthenticatedAuthenticationProvider::class); /** * Processes a pre-authenticated authentication request. * * This authentication provider will not perform any checks on authentication * requests, as they should already be pre-authenticated. However, the * UserProviderInterface implementation may still throw a * UserNotFoundException, for example. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ class PreAuthenticatedAuthenticationProvider implements AuthenticationProviderInterface { private $userProvider; private $userChecker; private $providerKey; public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey) { $this->userProvider = $userProvider; $this->userChecker = $userChecker; $this->providerKey = $providerKey; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { if (!$this->supports($token)) { throw new AuthenticationException('The token is not supported by this authentication provider.'); } if (!$user = $token->getUser()) { throw new BadCredentialsException('No pre-authenticated principal found in request.'); } $userIdentifier = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername(); // @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0 if (method_exists($this->userProvider, 'loadUserByIdentifier')) { $user = $this->userProvider->loadUserByIdentifier($userIdentifier); } else { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider)); $user = $this->userProvider->loadUserByUsername($userIdentifier); } $this->userChecker->checkPostAuth($user); $authenticatedToken = new PreAuthenticatedToken($user, $token->getCredentials(), $this->providerKey, $user->getRoles()); $authenticatedToken->setAttributes($token->getAttributes()); return $authenticatedToken; } /** * {@inheritdoc} */ public function supports(TokenInterface $token) { return $token instanceof PreAuthenticatedToken && $this->providerKey === $token->getFirewallName(); } } Authentication/Provider/RememberMeAuthenticationProvider.php 0000644 00000005261 15120140445 0020461 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Security\Core\Authentication\Token\RememberMeToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\LogicException; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', RememberMeAuthenticationProvider::class); /** * @deprecated since Symfony 5.3, use the new authenticator system instead */ class RememberMeAuthenticationProvider implements AuthenticationProviderInterface { private $userChecker; private $secret; private $providerKey; /** * @param string $secret A secret * @param string $providerKey A provider secret */ public function __construct(UserCheckerInterface $userChecker, string $secret, string $providerKey) { $this->userChecker = $userChecker; $this->secret = $secret; $this->providerKey = $providerKey; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { if (!$this->supports($token)) { throw new AuthenticationException('The token is not supported by this authentication provider.'); } if ($this->secret !== $token->getSecret()) { throw new BadCredentialsException('The presented secret does not match.'); } $user = $token->getUser(); if (!$user instanceof UserInterface) { throw new LogicException(sprintf('Method "%s::getUser()" must return a "%s" instance, "%s" returned.', get_debug_type($token), UserInterface::class, get_debug_type($user))); } $this->userChecker->checkPreAuth($user); $this->userChecker->checkPostAuth($user); $authenticatedToken = new RememberMeToken($user, $this->providerKey, $this->secret); $authenticatedToken->setAttributes($token->getAttributes()); return $authenticatedToken; } /** * {@inheritdoc} */ public function supports(TokenInterface $token) { return $token instanceof RememberMeToken && $token->getFirewallName() === $this->providerKey; } } Authentication/Provider/UserAuthenticationProvider.php 0000644 00000011642 15120140445 0017357 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Provider; use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Exception\AccountStatusException; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationServiceException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', UserAuthenticationProvider::class); /** * UserProviderInterface retrieves users for UsernamePasswordToken tokens. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ abstract class UserAuthenticationProvider implements AuthenticationProviderInterface { private $hideUserNotFoundExceptions; private $userChecker; private $providerKey; /** * @throws \InvalidArgumentException */ public function __construct(UserCheckerInterface $userChecker, string $providerKey, bool $hideUserNotFoundExceptions = true) { if (empty($providerKey)) { throw new \InvalidArgumentException('$providerKey must not be empty.'); } $this->userChecker = $userChecker; $this->providerKey = $providerKey; $this->hideUserNotFoundExceptions = $hideUserNotFoundExceptions; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { if (!$this->supports($token)) { throw new AuthenticationException('The token is not supported by this authentication provider.'); } $username = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername(); if ('' === $username || null === $username) { $username = AuthenticationProviderInterface::USERNAME_NONE_PROVIDED; } try { $user = $this->retrieveUser($username, $token); } catch (UserNotFoundException $e) { if ($this->hideUserNotFoundExceptions) { throw new BadCredentialsException('Bad credentials.', 0, $e); } $e->setUserIdentifier($username); throw $e; } if (!$user instanceof UserInterface) { throw new AuthenticationServiceException('retrieveUser() must return a UserInterface.'); } try { $this->userChecker->checkPreAuth($user); $this->checkAuthentication($user, $token); $this->userChecker->checkPostAuth($user); } catch (AccountStatusException|BadCredentialsException $e) { if ($this->hideUserNotFoundExceptions && !$e instanceof CustomUserMessageAccountStatusException) { throw new BadCredentialsException('Bad credentials.', 0, $e); } throw $e; } if ($token instanceof SwitchUserToken) { $roles = $user->getRoles(); $roles[] = 'ROLE_PREVIOUS_ADMIN'; $authenticatedToken = new SwitchUserToken($user, $token->getCredentials(), $this->providerKey, $roles, $token->getOriginalToken()); } else { $authenticatedToken = new UsernamePasswordToken($user, $token->getCredentials(), $this->providerKey, $user->getRoles()); } $authenticatedToken->setAttributes($token->getAttributes()); return $authenticatedToken; } /** * {@inheritdoc} */ public function supports(TokenInterface $token) { return $token instanceof UsernamePasswordToken && $this->providerKey === $token->getFirewallName(); } /** * Retrieves the user from an implementation-specific location. * * @return UserInterface * * @throws AuthenticationException if the credentials could not be validated */ abstract protected function retrieveUser(string $username, UsernamePasswordToken $token); /** * Does additional checks on the user and token (like validating the * credentials). * * @throws AuthenticationException if the credentials could not be validated */ abstract protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token); } Authentication/RememberMe/CacheTokenVerifier.php 0000644 00000004577 15120140445 0015765 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; use Psr\Cache\CacheItemPoolInterface; /** * @author Jordi Boggiano <j.boggiano@seld.be> */ class CacheTokenVerifier implements TokenVerifierInterface { private $cache; private $outdatedTokenTtl; private $cacheKeyPrefix; /** * @param int $outdatedTokenTtl How long the outdated token should still be considered valid. Defaults * to 60, which matches how often the PersistentRememberMeHandler will at * most refresh tokens. Increasing to more than that is not recommended, * but you may use a lower value. */ public function __construct(CacheItemPoolInterface $cache, int $outdatedTokenTtl = 60, string $cacheKeyPrefix = 'rememberme-stale-') { $this->cache = $cache; $this->outdatedTokenTtl = $outdatedTokenTtl; $this->cacheKeyPrefix = $cacheKeyPrefix; } /** * {@inheritdoc} */ public function verifyToken(PersistentTokenInterface $token, string $tokenValue): bool { if (hash_equals($token->getTokenValue(), $tokenValue)) { return true; } $cacheKey = $this->getCacheKey($token); $item = $this->cache->getItem($cacheKey); if (!$item->isHit()) { return false; } $outdatedToken = $item->get(); return hash_equals($outdatedToken, $tokenValue); } /** * {@inheritdoc} */ public function updateExistingToken(PersistentTokenInterface $token, string $tokenValue, \DateTimeInterface $lastUsed): void { // When a token gets updated, persist the outdated token for $outdatedTokenTtl seconds so we can // still accept it as valid in verifyToken $item = $this->cache->getItem($this->getCacheKey($token)); $item->set($token->getTokenValue()); $item->expiresAfter($this->outdatedTokenTtl); $this->cache->save($item); } private function getCacheKey(PersistentTokenInterface $token): string { return $this->cacheKeyPrefix.rawurlencode($token->getSeries()); } } Authentication/RememberMe/InMemoryTokenProvider.php 0000644 00000003443 15120140445 0016527 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; use Symfony\Component\Security\Core\Exception\TokenNotFoundException; /** * This class is used for testing purposes, and is not really suited for production. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class InMemoryTokenProvider implements TokenProviderInterface { private $tokens = []; /** * {@inheritdoc} */ public function loadTokenBySeries(string $series) { if (!isset($this->tokens[$series])) { throw new TokenNotFoundException('No token found.'); } return $this->tokens[$series]; } /** * {@inheritdoc} */ public function updateToken(string $series, string $tokenValue, \DateTime $lastUsed) { if (!isset($this->tokens[$series])) { throw new TokenNotFoundException('No token found.'); } $token = new PersistentToken( $this->tokens[$series]->getClass(), method_exists($this->tokens[$series], 'getUserIdentifier') ? $this->tokens[$series]->getUserIdentifier() : $this->tokens[$series]->getUsername(), $series, $tokenValue, $lastUsed ); $this->tokens[$series] = $token; } /** * {@inheritdoc} */ public function deleteTokenBySeries(string $series) { unset($this->tokens[$series]); } /** * {@inheritdoc} */ public function createNewToken(PersistentTokenInterface $token) { $this->tokens[$token->getSeries()] = $token; } } Authentication/RememberMe/PersistentToken.php 0000644 00000004330 15120140445 0015411 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; /** * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @internal */ final class PersistentToken implements PersistentTokenInterface { private $class; private $userIdentifier; private $series; private $tokenValue; private $lastUsed; public function __construct(string $class, string $userIdentifier, string $series, string $tokenValue, \DateTime $lastUsed) { if (empty($class)) { throw new \InvalidArgumentException('$class must not be empty.'); } if ('' === $userIdentifier) { throw new \InvalidArgumentException('$userIdentifier must not be empty.'); } if (empty($series)) { throw new \InvalidArgumentException('$series must not be empty.'); } if (empty($tokenValue)) { throw new \InvalidArgumentException('$tokenValue must not be empty.'); } $this->class = $class; $this->userIdentifier = $userIdentifier; $this->series = $series; $this->tokenValue = $tokenValue; $this->lastUsed = $lastUsed; } /** * {@inheritdoc} */ public function getClass(): string { return $this->class; } /** * {@inheritdoc} */ public function getUsername(): string { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use getUserIdentifier() instead.', __METHOD__); return $this->userIdentifier; } public function getUserIdentifier(): string { return $this->userIdentifier; } /** * {@inheritdoc} */ public function getSeries(): string { return $this->series; } /** * {@inheritdoc} */ public function getTokenValue(): string { return $this->tokenValue; } /** * {@inheritdoc} */ public function getLastUsed(): \DateTime { return $this->lastUsed; } } Authentication/RememberMe/PersistentTokenInterface.php 0000644 00000002400 15120140445 0017226 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; /** * Interface to be implemented by persistent token classes (such as * Doctrine entities representing a remember-me token). * * @method string getUserIdentifier() returns the identifier used to authenticate (e.g. their email address or username) * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface PersistentTokenInterface { /** * Returns the class of the user. * * @return string */ public function getClass(); /** * Returns the series. * * @return string */ public function getSeries(); /** * Returns the token value. * * @return string */ public function getTokenValue(); /** * Returns the time the token was last used. * * @return \DateTime */ public function getLastUsed(); /** * @return string * * @deprecated since Symfony 5.3, use getUserIdentifier() instead */ public function getUsername(); } Authentication/RememberMe/TokenProviderInterface.php 0000644 00000002301 15120140445 0016660 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; use Symfony\Component\Security\Core\Exception\TokenNotFoundException; /** * Interface for TokenProviders. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface TokenProviderInterface { /** * Loads the active token for the given series. * * @return PersistentTokenInterface * * @throws TokenNotFoundException if the token is not found */ public function loadTokenBySeries(string $series); /** * Deletes all tokens belonging to series. */ public function deleteTokenBySeries(string $series); /** * Updates the token according to this data. * * @throws TokenNotFoundException if the token is not found */ public function updateToken(string $series, string $tokenValue, \DateTime $lastUsed); /** * Creates a new token. */ public function createNewToken(PersistentTokenInterface $token); } Authentication/RememberMe/TokenVerifierInterface.php 0000644 00000001737 15120140445 0016655 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\RememberMe; /** * @author Jordi Boggiano <j.boggiano@seld.be> */ interface TokenVerifierInterface { /** * Verifies that the given $token is valid. * * This lets you override the token check logic to for example accept slightly outdated tokens. * * Do not forget to implement token comparisons using hash_equals for a secure implementation. */ public function verifyToken(PersistentTokenInterface $token, string $tokenValue): bool; /** * Updates an existing token with a new token value and lastUsed time. */ public function updateExistingToken(PersistentTokenInterface $token, string $tokenValue, \DateTimeInterface $lastUsed): void; } Authentication/Token/Storage/TokenStorage.php 0000644 00000003515 15120140445 0015325 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token\Storage; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Contracts\Service\ResetInterface; /** * TokenStorage contains a TokenInterface. * * It gives access to the token representing the current user authentication. * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class TokenStorage implements TokenStorageInterface, ResetInterface { private $token; private $initializer; /** * {@inheritdoc} */ public function getToken() { if ($initializer = $this->initializer) { $this->initializer = null; $initializer(); } return $this->token; } /** * {@inheritdoc} */ public function setToken(TokenInterface $token = null) { if ($token) { // ensure any initializer is called $this->getToken(); // @deprecated since Symfony 5.3 if (!method_exists($token, 'getUserIdentifier')) { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "getUserIdentifier(): string" in token class "%s" is deprecated. This method will replace "getUsername()" in Symfony 6.0.', get_debug_type($token)); } } $this->initializer = null; $this->token = $token; } public function setInitializer(?callable $initializer): void { $this->initializer = $initializer; } public function reset() { $this->setToken(null); } } Authentication/Token/Storage/TokenStorageInterface.php 0000644 00000001606 15120140445 0017145 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token\Storage; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * The TokenStorageInterface. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface TokenStorageInterface { /** * Returns the current security token. * * @return TokenInterface|null */ public function getToken(); /** * Sets the authentication token. * * @param TokenInterface|null $token A TokenInterface token, or null if no further authentication information should be stored */ public function setToken(TokenInterface $token = null); } Authentication/Token/Storage/UsageTrackingTokenStorage.php 0000644 00000005620 15120140445 0017774 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token\Storage; use Psr\Container\ContainerInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Contracts\Service\ServiceSubscriberInterface; /** * A token storage that increments the session usage index when the token is accessed. * * @author Nicolas Grekas <p@tchwork.com> */ final class UsageTrackingTokenStorage implements TokenStorageInterface, ServiceSubscriberInterface { private $storage; private $container; private $enableUsageTracking = false; public function __construct(TokenStorageInterface $storage, ContainerInterface $container) { $this->storage = $storage; $this->container = $container; } /** * {@inheritdoc} */ public function getToken(): ?TokenInterface { if ($this->shouldTrackUsage()) { // increments the internal session usage index $this->getSession()->getMetadataBag(); } return $this->storage->getToken(); } /** * {@inheritdoc} */ public function setToken(TokenInterface $token = null): void { $this->storage->setToken($token); if ($token && $this->shouldTrackUsage()) { // increments the internal session usage index $this->getSession()->getMetadataBag(); } } public function enableUsageTracking(): void { $this->enableUsageTracking = true; } public function disableUsageTracking(): void { $this->enableUsageTracking = false; } public static function getSubscribedServices(): array { return [ 'request_stack' => RequestStack::class, ]; } private function getSession(): SessionInterface { // BC for symfony/security-bundle < 5.3 if ($this->container->has('session')) { trigger_deprecation('symfony/security-core', '5.3', 'Injecting the "session" in "%s" is deprecated, inject the "request_stack" instead.', __CLASS__); return $this->container->get('session'); } return $this->container->get('request_stack')->getSession(); } private function shouldTrackUsage(): bool { if (!$this->enableUsageTracking) { return false; } // BC for symfony/security-bundle < 5.3 if ($this->container->has('session')) { return true; } if (!$this->container->get('request_stack')->getMainRequest()) { return false; } return true; } } Authentication/Token/AbstractToken.php 0000644 00000023425 15120140445 0014062 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\EquatableInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; /** * Base class for Token instances. * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ abstract class AbstractToken implements TokenInterface { private $user; private $roleNames = []; private $authenticated = false; private $attributes = []; /** * @param string[] $roles An array of roles * * @throws \InvalidArgumentException */ public function __construct(array $roles = []) { foreach ($roles as $role) { $this->roleNames[] = $role; } } /** * {@inheritdoc} */ public function getRoleNames(): array { return $this->roleNames; } /** * {@inheritdoc} */ public function getUsername(/* $legacy = true */) { if (1 === \func_num_args() && false === func_get_arg(0)) { return null; } trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use getUserIdentifier() instead.', __METHOD__); if ($this->user instanceof UserInterface) { return method_exists($this->user, 'getUserIdentifier') ? $this->user->getUserIdentifier() : $this->user->getUsername(); } return (string) $this->user; } /** * {@inheritdoc} */ public function getUserIdentifier(): string { // method returns "null" in non-legacy mode if not overridden $username = $this->getUsername(false); if (null !== $username) { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s::getUsername()" is deprecated, override "getUserIdentifier()" instead.', get_debug_type($this)); } if ($this->user instanceof UserInterface) { // @deprecated since Symfony 5.3, change to $user->getUserIdentifier() in 6.0 return method_exists($this->user, 'getUserIdentifier') ? $this->user->getUserIdentifier() : $this->user->getUsername(); } return (string) $this->user; } /** * {@inheritdoc} */ public function getUser() { return $this->user; } /** * {@inheritdoc} */ public function setUser($user) { if (!($user instanceof UserInterface || (\is_object($user) && method_exists($user, '__toString')) || \is_string($user))) { throw new \InvalidArgumentException('$user must be an instanceof UserInterface, an object implementing a __toString method, or a primitive string.'); } if (!$user instanceof UserInterface) { trigger_deprecation('symfony/security-core', '5.4', 'Using an object that is not an instance of "%s" as $user in "%s" is deprecated.', UserInterface::class, static::class); } // @deprecated since Symfony 5.4, remove the whole block if/elseif/else block in 6.0 if (1 < \func_num_args() && !func_get_arg(1)) { // ContextListener checks if the user has changed on its own and calls `setAuthenticated()` subsequently, // avoid doing the same checks twice $changed = false; } elseif (null === $this->user) { $changed = false; } elseif ($this->user instanceof UserInterface) { if (!$user instanceof UserInterface) { $changed = true; } else { $changed = $this->hasUserChanged($user); } } elseif ($user instanceof UserInterface) { $changed = true; } else { $changed = (string) $this->user !== (string) $user; } // @deprecated since Symfony 5.4 if ($changed) { $this->setAuthenticated(false, false); } $this->user = $user; } /** * {@inheritdoc} * * @deprecated since Symfony 5.4 */ public function isAuthenticated() { if (1 > \func_num_args() || func_get_arg(0)) { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s()" is deprecated, return null from "getUser()" instead when a token is not authenticated.', __METHOD__); } return $this->authenticated; } /** * {@inheritdoc} */ public function setAuthenticated(bool $authenticated) { if (2 > \func_num_args() || func_get_arg(1)) { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s()" is deprecated', __METHOD__); } $this->authenticated = $authenticated; } /** * {@inheritdoc} */ public function eraseCredentials() { if ($this->getUser() instanceof UserInterface) { $this->getUser()->eraseCredentials(); } } /** * Returns all the necessary state of the object for serialization purposes. * * There is no need to serialize any entry, they should be returned as-is. * If you extend this method, keep in mind you MUST guarantee parent data is present in the state. * Here is an example of how to extend this method: * <code> * public function __serialize(): array * { * return [$this->childAttribute, parent::__serialize()]; * } * </code> * * @see __unserialize() */ public function __serialize(): array { return [$this->user, $this->authenticated, null, $this->attributes, $this->roleNames]; } /** * Restores the object state from an array given by __serialize(). * * There is no need to unserialize any entry in $data, they are already ready-to-use. * If you extend this method, keep in mind you MUST pass the parent data to its respective class. * Here is an example of how to extend this method: * <code> * public function __unserialize(array $data): void * { * [$this->childAttribute, $parentData] = $data; * parent::__unserialize($parentData); * } * </code> * * @see __serialize() */ public function __unserialize(array $data): void { [$this->user, $this->authenticated, , $this->attributes, $this->roleNames] = $data; } /** * {@inheritdoc} */ public function getAttributes() { return $this->attributes; } /** * {@inheritdoc} */ public function setAttributes(array $attributes) { $this->attributes = $attributes; } /** * {@inheritdoc} */ public function hasAttribute(string $name) { return \array_key_exists($name, $this->attributes); } /** * {@inheritdoc} */ public function getAttribute(string $name) { if (!\array_key_exists($name, $this->attributes)) { throw new \InvalidArgumentException(sprintf('This token has no "%s" attribute.', $name)); } return $this->attributes[$name]; } /** * {@inheritdoc} */ public function setAttribute(string $name, $value) { $this->attributes[$name] = $value; } /** * {@inheritdoc} */ public function __toString() { $class = static::class; $class = substr($class, strrpos($class, '\\') + 1); $roles = []; foreach ($this->roleNames as $role) { $roles[] = $role; } return sprintf('%s(user="%s", authenticated=%s, roles="%s")', $class, $this->getUserIdentifier(), json_encode($this->authenticated), implode(', ', $roles)); } /** * @internal */ final public function serialize(): string { return serialize($this->__serialize()); } /** * @internal */ final public function unserialize($serialized) { $this->__unserialize(\is_array($serialized) ? $serialized : unserialize($serialized)); } /** * @deprecated since Symfony 5.4 */ private function hasUserChanged(UserInterface $user): bool { if (!($this->user instanceof UserInterface)) { throw new \BadMethodCallException('Method "hasUserChanged" should be called when current user class is instance of "UserInterface".'); } if ($this->user instanceof EquatableInterface) { return !(bool) $this->user->isEqualTo($user); } // @deprecated since Symfony 5.3, check for PasswordAuthenticatedUserInterface on both user objects before comparing passwords if ($this->user->getPassword() !== $user->getPassword()) { return true; } // @deprecated since Symfony 5.3, check for LegacyPasswordAuthenticatedUserInterface on both user objects before comparing salts if ($this->user->getSalt() !== $user->getSalt()) { return true; } $userRoles = array_map('strval', (array) $user->getRoles()); if ($this instanceof SwitchUserToken) { $userRoles[] = 'ROLE_PREVIOUS_ADMIN'; } if (\count($userRoles) !== \count($this->getRoleNames()) || \count($userRoles) !== \count(array_intersect($userRoles, $this->getRoleNames()))) { return true; } // @deprecated since Symfony 5.3, drop getUsername() in 6.0 $userIdentifier = function ($user) { return method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername(); }; if ($userIdentifier($this->user) !== $userIdentifier($user)) { return true; } return false; } } Authentication/Token/AnonymousToken.php 0000644 00000003635 15120140445 0014310 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * AnonymousToken represents an anonymous token. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since 5.4, anonymous is now represented by the absence of a token */ class AnonymousToken extends AbstractToken { private $secret; /** * @param string $secret A secret used to make sure the token is created by the app and not by a malicious client * @param string|\Stringable|UserInterface $user * @param string[] $roles */ public function __construct(string $secret, $user, array $roles = []) { trigger_deprecation('symfony/security-core', '5.4', 'The "%s" class is deprecated.', __CLASS__); parent::__construct($roles); $this->secret = $secret; $this->setUser($user); // @deprecated since Symfony 5.4 $this->setAuthenticated(true, false); } /** * {@inheritdoc} */ public function getCredentials() { return ''; } /** * Returns the secret. * * @return string */ public function getSecret() { return $this->secret; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->secret, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->secret, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Authentication/Token/NullToken.php 0000644 00000005241 15120140445 0013225 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; /** * @author Wouter de Jong <wouter@wouterj.nl> */ class NullToken implements TokenInterface { public function __toString(): string { return ''; } public function getRoleNames(): array { return []; } public function getCredentials() { return ''; } public function getUser() { return null; } public function setUser($user) { throw new \BadMethodCallException('Cannot set user on a NullToken.'); } public function getUsername() { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use getUserIdentifier() instead.', __METHOD__); return ''; } public function getUserIdentifier(): string { return ''; } /** * @deprecated since Symfony 5.4 */ public function isAuthenticated() { if (0 === \func_num_args() || func_get_arg(0)) { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s()" is deprecated, return null from "getUser()" instead when a token is not authenticated.', __METHOD__); } return true; } /** * @deprecated since Symfony 5.4 */ public function setAuthenticated(bool $isAuthenticated) { throw new \BadMethodCallException('Cannot change authentication state of NullToken.'); } public function eraseCredentials() { } public function getAttributes() { return []; } public function setAttributes(array $attributes) { throw new \BadMethodCallException('Cannot set attributes of NullToken.'); } public function hasAttribute(string $name) { return false; } public function getAttribute(string $name) { return null; } public function setAttribute(string $name, $value) { throw new \BadMethodCallException('Cannot add attribute to NullToken.'); } public function __serialize(): array { return []; } public function __unserialize(array $data): void { } /** * @return string * * @internal in 5.3 * * @final in 5.3 */ public function serialize() { return ''; } /** * @return void * * @internal in 5.3 * * @final in 5.3 */ public function unserialize($serialized) { } } Authentication/Token/PreAuthenticatedToken.php 0000644 00000005624 15120140445 0015551 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * PreAuthenticatedToken implements a pre-authenticated token. * * @author Fabien Potencier <fabien@symfony.com> */ class PreAuthenticatedToken extends AbstractToken { private $credentials; private $firewallName; /** * @param UserInterface $user * @param string $firewallName * @param string[] $roles */ public function __construct($user, /* string */ $firewallName, /* array */ $roles = []) { if (\is_string($roles)) { trigger_deprecation('symfony/security-core', '5.4', 'Argument $credentials of "%s()" is deprecated.', __METHOD__); $credentials = $firewallName; $firewallName = $roles; $roles = \func_num_args() > 3 ? func_get_arg(3) : []; } parent::__construct($roles); if ('' === $firewallName) { throw new \InvalidArgumentException('$firewallName must not be empty.'); } $this->setUser($user); $this->credentials = $credentials ?? null; $this->firewallName = $firewallName; if ($roles) { $this->setAuthenticated(true, false); } } /** * Returns the provider key. * * @return string The provider key * * @deprecated since Symfony 5.2, use getFirewallName() instead */ public function getProviderKey() { if (1 !== \func_num_args() || true !== func_get_arg(0)) { trigger_deprecation('symfony/security-core', '5.2', 'Method "%s()" is deprecated, use "getFirewallName()" instead.', __METHOD__); } return $this->firewallName; } public function getFirewallName(): string { return $this->getProviderKey(true); } /** * {@inheritdoc} */ public function getCredentials() { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s()" is deprecated.', __METHOD__); return $this->credentials; } /** * {@inheritdoc} */ public function eraseCredentials() { parent::eraseCredentials(); $this->credentials = null; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->credentials, $this->firewallName, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->credentials, $this->firewallName, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Authentication/Token/RememberMeToken.php 0000644 00000005647 15120140445 0014345 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * Authentication Token for "Remember-Me". * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class RememberMeToken extends AbstractToken { private $secret; private $firewallName; /** * @param string $secret A secret used to make sure the token is created by the app and not by a malicious client * * @throws \InvalidArgumentException */ public function __construct(UserInterface $user, string $firewallName, string $secret) { parent::__construct($user->getRoles()); if (empty($secret)) { throw new \InvalidArgumentException('$secret must not be empty.'); } if ('' === $firewallName) { throw new \InvalidArgumentException('$firewallName must not be empty.'); } $this->firewallName = $firewallName; $this->secret = $secret; $this->setUser($user); parent::setAuthenticated(true, false); } /** * {@inheritdoc} */ public function setAuthenticated(bool $authenticated) { if ($authenticated) { throw new \LogicException('You cannot set this token to authenticated after creation.'); } parent::setAuthenticated(false, false); } /** * Returns the provider secret. * * @return string The provider secret * * @deprecated since Symfony 5.2, use getFirewallName() instead */ public function getProviderKey() { if (1 !== \func_num_args() || true !== func_get_arg(0)) { trigger_deprecation('symfony/security-core', '5.2', 'Method "%s()" is deprecated, use "getFirewallName()" instead.', __METHOD__); } return $this->firewallName; } public function getFirewallName(): string { return $this->getProviderKey(true); } /** * @return string */ public function getSecret() { return $this->secret; } /** * {@inheritdoc} */ public function getCredentials() { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s()" is deprecated.', __METHOD__); return ''; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->secret, $this->firewallName, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->secret, $this->firewallName, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Authentication/Token/SwitchUserToken.php 0000644 00000005377 15120140445 0014425 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * Token representing a user who temporarily impersonates another one. * * @author Christian Flothmann <christian.flothmann@sensiolabs.de> */ class SwitchUserToken extends UsernamePasswordToken { private $originalToken; private $originatedFromUri; /** * @param UserInterface $user * @param string|null $originatedFromUri The URI where was the user at the switch * * @throws \InvalidArgumentException */ public function __construct($user, /* string */ $firewallName, /* array */ $roles, /* TokenInterface */ $originalToken, /* string */ $originatedFromUri = null) { if (\is_string($roles)) { // @deprecated since 5.4, deprecation is triggered by UsernamePasswordToken::__construct() $credentials = $firewallName; $firewallName = $roles; $roles = $originalToken; $originalToken = $originatedFromUri; $originatedFromUri = \func_num_args() > 5 ? func_get_arg(5) : null; parent::__construct($user, $credentials, $firewallName, $roles); } else { parent::__construct($user, $firewallName, $roles); } if (!$originalToken instanceof TokenInterface) { throw new \TypeError(sprintf('Argument $originalToken of "%s" must be an instance of "%s", "%s" given.', __METHOD__, TokenInterface::class, get_debug_type($originalToken))); } $this->originalToken = $originalToken; $this->originatedFromUri = $originatedFromUri; } public function getOriginalToken(): TokenInterface { return $this->originalToken; } public function getOriginatedFromUri(): ?string { return $this->originatedFromUri; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->originalToken, $this->originatedFromUri, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { if (3 > \count($data)) { // Support for tokens serialized with version 5.1 or lower of symfony/security-core. [$this->originalToken, $parentData] = $data; } else { [$this->originalToken, $this->originatedFromUri, $parentData] = $data; } $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Authentication/Token/TokenInterface.php 0000644 00000006152 15120140445 0014215 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * TokenInterface is the interface for the user authentication information. * * @method string getUserIdentifier() returns the user identifier used during authentication (e.g. a user's email address or username) * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface TokenInterface extends \Serializable { /** * Returns a string representation of the Token. * * This is only to be used for debugging purposes. * * @return string */ public function __toString(); /** * Returns the user roles. * * @return string[] */ public function getRoleNames(): array; /** * Returns the user credentials. * * @return mixed * * @deprecated since Symfony 5.4 */ public function getCredentials(); /** * Returns a user representation. * * @return UserInterface|null * * @see AbstractToken::setUser() */ public function getUser(); /** * Sets the authenticated user in the token. * * @param UserInterface $user * * @throws \InvalidArgumentException */ public function setUser($user); /** * Returns whether the user is authenticated or not. * * @return bool true if the token has been authenticated, false otherwise * * @deprecated since Symfony 5.4, return null from "getUser()" instead when a token is not authenticated */ public function isAuthenticated(); /** * Sets the authenticated flag. * * @deprecated since Symfony 5.4 */ public function setAuthenticated(bool $isAuthenticated); /** * Removes sensitive information from the token. */ public function eraseCredentials(); /** * @return array */ public function getAttributes(); /** * @param array $attributes The token attributes */ public function setAttributes(array $attributes); /** * @return bool */ public function hasAttribute(string $name); /** * @return mixed * * @throws \InvalidArgumentException When attribute doesn't exist for this token */ public function getAttribute(string $name); /** * @param mixed $value The attribute value */ public function setAttribute(string $name, $value); /** * Returns all the necessary state of the object for serialization purposes. */ public function __serialize(): array; /** * Restores the object state from an array given by __serialize(). */ public function __unserialize(array $data): void; /** * @return string * * @deprecated since Symfony 5.3, use getUserIdentifier() instead */ public function getUsername(); } Authentication/Token/UsernamePasswordToken.php 0000644 00000006303 15120140445 0015615 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication\Token; use Symfony\Component\Security\Core\User\UserInterface; /** * UsernamePasswordToken implements a username and password token. * * @author Fabien Potencier <fabien@symfony.com> */ class UsernamePasswordToken extends AbstractToken { private $credentials; private $firewallName; /** * @param UserInterface $user * @param string[] $roles * * @throws \InvalidArgumentException */ public function __construct($user, /* string */ $firewallName, /* array */ $roles = []) { if (\is_string($roles)) { trigger_deprecation('symfony/security-core', '5.4', 'The $credentials argument of "%s" is deprecated.', static::class.'::__construct'); $credentials = $firewallName; $firewallName = $roles; $roles = \func_num_args() > 3 ? func_get_arg(3) : []; } parent::__construct($roles); if ('' === $firewallName) { throw new \InvalidArgumentException('$firewallName must not be empty.'); } $this->setUser($user); $this->credentials = $credentials ?? null; $this->firewallName = $firewallName; parent::setAuthenticated(\count($roles) > 0, false); } /** * {@inheritdoc} */ public function setAuthenticated(bool $isAuthenticated) { if ($isAuthenticated) { throw new \LogicException('Cannot set this token to trusted after instantiation.'); } parent::setAuthenticated(false, false); } /** * {@inheritdoc} */ public function getCredentials() { trigger_deprecation('symfony/security-core', '5.4', 'Method "%s" is deprecated.', __METHOD__); return $this->credentials; } /** * Returns the provider key. * * @return string The provider key * * @deprecated since Symfony 5.2, use getFirewallName() instead */ public function getProviderKey() { if (1 !== \func_num_args() || true !== func_get_arg(0)) { trigger_deprecation('symfony/security-core', '5.2', 'Method "%s" is deprecated, use "getFirewallName()" instead.', __METHOD__); } return $this->firewallName; } public function getFirewallName(): string { return $this->getProviderKey(true); } /** * {@inheritdoc} */ public function eraseCredentials() { parent::eraseCredentials(); $this->credentials = null; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->credentials, $this->firewallName, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->credentials, $this->firewallName, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Authentication/AuthenticationManagerInterface.php 0000644 00000001655 15120140445 0016332 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; /** * AuthenticationManagerInterface is the interface for authentication managers, * which process Token authentication. * * @author Fabien Potencier <fabien@symfony.com> * * @internal since Symfony 5.3 */ interface AuthenticationManagerInterface { /** * Attempts to authenticate a TokenInterface object. * * @return TokenInterface * * @throws AuthenticationException if the authentication fails */ public function authenticate(TokenInterface $token); } Authentication/AuthenticationProviderManager.php 0000644 00000012066 15120140445 0016222 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication; use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException; use Symfony\Component\Security\Core\Authentication\Provider\AuthenticationProviderInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\AuthenticationEvents; use Symfony\Component\Security\Core\Event\AuthenticationFailureEvent; use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent; use Symfony\Component\Security\Core\Exception\AccountStatusException; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Core\Exception\ProviderNotFoundException; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', AuthenticationProviderManager::class); // Help opcache.preload discover always-needed symbols class_exists(AuthenticationEvents::class); class_exists(AuthenticationFailureEvent::class); class_exists(AuthenticationSuccessEvent::class); /** * AuthenticationProviderManager uses a list of AuthenticationProviderInterface * instances to authenticate a Token. * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @deprecated since Symfony 5.3, use the new authenticator system instead */ class AuthenticationProviderManager implements AuthenticationManagerInterface { private $providers; private $eraseCredentials; private $eventDispatcher; /** * @param iterable<mixed, AuthenticationProviderInterface> $providers An iterable with AuthenticationProviderInterface instances as values * @param bool $eraseCredentials Whether to erase credentials after authentication or not * * @throws \InvalidArgumentException */ public function __construct(iterable $providers, bool $eraseCredentials = true) { if (!$providers) { throw new \InvalidArgumentException('You must at least add one authentication provider.'); } $this->providers = $providers; $this->eraseCredentials = $eraseCredentials; } public function setEventDispatcher(EventDispatcherInterface $dispatcher) { $this->eventDispatcher = $dispatcher; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { $lastException = null; $result = null; foreach ($this->providers as $provider) { if (!$provider instanceof AuthenticationProviderInterface) { throw new \InvalidArgumentException(sprintf('Provider "%s" must implement the AuthenticationProviderInterface.', get_debug_type($provider))); } if (!$provider->supports($token)) { continue; } try { $result = $provider->authenticate($token); if (null !== $result) { break; } } catch (AccountStatusException $e) { $lastException = $e; break; } catch (AuthenticationException $e) { $lastException = $e; } catch (InvalidPasswordException $e) { $lastException = new BadCredentialsException('Bad credentials.', 0, $e); } } if (null !== $result) { if (true === $this->eraseCredentials) { $result->eraseCredentials(); } if (null !== $this->eventDispatcher) { $this->eventDispatcher->dispatch(new AuthenticationSuccessEvent($result), AuthenticationEvents::AUTHENTICATION_SUCCESS); } // @deprecated since Symfony 5.3 if ($result->getUser() instanceof UserInterface && !method_exists($result->getUser(), 'getUserIdentifier')) { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "getUserIdentifier(): string" in user class "%s" is deprecated. This method will replace "getUsername()" in Symfony 6.0.', get_debug_type($result->getUser())); } return $result; } if (null === $lastException) { $lastException = new ProviderNotFoundException(sprintf('No Authentication Provider found for token of class "%s".', \get_class($token))); } if (null !== $this->eventDispatcher) { $this->eventDispatcher->dispatch(new AuthenticationFailureEvent($token, $lastException), AuthenticationEvents::AUTHENTICATION_FAILURE); } $lastException->setToken($token); throw $lastException; } } Authentication/AuthenticationTrustResolver.php 0000644 00000003742 15120140445 0016001 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication; use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\RememberMeToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * The default implementation of the authentication trust resolver. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class AuthenticationTrustResolver implements AuthenticationTrustResolverInterface { public function isAuthenticated(TokenInterface $token = null): bool { return $token && $token->getUser() // @deprecated since Symfony 5.4, TokenInterface::isAuthenticated() and AnonymousToken no longer exists in 6.0 && !$token instanceof AnonymousToken && (!method_exists($token, 'isAuthenticated') || $token->isAuthenticated(false)); } /** * {@inheritdoc} */ public function isAnonymous(TokenInterface $token = null/* , $deprecation = true */) { if (1 === \func_num_args() || false !== func_get_arg(1)) { trigger_deprecation('symfony/security-core', '5.4', 'The "%s()" method is deprecated, use "isAuthenticated()" or "isFullFledged()" if you want to check if the request is (fully) authenticated.', __METHOD__); } return $token instanceof AnonymousToken || ($token && !$token->getUser()); } /** * {@inheritdoc} */ public function isRememberMe(TokenInterface $token = null) { return $token && $token instanceof RememberMeToken; } /** * {@inheritdoc} */ public function isFullFledged(TokenInterface $token = null) { return $token && !$this->isAnonymous($token, false) && !$this->isRememberMe($token); } } Authentication/AuthenticationTrustResolverInterface.php 0000644 00000002532 15120140445 0017616 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * Interface for resolving the authentication status of a given token. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @method bool isAuthenticated(TokenInterface $token = null) */ interface AuthenticationTrustResolverInterface { /** * Resolves whether the passed token implementation is authenticated * anonymously. * * If null is passed, the method must return false. * * @return bool * * @deprecated since Symfony 5.4, use !isAuthenticated() instead */ public function isAnonymous(TokenInterface $token = null); /** * Resolves whether the passed token implementation is authenticated * using remember-me capabilities. * * @return bool */ public function isRememberMe(TokenInterface $token = null); /** * Resolves whether the passed token implementation is fully authenticated. * * @return bool */ public function isFullFledged(TokenInterface $token = null); } Authorization/Strategy/AccessDecisionStrategyInterface.php 0000644 00000001116 15120140445 0020135 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; /** * A strategy for turning a stream of votes into a final decision. * * @author Alexander M. Turek <me@derrabus.de> */ interface AccessDecisionStrategyInterface { /** * @param \Traversable<int> $results */ public function decide(\Traversable $results): bool; } Authorization/Strategy/AffirmativeStrategy.php 0000644 00000003073 15120140445 0015676 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Grants access if any voter returns an affirmative response. * * If all voters abstained from voting, the decision will be based on the * allowIfAllAbstainDecisions property value (defaults to false). * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander M. Turek <me@derrabus.de> */ final class AffirmativeStrategy implements AccessDecisionStrategyInterface, \Stringable { /** * @var bool */ private $allowIfAllAbstainDecisions; public function __construct(bool $allowIfAllAbstainDecisions = false) { $this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions; } /** * {@inheritdoc} */ public function decide(\Traversable $results): bool { $deny = 0; foreach ($results as $result) { if (VoterInterface::ACCESS_GRANTED === $result) { return true; } if (VoterInterface::ACCESS_DENIED === $result) { ++$deny; } } if ($deny > 0) { return false; } return $this->allowIfAllAbstainDecisions; } public function __toString(): string { return 'affirmative'; } } Authorization/Strategy/ConsensusStrategy.php 0000644 00000004267 15120140445 0015427 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Grants access if there is consensus of granted against denied responses. * * Consensus means majority-rule (ignoring abstains) rather than unanimous * agreement (ignoring abstains). If you require unanimity, see * UnanimousBased. * * If there were an equal number of grant and deny votes, the decision will * be based on the allowIfEqualGrantedDeniedDecisions property value * (defaults to true). * * If all voters abstained from voting, the decision will be based on the * allowIfAllAbstainDecisions property value (defaults to false). * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander M. Turek <me@derrabus.de> */ final class ConsensusStrategy implements AccessDecisionStrategyInterface, \Stringable { private $allowIfAllAbstainDecisions; private $allowIfEqualGrantedDeniedDecisions; public function __construct(bool $allowIfAllAbstainDecisions = false, bool $allowIfEqualGrantedDeniedDecisions = true) { $this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions; $this->allowIfEqualGrantedDeniedDecisions = $allowIfEqualGrantedDeniedDecisions; } public function decide(\Traversable $results): bool { $grant = 0; $deny = 0; foreach ($results as $result) { if (VoterInterface::ACCESS_GRANTED === $result) { ++$grant; } elseif (VoterInterface::ACCESS_DENIED === $result) { ++$deny; } } if ($grant > $deny) { return true; } if ($deny > $grant) { return false; } if ($grant > 0) { return $this->allowIfEqualGrantedDeniedDecisions; } return $this->allowIfAllAbstainDecisions; } public function __toString(): string { return 'consensus'; } } Authorization/Strategy/PriorityStrategy.php 0000644 00000003023 15120140445 0015255 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Grant or deny access depending on the first voter that does not abstain. * The priority of voters can be used to overrule a decision. * * If all voters abstained from voting, the decision will be based on the * allowIfAllAbstainDecisions property value (defaults to false). * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander M. Turek <me@derrabus.de> */ final class PriorityStrategy implements AccessDecisionStrategyInterface, \Stringable { private $allowIfAllAbstainDecisions; public function __construct(bool $allowIfAllAbstainDecisions = false) { $this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions; } /** * {@inheritdoc} */ public function decide(\Traversable $results): bool { foreach ($results as $result) { if (VoterInterface::ACCESS_GRANTED === $result) { return true; } if (VoterInterface::ACCESS_DENIED === $result) { return false; } } return $this->allowIfAllAbstainDecisions; } public function __toString(): string { return 'priority'; } } Authorization/Strategy/UnanimousStrategy.php 0000644 00000003064 15120140445 0015417 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Strategy; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Grants access if only grant (or abstain) votes were received. * * If all voters abstained from voting, the decision will be based on the * allowIfAllAbstainDecisions property value (defaults to false). * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander M. Turek <me@derrabus.de> */ final class UnanimousStrategy implements AccessDecisionStrategyInterface, \Stringable { private $allowIfAllAbstainDecisions; public function __construct(bool $allowIfAllAbstainDecisions = false) { $this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions; } /** * {@inheritdoc} */ public function decide(\Traversable $results): bool { $grant = 0; foreach ($results as $result) { if (VoterInterface::ACCESS_DENIED === $result) { return false; } if (VoterInterface::ACCESS_GRANTED === $result) { ++$grant; } } // no deny votes if ($grant > 0) { return true; } return $this->allowIfAllAbstainDecisions; } public function __toString(): string { return 'unanimous'; } } Authorization/Voter/AuthenticatedVoter.php 0000644 00000012665 15120140445 0015024 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolverInterface; use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * AuthenticatedVoter votes if an attribute like IS_AUTHENTICATED_FULLY, * IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED is present. * * This list is most restrictive to least restrictive checking. * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class AuthenticatedVoter implements CacheableVoterInterface { public const IS_AUTHENTICATED_FULLY = 'IS_AUTHENTICATED_FULLY'; public const IS_AUTHENTICATED_REMEMBERED = 'IS_AUTHENTICATED_REMEMBERED'; /** * @deprecated since Symfony 5.4 */ public const IS_AUTHENTICATED_ANONYMOUSLY = 'IS_AUTHENTICATED_ANONYMOUSLY'; /** * @deprecated since Symfony 5.4 */ public const IS_ANONYMOUS = 'IS_ANONYMOUS'; public const IS_AUTHENTICATED = 'IS_AUTHENTICATED'; public const IS_IMPERSONATOR = 'IS_IMPERSONATOR'; public const IS_REMEMBERED = 'IS_REMEMBERED'; public const PUBLIC_ACCESS = 'PUBLIC_ACCESS'; private $authenticationTrustResolver; public function __construct(AuthenticationTrustResolverInterface $authenticationTrustResolver) { $this->authenticationTrustResolver = $authenticationTrustResolver; } /** * {@inheritdoc} */ public function vote(TokenInterface $token, $subject, array $attributes) { if ($attributes === [self::PUBLIC_ACCESS]) { return VoterInterface::ACCESS_GRANTED; } $result = VoterInterface::ACCESS_ABSTAIN; foreach ($attributes as $attribute) { if (null === $attribute || (self::IS_AUTHENTICATED_FULLY !== $attribute && self::IS_AUTHENTICATED_REMEMBERED !== $attribute && self::IS_AUTHENTICATED_ANONYMOUSLY !== $attribute && self::IS_AUTHENTICATED !== $attribute && self::IS_ANONYMOUS !== $attribute && self::IS_IMPERSONATOR !== $attribute && self::IS_REMEMBERED !== $attribute)) { continue; } $result = VoterInterface::ACCESS_DENIED; if (self::IS_AUTHENTICATED_FULLY === $attribute && $this->authenticationTrustResolver->isFullFledged($token)) { return VoterInterface::ACCESS_GRANTED; } if (self::IS_AUTHENTICATED_REMEMBERED === $attribute && ($this->authenticationTrustResolver->isRememberMe($token) || $this->authenticationTrustResolver->isFullFledged($token))) { return VoterInterface::ACCESS_GRANTED; } if (self::IS_AUTHENTICATED_ANONYMOUSLY === $attribute && ($this->authenticationTrustResolver->isAnonymous($token) || $this->authenticationTrustResolver->isRememberMe($token) || $this->authenticationTrustResolver->isFullFledged($token))) { trigger_deprecation('symfony/security-core', '5.4', 'The "IS_AUTHENTICATED_ANONYMOUSLY" security attribute is deprecated, use "PUBLIC_ACCESS" for public resources, otherwise use "IS_AUTHENTICATED" or "IS_AUTHENTICATED_FULLY" instead if you want to check if the request is (fully) authenticated.'); return VoterInterface::ACCESS_GRANTED; } // @deprecated $this->authenticationTrustResolver must implement isAuthenticated() in 6.0 if (self::IS_AUTHENTICATED === $attribute && (method_exists($this->authenticationTrustResolver, 'isAuthenticated') ? $this->authenticationTrustResolver->isAuthenticated($token) : ($token && $token->getUser()))) { return VoterInterface::ACCESS_GRANTED; } if (self::IS_REMEMBERED === $attribute && $this->authenticationTrustResolver->isRememberMe($token)) { return VoterInterface::ACCESS_GRANTED; } if (self::IS_ANONYMOUS === $attribute && $this->authenticationTrustResolver->isAnonymous($token)) { trigger_deprecation('symfony/security-core', '5.4', 'The "IS_ANONYMOUSLY" security attribute is deprecated, anonymous no longer exists in version 6.'); return VoterInterface::ACCESS_GRANTED; } if (self::IS_IMPERSONATOR === $attribute && $token instanceof SwitchUserToken) { return VoterInterface::ACCESS_GRANTED; } } return $result; } public function supportsAttribute(string $attribute): bool { return \in_array($attribute, [ self::IS_AUTHENTICATED_FULLY, self::IS_AUTHENTICATED_REMEMBERED, self::IS_AUTHENTICATED_ANONYMOUSLY, self::IS_AUTHENTICATED, self::IS_ANONYMOUS, self::IS_IMPERSONATOR, self::IS_REMEMBERED, self::PUBLIC_ACCESS, ], true); } public function supportsType(string $subjectType): bool { return true; } } Authorization/Voter/CacheableVoterInterface.php 0000644 00000001557 15120140445 0015710 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; /** * Let voters expose the attributes and types they care about. * * By returning false to either `supportsAttribute` or `supportsType`, the * voter will never be called for the specified attribute or subject. * * @author Jérémy Derussé <jeremy@derusse.com> */ interface CacheableVoterInterface extends VoterInterface { public function supportsAttribute(string $attribute): bool; /** * @param string $subjectType The type of the subject inferred by `get_class` or `get_debug_type` */ public function supportsType(string $subjectType): bool; } Authorization/Voter/ExpressionVoter.php 0000644 00000006376 15120140445 0014403 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolverInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\Authorization\ExpressionLanguage; use Symfony\Component\Security\Core\Role\RoleHierarchyInterface; /** * ExpressionVoter votes based on the evaluation of an expression. * * @author Fabien Potencier <fabien@symfony.com> */ class ExpressionVoter implements CacheableVoterInterface { private $expressionLanguage; private $trustResolver; private $authChecker; private $roleHierarchy; public function __construct(ExpressionLanguage $expressionLanguage, AuthenticationTrustResolverInterface $trustResolver, AuthorizationCheckerInterface $authChecker, RoleHierarchyInterface $roleHierarchy = null) { $this->expressionLanguage = $expressionLanguage; $this->trustResolver = $trustResolver; $this->authChecker = $authChecker; $this->roleHierarchy = $roleHierarchy; } public function supportsAttribute(string $attribute): bool { return false; } public function supportsType(string $subjectType): bool { return true; } /** * {@inheritdoc} */ public function vote(TokenInterface $token, $subject, array $attributes) { $result = VoterInterface::ACCESS_ABSTAIN; $variables = null; foreach ($attributes as $attribute) { if (!$attribute instanceof Expression) { continue; } if (null === $variables) { $variables = $this->getVariables($token, $subject); } $result = VoterInterface::ACCESS_DENIED; if ($this->expressionLanguage->evaluate($attribute, $variables)) { return VoterInterface::ACCESS_GRANTED; } } return $result; } private function getVariables(TokenInterface $token, $subject): array { $roleNames = $token->getRoleNames(); if (null !== $this->roleHierarchy) { $roleNames = $this->roleHierarchy->getReachableRoleNames($roleNames); } $variables = [ 'token' => $token, 'user' => $token->getUser(), 'object' => $subject, 'subject' => $subject, 'role_names' => $roleNames, 'trust_resolver' => $this->trustResolver, 'auth_checker' => $this->authChecker, ]; // this is mainly to propose a better experience when the expression is used // in an access control rule, as the developer does not know that it's going // to be handled by this voter if ($subject instanceof Request) { $variables['request'] = $subject; } return $variables; } } Authorization/Voter/RoleHierarchyVoter.php 0000644 00000002055 15120140445 0014772 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Role\RoleHierarchyInterface; /** * RoleHierarchyVoter uses a RoleHierarchy to determine the roles granted to * the user before voting. * * @author Fabien Potencier <fabien@symfony.com> */ class RoleHierarchyVoter extends RoleVoter { private $roleHierarchy; public function __construct(RoleHierarchyInterface $roleHierarchy, string $prefix = 'ROLE_') { $this->roleHierarchy = $roleHierarchy; parent::__construct($prefix); } /** * {@inheritdoc} */ protected function extractRoles(TokenInterface $token) { return $this->roleHierarchy->getReachableRoleNames($token->getRoleNames()); } } Authorization/Voter/RoleVoter.php 0000644 00000003635 15120140445 0013140 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * RoleVoter votes if any attribute starts with a given prefix. * * @author Fabien Potencier <fabien@symfony.com> */ class RoleVoter implements CacheableVoterInterface { private $prefix; public function __construct(string $prefix = 'ROLE_') { $this->prefix = $prefix; } /** * {@inheritdoc} */ public function vote(TokenInterface $token, $subject, array $attributes) { $result = VoterInterface::ACCESS_ABSTAIN; $roles = $this->extractRoles($token); foreach ($attributes as $attribute) { if (!\is_string($attribute) || !str_starts_with($attribute, $this->prefix)) { continue; } if ('ROLE_PREVIOUS_ADMIN' === $attribute) { trigger_deprecation('symfony/security-core', '5.1', 'The ROLE_PREVIOUS_ADMIN role is deprecated and will be removed in version 6.0, use the IS_IMPERSONATOR attribute instead.'); } $result = VoterInterface::ACCESS_DENIED; foreach ($roles as $role) { if ($attribute === $role) { return VoterInterface::ACCESS_GRANTED; } } } return $result; } public function supportsAttribute(string $attribute): bool { return str_starts_with($attribute, $this->prefix); } public function supportsType(string $subjectType): bool { return true; } protected function extractRoles(TokenInterface $token) { return $token->getRoleNames(); } } Authorization/Voter/TraceableVoter.php 0000644 00000003304 15120140445 0014112 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Event\VoteEvent; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; /** * Decorates voter classes to send result events. * * @author Laurent VOULLEMIER <laurent.voullemier@gmail.com> * * @internal */ class TraceableVoter implements CacheableVoterInterface { private $voter; private $eventDispatcher; public function __construct(VoterInterface $voter, EventDispatcherInterface $eventDispatcher) { $this->voter = $voter; $this->eventDispatcher = $eventDispatcher; } public function vote(TokenInterface $token, $subject, array $attributes): int { $result = $this->voter->vote($token, $subject, $attributes); $this->eventDispatcher->dispatch(new VoteEvent($this->voter, $subject, $attributes, $result), 'debug.security.authorization.vote'); return $result; } public function getDecoratedVoter(): VoterInterface { return $this->voter; } public function supportsAttribute(string $attribute): bool { return !$this->voter instanceof CacheableVoterInterface || $this->voter->supportsAttribute($attribute); } public function supportsType(string $subjectType): bool { return !$this->voter instanceof CacheableVoterInterface || $this->voter->supportsType($subjectType); } } Authorization/Voter/Voter.php 0000644 00000006411 15120140445 0012311 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * Voter is an abstract default implementation of a voter. * * @author Roman Marintšenko <inoryy@gmail.com> * @author Grégoire Pineau <lyrixx@lyrixx.info> */ abstract class Voter implements VoterInterface, CacheableVoterInterface { /** * {@inheritdoc} */ public function vote(TokenInterface $token, $subject, array $attributes) { // abstain vote by default in case none of the attributes are supported $vote = self::ACCESS_ABSTAIN; foreach ($attributes as $attribute) { try { if (!$this->supports($attribute, $subject)) { continue; } } catch (\TypeError $e) { if (\PHP_VERSION_ID < 80000) { if (0 === strpos($e->getMessage(), 'Argument 1 passed to') && false !== strpos($e->getMessage(), '::supports() must be of the type string')) { continue; } } elseif (false !== strpos($e->getMessage(), 'supports(): Argument #1')) { continue; } throw $e; } // as soon as at least one attribute is supported, default is to deny access $vote = self::ACCESS_DENIED; if ($this->voteOnAttribute($attribute, $subject, $token)) { // grant access as soon as at least one attribute returns a positive response return self::ACCESS_GRANTED; } } return $vote; } /** * Return false if your voter doesn't support the given attribute. Symfony will cache * that decision and won't call your voter again for that attribute. */ public function supportsAttribute(string $attribute): bool { return true; } /** * Return false if your voter doesn't support the given subject type. Symfony will cache * that decision and won't call your voter again for that subject type. * * @param string $subjectType The type of the subject inferred by `get_class()` or `get_debug_type()` */ public function supportsType(string $subjectType): bool { return true; } /** * Determines if the attribute and subject are supported by this voter. * * @param string $attribute An attribute * @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type * * @return bool */ abstract protected function supports(string $attribute, $subject); /** * Perform a single access check operation on a given attribute, subject and token. * It is safe to assume that $attribute and $subject already passed the "supports()" method check. * * @param mixed $subject * * @return bool */ abstract protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token); } Authorization/Voter/VoterInterface.php 0000644 00000002175 15120140445 0014135 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization\Voter; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * VoterInterface is the interface implemented by all voters. * * @author Fabien Potencier <fabien@symfony.com> */ interface VoterInterface { public const ACCESS_GRANTED = 1; public const ACCESS_ABSTAIN = 0; public const ACCESS_DENIED = -1; /** * Returns the vote for the given parameters. * * This method must return one of the following constants: * ACCESS_GRANTED, ACCESS_DENIED, or ACCESS_ABSTAIN. * * @param mixed $subject The subject to secure * @param array $attributes An array of attributes associated with the method being invoked * * @return int either ACCESS_GRANTED, ACCESS_ABSTAIN, or ACCESS_DENIED */ public function vote(TokenInterface $token, $subject, array $attributes); } Authorization/AccessDecisionManager.php 0000644 00000017006 15120140445 0014267 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Strategy\AccessDecisionStrategyInterface; use Symfony\Component\Security\Core\Authorization\Strategy\AffirmativeStrategy; use Symfony\Component\Security\Core\Authorization\Strategy\ConsensusStrategy; use Symfony\Component\Security\Core\Authorization\Strategy\PriorityStrategy; use Symfony\Component\Security\Core\Authorization\Strategy\UnanimousStrategy; use Symfony\Component\Security\Core\Authorization\Voter\CacheableVoterInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; use Symfony\Component\Security\Core\Exception\InvalidArgumentException; /** * AccessDecisionManager is the base class for all access decision managers * that use decision voters. * * @author Fabien Potencier <fabien@symfony.com> * * @final since Symfony 5.4 */ class AccessDecisionManager implements AccessDecisionManagerInterface { /** * @deprecated use {@see AffirmativeStrategy} instead */ public const STRATEGY_AFFIRMATIVE = 'affirmative'; /** * @deprecated use {@see ConsensusStrategy} instead */ public const STRATEGY_CONSENSUS = 'consensus'; /** * @deprecated use {@see UnanimousStrategy} instead */ public const STRATEGY_UNANIMOUS = 'unanimous'; /** * @deprecated use {@see PriorityStrategy} instead */ public const STRATEGY_PRIORITY = 'priority'; private const VALID_VOTES = [ VoterInterface::ACCESS_GRANTED => true, VoterInterface::ACCESS_DENIED => true, VoterInterface::ACCESS_ABSTAIN => true, ]; private $voters; private $votersCacheAttributes; private $votersCacheObject; private $strategy; /** * @param iterable<mixed, VoterInterface> $voters An array or an iterator of VoterInterface instances * @param AccessDecisionStrategyInterface|null $strategy The vote strategy * * @throws \InvalidArgumentException */ public function __construct(iterable $voters = [], /* AccessDecisionStrategyInterface */ $strategy = null) { $this->voters = $voters; if (\is_string($strategy)) { trigger_deprecation('symfony/security-core', '5.4', 'Passing the access decision strategy as a string is deprecated, pass an instance of "%s" instead.', AccessDecisionStrategyInterface::class); $allowIfAllAbstainDecisions = 3 <= \func_num_args() && func_get_arg(2); $allowIfEqualGrantedDeniedDecisions = 4 > \func_num_args() || func_get_arg(3); $strategy = $this->createStrategy($strategy, $allowIfAllAbstainDecisions, $allowIfEqualGrantedDeniedDecisions); } elseif (null !== $strategy && !$strategy instanceof AccessDecisionStrategyInterface) { throw new \TypeError(sprintf('"%s": Parameter #2 ($strategy) is expected to be an instance of "%s" or null, "%s" given.', __METHOD__, AccessDecisionStrategyInterface::class, get_debug_type($strategy))); } $this->strategy = $strategy ?? new AffirmativeStrategy(); } /** * @param bool $allowMultipleAttributes Whether to allow passing multiple values to the $attributes array * * {@inheritdoc} */ public function decide(TokenInterface $token, array $attributes, $object = null/* , bool $allowMultipleAttributes = false */) { $allowMultipleAttributes = 3 < \func_num_args() && func_get_arg(3); // Special case for AccessListener, do not remove the right side of the condition before 6.0 if (\count($attributes) > 1 && !$allowMultipleAttributes) { throw new InvalidArgumentException(sprintf('Passing more than one Security attribute to "%s()" is not supported.', __METHOD__)); } return $this->strategy->decide( $this->collectResults($token, $attributes, $object) ); } /** * @param mixed $object * * @return \Traversable<int, int> */ private function collectResults(TokenInterface $token, array $attributes, $object): \Traversable { foreach ($this->getVoters($attributes, $object) as $voter) { $result = $voter->vote($token, $object, $attributes); if (!\is_int($result) || !(self::VALID_VOTES[$result] ?? false)) { trigger_deprecation('symfony/security-core', '5.3', 'Returning "%s" in "%s::vote()" is deprecated, return one of "%s" constants: "ACCESS_GRANTED", "ACCESS_DENIED" or "ACCESS_ABSTAIN".', var_export($result, true), get_debug_type($voter), VoterInterface::class); } yield $result; } } /** * @throws \InvalidArgumentException if the $strategy is invalid */ private function createStrategy(string $strategy, bool $allowIfAllAbstainDecisions, bool $allowIfEqualGrantedDeniedDecisions): AccessDecisionStrategyInterface { switch ($strategy) { case self::STRATEGY_AFFIRMATIVE: return new AffirmativeStrategy($allowIfAllAbstainDecisions); case self::STRATEGY_CONSENSUS: return new ConsensusStrategy($allowIfAllAbstainDecisions, $allowIfEqualGrantedDeniedDecisions); case self::STRATEGY_UNANIMOUS: return new UnanimousStrategy($allowIfAllAbstainDecisions); case self::STRATEGY_PRIORITY: return new PriorityStrategy($allowIfAllAbstainDecisions); } throw new \InvalidArgumentException(sprintf('The strategy "%s" is not supported.', $strategy)); } /** * @return iterable<mixed, VoterInterface> */ private function getVoters(array $attributes, $object = null): iterable { $keyAttributes = []; foreach ($attributes as $attribute) { $keyAttributes[] = \is_string($attribute) ? $attribute : null; } // use `get_class` to handle anonymous classes $keyObject = \is_object($object) ? \get_class($object) : get_debug_type($object); foreach ($this->voters as $key => $voter) { if (!$voter instanceof CacheableVoterInterface) { yield $voter; continue; } $supports = true; // The voter supports the attributes if it supports at least one attribute of the list foreach ($keyAttributes as $keyAttribute) { if (null === $keyAttribute) { $supports = true; } elseif (!isset($this->votersCacheAttributes[$keyAttribute][$key])) { $this->votersCacheAttributes[$keyAttribute][$key] = $supports = $voter->supportsAttribute($keyAttribute); } else { $supports = $this->votersCacheAttributes[$keyAttribute][$key]; } if ($supports) { break; } } if (!$supports) { continue; } if (!isset($this->votersCacheObject[$keyObject][$key])) { $this->votersCacheObject[$keyObject][$key] = $supports = $voter->supportsType($keyObject); } else { $supports = $this->votersCacheObject[$keyObject][$key]; } if (!$supports) { continue; } yield $voter; } } } Authorization/AccessDecisionManagerInterface.php 0000644 00000001557 15120140445 0016114 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * AccessDecisionManagerInterface makes authorization decisions. * * @author Fabien Potencier <fabien@symfony.com> */ interface AccessDecisionManagerInterface { /** * Decides whether the access is possible or not. * * @param array $attributes An array of attributes associated with the method being invoked * @param mixed $object The object to secure * * @return bool */ public function decide(TokenInterface $token, array $attributes, $object = null); } Authorization/AuthorizationChecker.php 0000644 00000010004 15120140445 0014231 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\NullToken; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException; /** * AuthorizationChecker is the main authorization point of the Security component. * * It gives access to the token representing the current user authentication. * * @author Fabien Potencier <fabien@symfony.com> * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class AuthorizationChecker implements AuthorizationCheckerInterface { private $tokenStorage; private $accessDecisionManager; private $authenticationManager; private $alwaysAuthenticate; private $exceptionOnNoToken; public function __construct(TokenStorageInterface $tokenStorage, /* AccessDecisionManagerInterface */ $accessDecisionManager, /* bool */ $alwaysAuthenticate = false, /* bool */ $exceptionOnNoToken = true) { if ($accessDecisionManager instanceof AuthenticationManagerInterface) { trigger_deprecation('symfony/security-core', '5.4', 'The $autenticationManager argument of "%s" is deprecated.', __METHOD__); $this->authenticationManager = $accessDecisionManager; $accessDecisionManager = $alwaysAuthenticate; $alwaysAuthenticate = $exceptionOnNoToken; $exceptionOnNoToken = \func_num_args() > 4 ? func_get_arg(4) : true; } if (false !== $alwaysAuthenticate) { trigger_deprecation('symfony/security-core', '5.4', 'Not setting the 4th argument of "%s" to "false" is deprecated.', __METHOD__); } if (false !== $exceptionOnNoToken) { trigger_deprecation('symfony/security-core', '5.4', 'Not setting the 5th argument of "%s" to "false" is deprecated.', __METHOD__); } if (!$accessDecisionManager instanceof AccessDecisionManagerInterface) { throw new \TypeError(sprintf('Argument 2 of "%s" must be instance of "%s", "%s" given.', __METHOD__, AccessDecisionManagerInterface::class, get_debug_type($accessDecisionManager))); } $this->tokenStorage = $tokenStorage; $this->accessDecisionManager = $accessDecisionManager; $this->alwaysAuthenticate = $alwaysAuthenticate; $this->exceptionOnNoToken = $exceptionOnNoToken; } /** * {@inheritdoc} * * @throws AuthenticationCredentialsNotFoundException when the token storage has no authentication token and $exceptionOnNoToken is set to true */ final public function isGranted($attribute, $subject = null): bool { $token = $this->tokenStorage->getToken(); if (!$token || !$token->getUser()) { if ($this->exceptionOnNoToken) { throw new AuthenticationCredentialsNotFoundException('The token storage contains no authentication token. One possible reason may be that there is no firewall configured for this URL.'); } $token = new NullToken(); } else { $authenticated = true; // @deprecated since Symfony 5.4 if ($this->alwaysAuthenticate || !$authenticated = $token->isAuthenticated(false)) { if (!($authenticated ?? true)) { trigger_deprecation('symfony/core', '5.4', 'Returning false from "%s::isAuthenticated()" is deprecated, return null from "getUser()" instead.', get_debug_type($token)); } $this->tokenStorage->setToken($token = $this->authenticationManager->authenticate($token)); } } return $this->accessDecisionManager->decide($token, [$attribute], $subject); } } Authorization/AuthorizationCheckerInterface.php 0000644 00000001511 15120140445 0016055 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; /** * The AuthorizationCheckerInterface. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface AuthorizationCheckerInterface { /** * Checks if the attribute is granted against the current authentication token and optionally supplied subject. * * @param mixed $attribute A single attribute to vote on (can be of any type, string and instance of Expression are supported by the core) * @param mixed $subject * * @return bool */ public function isGranted($attribute, $subject = null); } Authorization/ExpressionLanguage.php 0000644 00000002604 15120140445 0013716 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\ExpressionLanguage\ExpressionLanguage as BaseExpressionLanguage; if (!class_exists(BaseExpressionLanguage::class)) { throw new \LogicException(sprintf('The "%s" class requires the "ExpressionLanguage" component. Try running "composer require symfony/expression-language".', ExpressionLanguage::class)); } else { // Help opcache.preload discover always-needed symbols class_exists(ExpressionLanguageProvider::class); /** * Adds some function to the default ExpressionLanguage. * * @author Fabien Potencier <fabien@symfony.com> * * @see ExpressionLanguageProvider */ class ExpressionLanguage extends BaseExpressionLanguage { /** * {@inheritdoc} */ public function __construct(CacheItemPoolInterface $cache = null, array $providers = []) { // prepend the default provider to let users override it easily array_unshift($providers, new ExpressionLanguageProvider()); parent::__construct($cache, $providers); } } } Authorization/ExpressionLanguageProvider.php 0000644 00000005613 15120140445 0015434 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Symfony\Component\ExpressionLanguage\ExpressionFunction; use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter; /** * Define some ExpressionLanguage functions. * * @author Fabien Potencier <fabien@symfony.com> */ class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface { public function getFunctions() { return [ new ExpressionFunction('is_anonymous', function () { return 'trigger_deprecation("symfony/security-core", "5.4", "The \"is_anonymous()\" expression function is deprecated.") || ($token && $auth_checker->isGranted("IS_ANONYMOUS"))'; }, function (array $variables) { trigger_deprecation('symfony/security-core', '5.4', 'The "is_anonymous()" expression function is deprecated.'); return $variables['token'] && $variables['auth_checker']->isGranted('IS_ANONYMOUS'); }), // @deprecated remove the ternary and always use IS_AUTHENTICATED in 6.0 new ExpressionFunction('is_authenticated', function () { return 'defined("'.AuthenticatedVoter::class.'::IS_AUTHENTICATED") ? $auth_checker->isGranted("IS_AUTHENTICATED") : ($token && !$auth_checker->isGranted("IS_ANONYMOUS"))'; }, function (array $variables) { return \defined(AuthenticatedVoter::class.'::IS_AUTHENTICATED') ? $variables['auth_checker']->isGranted('IS_AUTHENTICATED') : ($variables['token'] && !$variables['auth_checker']->isGranted('IS_ANONYMOUS')); }), new ExpressionFunction('is_fully_authenticated', function () { return '$token && $auth_checker->isGranted("IS_AUTHENTICATED_FULLY")'; }, function (array $variables) { return $variables['token'] && $variables['auth_checker']->isGranted('IS_AUTHENTICATED_FULLY'); }), new ExpressionFunction('is_granted', function ($attributes, $object = 'null') { return sprintf('$auth_checker->isGranted(%s, %s)', $attributes, $object); }, function (array $variables, $attributes, $object = null) { return $variables['auth_checker']->isGranted($attributes, $object); }), new ExpressionFunction('is_remember_me', function () { return '$token && $auth_checker->isGranted("IS_REMEMBERED")'; }, function (array $variables) { return $variables['token'] && $variables['auth_checker']->isGranted('IS_REMEMBERED'); }), ]; } } Authorization/TraceableAccessDecisionManager.php 0000644 00000007145 15120140445 0016075 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authorization; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Decorates the original AccessDecisionManager class to log information * about the security voters and the decisions made by them. * * @author Javier Eguiluz <javier.eguiluz@gmail.com> * * @internal */ class TraceableAccessDecisionManager implements AccessDecisionManagerInterface { private $manager; private $strategy; /** @var iterable<mixed, VoterInterface> */ private $voters = []; private $decisionLog = []; // All decision logs private $currentLog = []; // Logs being filled in public function __construct(AccessDecisionManagerInterface $manager) { $this->manager = $manager; if ($this->manager instanceof AccessDecisionManager) { // The strategy and voters are stored in a private properties of the decorated service $reflection = new \ReflectionProperty(AccessDecisionManager::class, 'strategy'); $reflection->setAccessible(true); $this->strategy = $reflection->getValue($manager); $reflection = new \ReflectionProperty(AccessDecisionManager::class, 'voters'); $reflection->setAccessible(true); $this->voters = $reflection->getValue($manager); } } /** * {@inheritdoc} * * @param bool $allowMultipleAttributes Whether to allow passing multiple values to the $attributes array */ public function decide(TokenInterface $token, array $attributes, $object = null/* , bool $allowMultipleAttributes = false */): bool { $currentDecisionLog = [ 'attributes' => $attributes, 'object' => $object, 'voterDetails' => [], ]; $this->currentLog[] = &$currentDecisionLog; $result = $this->manager->decide($token, $attributes, $object, 3 < \func_num_args() && func_get_arg(3)); $currentDecisionLog['result'] = $result; $this->decisionLog[] = array_pop($this->currentLog); // Using a stack since decide can be called by voters return $result; } /** * Adds voter vote and class to the voter details. * * @param array $attributes attributes used for the vote * @param int $vote vote of the voter */ public function addVoterVote(VoterInterface $voter, array $attributes, int $vote) { $currentLogIndex = \count($this->currentLog) - 1; $this->currentLog[$currentLogIndex]['voterDetails'][] = [ 'voter' => $voter, 'attributes' => $attributes, 'vote' => $vote, ]; } public function getStrategy(): string { if (null === $this->strategy) { return '-'; } if (method_exists($this->strategy, '__toString')) { return (string) $this->strategy; } return get_debug_type($this->strategy); } /** * @return iterable<mixed, VoterInterface> */ public function getVoters(): iterable { return $this->voters; } public function getDecisionLog(): array { return $this->decisionLog; } } if (!class_exists(DebugAccessDecisionManager::class, false)) { class_alias(TraceableAccessDecisionManager::class, DebugAccessDecisionManager::class); } Encoder/BasePasswordEncoder.php 0000644 00000005315 15120140445 0012531 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', BasePasswordEncoder::class, CheckPasswordLengthTrait::class); /** * BasePasswordEncoder is the base class for all password encoders. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use CheckPasswordLengthTrait instead */ abstract class BasePasswordEncoder implements PasswordEncoderInterface { public const MAX_PASSWORD_LENGTH = 4096; /** * {@inheritdoc} */ public function needsRehash(string $encoded): bool { return false; } /** * Demerges a merge password and salt string. * * @return array An array where the first element is the password and the second the salt */ protected function demergePasswordAndSalt(string $mergedPasswordSalt) { if (empty($mergedPasswordSalt)) { return ['', '']; } $password = $mergedPasswordSalt; $salt = ''; $saltBegins = strrpos($mergedPasswordSalt, '{'); if (false !== $saltBegins && $saltBegins + 1 < \strlen($mergedPasswordSalt)) { $salt = substr($mergedPasswordSalt, $saltBegins + 1, -1); $password = substr($mergedPasswordSalt, 0, $saltBegins); } return [$password, $salt]; } /** * Merges a password and a salt. * * @return string * * @throws \InvalidArgumentException */ protected function mergePasswordAndSalt(string $password, ?string $salt) { if (empty($salt)) { return $password; } if (false !== strrpos($salt, '{') || false !== strrpos($salt, '}')) { throw new \InvalidArgumentException('Cannot use { or } in salt.'); } return $password.'{'.$salt.'}'; } /** * Compares two passwords. * * This method implements a constant-time algorithm to compare passwords to * avoid (remote) timing attacks. * * @return bool */ protected function comparePasswords(string $password1, string $password2) { return hash_equals($password1, $password2); } /** * Checks if the password is too long. * * @return bool */ protected function isPasswordTooLong(string $password) { return \strlen($password) > static::MAX_PASSWORD_LENGTH; } } Encoder/EncoderAwareInterface.php 0000644 00000001447 15120140445 0013016 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherAwareInterface; /** * @author Christophe Coevoet <stof@notk.org> * * @deprecated since Symfony 5.3, use {@link PasswordHasherAwareInterface} instead. */ interface EncoderAwareInterface { /** * Gets the name of the encoder used to encode the password. * * If the method returns null, the standard way to retrieve the encoder * will be used instead. * * @return string|null */ public function getEncoderName(); } Encoder/EncoderFactory.php 0000644 00000021713 15120140445 0011543 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherAwareInterface; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactory; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; use Symfony\Component\PasswordHasher\PasswordHasherInterface; use Symfony\Component\Security\Core\Exception\LogicException; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', EncoderFactory::class, PasswordHasherFactory::class); /** * A generic encoder factory implementation. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @deprecated since Symfony 5.3, use {@link PasswordHasherFactory} instead */ class EncoderFactory implements EncoderFactoryInterface { private $encoders; public function __construct(array $encoders) { $this->encoders = $encoders; } /** * {@inheritdoc} */ public function getEncoder($user) { $encoderKey = null; if (($user instanceof PasswordHasherAwareInterface && null !== $encoderName = $user->getPasswordHasherName()) || ($user instanceof EncoderAwareInterface && null !== $encoderName = $user->getEncoderName())) { if (!\array_key_exists($encoderName, $this->encoders)) { throw new \RuntimeException(sprintf('The encoder "%s" was not configured.', $encoderName)); } $encoderKey = $encoderName; } else { foreach ($this->encoders as $class => $encoder) { if ((\is_object($user) && $user instanceof $class) || (!\is_object($user) && (is_subclass_of($user, $class) || $user == $class))) { $encoderKey = $class; break; } } } if (null === $encoderKey) { throw new \RuntimeException(sprintf('No encoder has been configured for account "%s".', \is_object($user) ? get_debug_type($user) : $user)); } if (!$this->encoders[$encoderKey] instanceof PasswordEncoderInterface) { if ($this->encoders[$encoderKey] instanceof LegacyPasswordHasherInterface) { $this->encoders[$encoderKey] = new LegacyPasswordHasherEncoder($this->encoders[$encoderKey]); } elseif ($this->encoders[$encoderKey] instanceof PasswordHasherInterface) { $this->encoders[$encoderKey] = new PasswordHasherEncoder($this->encoders[$encoderKey]); } else { $this->encoders[$encoderKey] = $this->createEncoder($this->encoders[$encoderKey]); } } return $this->encoders[$encoderKey]; } /** * Creates the actual encoder instance. * * @throws \InvalidArgumentException */ private function createEncoder(array $config, bool $isExtra = false): PasswordEncoderInterface { if (isset($config['algorithm'])) { $rawConfig = $config; $config = $this->getEncoderConfigFromAlgorithm($config); } if (!isset($config['class'])) { throw new \InvalidArgumentException('"class" must be set in '.json_encode($config)); } if (!isset($config['arguments'])) { throw new \InvalidArgumentException('"arguments" must be set in '.json_encode($config)); } $encoder = new $config['class'](...$config['arguments']); if ($isExtra || !\in_array($config['class'], [NativePasswordEncoder::class, SodiumPasswordEncoder::class], true)) { return $encoder; } if ($rawConfig ?? null) { $extraEncoders = array_map(function (string $algo) use ($rawConfig): PasswordEncoderInterface { $rawConfig['algorithm'] = $algo; return $this->createEncoder($rawConfig); }, ['pbkdf2', $rawConfig['hash_algorithm'] ?? 'sha512']); } else { $extraEncoders = [new Pbkdf2PasswordEncoder(), new MessageDigestPasswordEncoder()]; } return new MigratingPasswordEncoder($encoder, ...$extraEncoders); } private function getEncoderConfigFromAlgorithm(array $config): array { if ('auto' === $config['algorithm']) { $encoderChain = []; // "plaintext" is not listed as any leaked hashes could then be used to authenticate directly foreach ([SodiumPasswordEncoder::isSupported() ? 'sodium' : 'native', 'pbkdf2', $config['hash_algorithm']] as $algo) { $config['algorithm'] = $algo; $encoderChain[] = $this->createEncoder($config, true); } return [ 'class' => MigratingPasswordEncoder::class, 'arguments' => $encoderChain, ]; } if ($fromEncoders = ($config['migrate_from'] ?? false)) { unset($config['migrate_from']); $encoderChain = [$this->createEncoder($config, true)]; foreach ($fromEncoders as $name) { if ($encoder = $this->encoders[$name] ?? false) { $encoder = $encoder instanceof PasswordEncoderInterface ? $encoder : $this->createEncoder($encoder, true); } else { $encoder = $this->createEncoder(['algorithm' => $name], true); } $encoderChain[] = $encoder; } return [ 'class' => MigratingPasswordEncoder::class, 'arguments' => $encoderChain, ]; } switch ($config['algorithm']) { case 'plaintext': return [ 'class' => PlaintextPasswordEncoder::class, 'arguments' => [$config['ignore_case']], ]; case 'pbkdf2': return [ 'class' => Pbkdf2PasswordEncoder::class, 'arguments' => [ $config['hash_algorithm'] ?? 'sha512', $config['encode_as_base64'] ?? true, $config['iterations'] ?? 1000, $config['key_length'] ?? 40, ], ]; case 'bcrypt': $config['algorithm'] = 'native'; $config['native_algorithm'] = \PASSWORD_BCRYPT; return $this->getEncoderConfigFromAlgorithm($config); case 'native': return [ 'class' => NativePasswordEncoder::class, 'arguments' => [ $config['time_cost'] ?? null, (($config['memory_cost'] ?? 0) << 10) ?: null, $config['cost'] ?? null, ] + (isset($config['native_algorithm']) ? [3 => $config['native_algorithm']] : []), ]; case 'sodium': return [ 'class' => SodiumPasswordEncoder::class, 'arguments' => [ $config['time_cost'] ?? null, (($config['memory_cost'] ?? 0) << 10) ?: null, ], ]; case 'argon2i': if (SodiumPasswordEncoder::isSupported() && !\defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13')) { $config['algorithm'] = 'sodium'; } elseif (\defined('PASSWORD_ARGON2I')) { $config['algorithm'] = 'native'; $config['native_algorithm'] = \PASSWORD_ARGON2I; } else { throw new LogicException(sprintf('Algorithm "argon2i" is not available. Either use %s"auto" or upgrade to PHP 7.2+ instead.', \defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13') ? '"argon2id", ' : '')); } return $this->getEncoderConfigFromAlgorithm($config); case 'argon2id': if (($hasSodium = SodiumPasswordEncoder::isSupported()) && \defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13')) { $config['algorithm'] = 'sodium'; } elseif (\defined('PASSWORD_ARGON2ID')) { $config['algorithm'] = 'native'; $config['native_algorithm'] = \PASSWORD_ARGON2ID; } else { throw new LogicException(sprintf('Algorithm "argon2id" is not available. Either use %s"auto", upgrade to PHP 7.3+ or use libsodium 1.0.15+ instead.', \defined('PASSWORD_ARGON2I') || $hasSodium ? '"argon2i", ' : '')); } return $this->getEncoderConfigFromAlgorithm($config); } return [ 'class' => MessageDigestPasswordEncoder::class, 'arguments' => [ $config['algorithm'], $config['encode_as_base64'] ?? true, $config['iterations'] ?? 5000, ], ]; } } Encoder/EncoderFactoryInterface.php 0000644 00000002305 15120140445 0013360 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface; use Symfony\Component\Security\Core\User\UserInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', EncoderFactoryInterface::class, PasswordHasherFactoryInterface::class); /** * EncoderFactoryInterface to support different encoders for different accounts. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @deprecated since Symfony 5.3, use {@link PasswordHasherFactoryInterface} instead */ interface EncoderFactoryInterface { /** * Returns the password encoder to use for the given account. * * @param UserInterface|string $user A UserInterface instance or a class name * * @return PasswordEncoderInterface * * @throws \RuntimeException when no password encoder could be found for the user */ public function getEncoder($user); } Encoder/LegacyEncoderTrait.php 0000644 00000002553 15120140445 0012345 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; use Symfony\Component\PasswordHasher\PasswordHasherInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * @internal */ trait LegacyEncoderTrait { /** * @var PasswordHasherInterface|LegacyPasswordHasherInterface */ private $hasher; /** * {@inheritdoc} */ public function encodePassword(string $raw, ?string $salt): string { try { return $this->hasher->hash($raw, $salt); } catch (InvalidPasswordException $e) { throw new BadCredentialsException('Bad credentials.'); } } /** * {@inheritdoc} */ public function isPasswordValid(string $encoded, string $raw, ?string $salt): bool { return $this->hasher->verify($encoded, $raw, $salt); } /** * {@inheritdoc} */ public function needsRehash(string $encoded): bool { return $this->hasher->needsRehash($encoded); } } Encoder/LegacyPasswordHasherEncoder.php 0000644 00000002754 15120140445 0014222 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * Forward compatibility for new new PasswordHasher component. * * @author Alexander M. Turek <me@derrabus.de> * * @internal To be removed in Symfony 6 */ final class LegacyPasswordHasherEncoder implements PasswordEncoderInterface { private $passwordHasher; public function __construct(LegacyPasswordHasherInterface $passwordHasher) { $this->passwordHasher = $passwordHasher; } public function encodePassword(string $raw, ?string $salt): string { try { return $this->passwordHasher->hash($raw, $salt); } catch (InvalidPasswordException $e) { throw new BadCredentialsException($e->getMessage(), $e->getCode(), $e); } } public function isPasswordValid(string $encoded, string $raw, ?string $salt): bool { return $this->passwordHasher->verify($encoded, $raw, $salt); } public function needsRehash(string $encoded): bool { return $this->passwordHasher->needsRehash($encoded); } } Encoder/MessageDigestPasswordEncoder.php 0000644 00000005523 15120140445 0014404 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\MessageDigestPasswordHasher; use Symfony\Component\Security\Core\Exception\BadCredentialsException; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', MessageDigestPasswordEncoder::class, MessageDigestPasswordHasher::class); /** * MessageDigestPasswordEncoder uses a message digest algorithm. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link MessageDigestPasswordHasher} instead */ class MessageDigestPasswordEncoder extends BasePasswordEncoder { private $algorithm; private $encodeHashAsBase64; private $iterations = 1; private $encodedLength = -1; /** * @param string $algorithm The digest algorithm to use * @param bool $encodeHashAsBase64 Whether to base64 encode the password hash * @param int $iterations The number of iterations to use to stretch the password hash */ public function __construct(string $algorithm = 'sha512', bool $encodeHashAsBase64 = true, int $iterations = 5000) { $this->algorithm = $algorithm; $this->encodeHashAsBase64 = $encodeHashAsBase64; try { $this->encodedLength = \strlen($this->encodePassword('', 'salt')); } catch (\LogicException $e) { // ignore algorithm not supported } $this->iterations = $iterations; } /** * {@inheritdoc} */ public function encodePassword(string $raw, ?string $salt) { if ($this->isPasswordTooLong($raw)) { throw new BadCredentialsException('Invalid password.'); } if (!\in_array($this->algorithm, hash_algos(), true)) { throw new \LogicException(sprintf('The algorithm "%s" is not supported.', $this->algorithm)); } $salted = $this->mergePasswordAndSalt($raw, $salt); $digest = hash($this->algorithm, $salted, true); // "stretch" hash for ($i = 1; $i < $this->iterations; ++$i) { $digest = hash($this->algorithm, $digest.$salted, true); } return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest); } /** * {@inheritdoc} */ public function isPasswordValid(string $encoded, string $raw, ?string $salt) { if (\strlen($encoded) !== $this->encodedLength || str_contains($encoded, '$')) { return false; } return !$this->isPasswordTooLong($raw) && $this->comparePasswords($encoded, $this->encodePassword($raw, $salt)); } } Encoder/MigratingPasswordEncoder.php 0000644 00000004234 15120140445 0013577 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\MigratingPasswordHasher; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', MigratingPasswordEncoder::class, MigratingPasswordHasher::class); /** * Hashes passwords using the best available encoder. * Validates them using a chain of encoders. * * /!\ Don't put a PlaintextPasswordEncoder in the list as that'd mean a leaked hash * could be used to authenticate successfully without knowing the cleartext password. * * @author Nicolas Grekas <p@tchwork.com> * * @deprecated since Symfony 5.3, use {@link MigratingPasswordHasher} instead */ final class MigratingPasswordEncoder extends BasePasswordEncoder implements SelfSaltingEncoderInterface { private $bestEncoder; private $extraEncoders; public function __construct(PasswordEncoderInterface $bestEncoder, PasswordEncoderInterface ...$extraEncoders) { $this->bestEncoder = $bestEncoder; $this->extraEncoders = $extraEncoders; } /** * {@inheritdoc} */ public function encodePassword(string $raw, ?string $salt): string { return $this->bestEncoder->encodePassword($raw, $salt); } /** * {@inheritdoc} */ public function isPasswordValid(string $encoded, string $raw, ?string $salt): bool { if ($this->bestEncoder->isPasswordValid($encoded, $raw, $salt)) { return true; } if (!$this->bestEncoder->needsRehash($encoded)) { return false; } foreach ($this->extraEncoders as $encoder) { if ($encoder->isPasswordValid($encoded, $raw, $salt)) { return true; } } return false; } /** * {@inheritdoc} */ public function needsRehash(string $encoded): bool { return $this->bestEncoder->needsRehash($encoded); } } Encoder/NativePasswordEncoder.php 0000644 00000002366 15120140445 0013110 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\NativePasswordHasher; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', NativePasswordEncoder::class, NativePasswordHasher::class); /** * Hashes passwords using password_hash(). * * @author Elnur Abdurrakhimov <elnur@elnur.pro> * @author Terje Bråten <terje@braten.be> * @author Nicolas Grekas <p@tchwork.com> * * @deprecated since Symfony 5.3, use {@link NativePasswordHasher} instead */ final class NativePasswordEncoder implements PasswordEncoderInterface, SelfSaltingEncoderInterface { use LegacyEncoderTrait; /** * @param string|null $algo An algorithm supported by password_hash() or null to use the stronger available algorithm */ public function __construct(int $opsLimit = null, int $memLimit = null, int $cost = null, string $algo = null) { $this->hasher = new NativePasswordHasher($opsLimit, $memLimit, $cost, $algo); } } Encoder/PasswordEncoderInterface.php 0000644 00000003240 15120140445 0013552 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\PasswordHasherInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', PasswordEncoderInterface::class, PasswordHasherInterface::class); /** * PasswordEncoderInterface is the interface for all encoders. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link PasswordHasherInterface} instead */ interface PasswordEncoderInterface { /** * Encodes the raw password. * * @return string * * @throws BadCredentialsException If the raw password is invalid, e.g. excessively long * @throws \InvalidArgumentException If the salt is invalid */ public function encodePassword(string $raw, ?string $salt); /** * Checks a raw password against an encoded password. * * @param string $encoded An encoded password * @param string $raw A raw password * @param string|null $salt The salt * * @return bool * * @throws \InvalidArgumentException If the salt is invalid */ public function isPasswordValid(string $encoded, string $raw, ?string $salt); /** * Checks if an encoded password would benefit from rehashing. */ public function needsRehash(string $encoded): bool; } Encoder/PasswordHasherAdapter.php 0000644 00000002415 15120140445 0013070 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; /** * Forward compatibility for new new PasswordHasher component. * * @author Alexander M. Turek <me@derrabus.de> * * @internal To be removed in Symfony 6 */ final class PasswordHasherAdapter implements LegacyPasswordHasherInterface { private $passwordEncoder; public function __construct(PasswordEncoderInterface $passwordEncoder) { $this->passwordEncoder = $passwordEncoder; } public function hash(string $plainPassword, string $salt = null): string { return $this->passwordEncoder->encodePassword($plainPassword, $salt); } public function verify(string $hashedPassword, string $plainPassword, string $salt = null): bool { return $this->passwordEncoder->isPasswordValid($hashedPassword, $plainPassword, $salt); } public function needsRehash(string $hashedPassword): bool { return $this->passwordEncoder->needsRehash($hashedPassword); } } Encoder/PasswordHasherEncoder.php 0000644 00000003417 15120140445 0013072 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException; use Symfony\Component\PasswordHasher\PasswordHasherInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * Forward compatibility for new new PasswordHasher component. * * @author Alexander M. Turek <me@derrabus.de> * * @internal To be removed in Symfony 6 */ final class PasswordHasherEncoder implements PasswordEncoderInterface, SelfSaltingEncoderInterface { private $passwordHasher; public function __construct(PasswordHasherInterface $passwordHasher) { $this->passwordHasher = $passwordHasher; } public function encodePassword(string $raw, ?string $salt): string { if (null !== $salt) { throw new \InvalidArgumentException('This password hasher does not support passing a salt.'); } try { return $this->passwordHasher->hash($raw); } catch (InvalidPasswordException $e) { throw new BadCredentialsException($e->getMessage(), $e->getCode(), $e); } } public function isPasswordValid(string $encoded, string $raw, ?string $salt): bool { if (null !== $salt) { throw new \InvalidArgumentException('This password hasher does not support passing a salt.'); } return $this->passwordHasher->verify($encoded, $raw); } public function needsRehash(string $encoded): bool { return $this->passwordHasher->needsRehash($encoded); } } Encoder/Pbkdf2PasswordEncoder.php 0000644 00000003421 15120140445 0012763 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\Pbkdf2PasswordHasher; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', Pbkdf2PasswordEncoder::class, Pbkdf2PasswordHasher::class); /** * Pbkdf2PasswordEncoder uses the PBKDF2 (Password-Based Key Derivation Function 2). * * Providing a high level of Cryptographic security, * PBKDF2 is recommended by the National Institute of Standards and Technology (NIST). * * But also warrants a warning, using PBKDF2 (with a high number of iterations) slows down the process. * PBKDF2 should be used with caution and care. * * @author Sebastiaan Stok <s.stok@rollerscapes.net> * @author Andrew Johnson * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link Pbkdf2PasswordHasher} instead */ class Pbkdf2PasswordEncoder extends BasePasswordEncoder { use LegacyEncoderTrait; /** * @param string $algorithm The digest algorithm to use * @param bool $encodeHashAsBase64 Whether to base64 encode the password hash * @param int $iterations The number of iterations to use to stretch the password hash * @param int $length Length of derived key to create */ public function __construct(string $algorithm = 'sha512', bool $encodeHashAsBase64 = true, int $iterations = 1000, int $length = 40) { $this->hasher = new Pbkdf2PasswordHasher($algorithm, $encodeHashAsBase64, $iterations, $length); } } Encoder/PlaintextPasswordEncoder.php 0000644 00000002266 15120140445 0013631 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\PlaintextPasswordHasher; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', PlaintextPasswordEncoder::class, PlaintextPasswordHasher::class); /** * PlaintextPasswordEncoder does not do any encoding but is useful in testing environments. * * As this encoder is not cryptographically secure, usage of it in production environments is discouraged. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link PlaintextPasswordHasher} instead */ class PlaintextPasswordEncoder extends BasePasswordEncoder { use LegacyEncoderTrait; /** * @param bool $ignorePasswordCase Compare password case-insensitive */ public function __construct(bool $ignorePasswordCase = false) { $this->hasher = new PlaintextPasswordHasher($ignorePasswordCase); } } Encoder/SelfSaltingEncoderInterface.php 0000644 00000001567 15120140445 0014175 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" interface is deprecated, use "%s" on hasher implementations that deal with salts instead.', SelfSaltingEncoderInterface::class, LegacyPasswordHasherInterface::class); /** * SelfSaltingEncoderInterface is a marker interface for encoders that do not * require a user-generated salt. * * @author Zan Baldwin <hello@zanbaldwin.com> * * @deprecated since Symfony 5.3, use {@link LegacyPasswordHasherInterface} instead */ interface SelfSaltingEncoderInterface { } Encoder/SodiumPasswordEncoder.php 0000644 00000002260 15120140445 0013113 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\SodiumPasswordHasher; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', SodiumPasswordEncoder::class, SodiumPasswordHasher::class); /** * Hashes passwords using libsodium. * * @author Robin Chalas <robin.chalas@gmail.com> * @author Zan Baldwin <hello@zanbaldwin.com> * @author Dominik Müller <dominik.mueller@jkweb.ch> * * @deprecated since Symfony 5.3, use {@link SodiumPasswordHasher} instead */ final class SodiumPasswordEncoder implements PasswordEncoderInterface, SelfSaltingEncoderInterface { use LegacyEncoderTrait; public function __construct(int $opsLimit = null, int $memLimit = null) { $this->hasher = new SodiumPasswordHasher($opsLimit, $memLimit); } public static function isSupported(): bool { return SodiumPasswordHasher::isSupported(); } } Encoder/UserPasswordEncoder.php 0000644 00000005355 15120140445 0012601 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher; use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', UserPasswordEncoder::class, UserPasswordHasher::class); /** * A generic password encoder. * * @author Ariel Ferrandini <arielferrandini@gmail.com> * * @deprecated since Symfony 5.3, use {@link UserPasswordHasher} instead */ class UserPasswordEncoder implements UserPasswordEncoderInterface { private $encoderFactory; public function __construct(EncoderFactoryInterface $encoderFactory) { $this->encoderFactory = $encoderFactory; } /** * {@inheritdoc} */ public function encodePassword(UserInterface $user, string $plainPassword) { $encoder = $this->encoderFactory->getEncoder($user); if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/password-hasher', '5.3', 'Not implementing the "%s" interface while using "%s" is deprecated, the "%s" class should implement it.', PasswordAuthenticatedUserInterface::class, __CLASS__, get_debug_type($user)); } $salt = $user->getSalt(); if ($salt && !$user instanceof LegacyPasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/password-hasher', '5.3', 'Returning a string from "getSalt()" without implementing the "%s" interface is deprecated, the "%s" class should implement it.', LegacyPasswordAuthenticatedUserInterface::class, get_debug_type($user)); } return $encoder->encodePassword($plainPassword, $user->getSalt()); } /** * {@inheritdoc} */ public function isPasswordValid(UserInterface $user, string $raw) { if (null === $user->getPassword()) { return false; } $encoder = $this->encoderFactory->getEncoder($user); return $encoder->isPasswordValid($user->getPassword(), $raw, $user->getSalt()); } /** * {@inheritdoc} */ public function needsRehash(UserInterface $user): bool { if (null === $user->getPassword()) { return false; } $encoder = $this->encoderFactory->getEncoder($user); return $encoder->needsRehash($user->getPassword()); } } Encoder/UserPasswordEncoderInterface.php 0000644 00000002414 15120140445 0014413 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Symfony\Component\Security\Core\User\UserInterface; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" interface is deprecated, use "%s" instead.', UserPasswordEncoderInterface::class, UserPasswordHasherInterface::class); /** * UserPasswordEncoderInterface is the interface for the password encoder service. * * @author Ariel Ferrandini <arielferrandini@gmail.com> * * @deprecated since Symfony 5.3, use {@link UserPasswordHasherInterface} instead */ interface UserPasswordEncoderInterface { /** * Encodes the plain password. * * @return string */ public function encodePassword(UserInterface $user, string $plainPassword); /** * @return bool */ public function isPasswordValid(UserInterface $user, string $raw); /** * Checks if an encoded password would benefit from rehashing. */ public function needsRehash(UserInterface $user): bool; } Event/AuthenticationEvent.php 0000644 00000001457 15120140445 0012322 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Event; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Contracts\EventDispatcher\Event; /** * This is a general purpose authentication event. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class AuthenticationEvent extends Event { private $authenticationToken; public function __construct(TokenInterface $token) { $this->authenticationToken = $token; } public function getAuthenticationToken() { return $this->authenticationToken; } } Event/AuthenticationFailureEvent.php 0000644 00000002473 15120140445 0013631 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Event; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Event\LoginFailureEvent; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" with the new authenticator system instead.', AuthenticationFailureEvent::class, LoginFailureEvent::class); /** * This event is dispatched on authentication failure. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * * @deprecated since Symfony 5.3, use LoginFailureEvent with the new authenticator system instead */ final class AuthenticationFailureEvent extends AuthenticationEvent { private $authenticationException; public function __construct(TokenInterface $token, AuthenticationException $ex) { parent::__construct($token); $this->authenticationException = $ex; } public function getAuthenticationException(): AuthenticationException { return $this->authenticationException; } } Event/AuthenticationSuccessEvent.php 0000644 00000000547 15120140445 0013652 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Event; final class AuthenticationSuccessEvent extends AuthenticationEvent { } Event/VoteEvent.php 0000644 00000002327 15120140445 0010255 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Event; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; use Symfony\Contracts\EventDispatcher\Event; /** * This event is dispatched on voter vote. * * @author Laurent VOULLEMIER <laurent.voullemier@gmail.com> * * @internal */ final class VoteEvent extends Event { private $voter; private $subject; private $attributes; private $vote; public function __construct(VoterInterface $voter, $subject, array $attributes, int $vote) { $this->voter = $voter; $this->subject = $subject; $this->attributes = $attributes; $this->vote = $vote; } public function getVoter(): VoterInterface { return $this->voter; } public function getSubject() { return $this->subject; } public function getAttributes(): array { return $this->attributes; } public function getVote(): int { return $this->vote; } } Exception/AccessDeniedException.php 0000644 00000002325 15120140445 0013402 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * AccessDeniedException is thrown when the account has not the required role. * * @author Fabien Potencier <fabien@symfony.com> */ class AccessDeniedException extends RuntimeException { private $attributes = []; private $subject; public function __construct(string $message = 'Access Denied.', \Throwable $previous = null) { parent::__construct($message, 403, $previous); } /** * @return array */ public function getAttributes() { return $this->attributes; } /** * @param array|string $attributes */ public function setAttributes($attributes) { $this->attributes = (array) $attributes; } /** * @return mixed */ public function getSubject() { return $this->subject; } /** * @param mixed $subject */ public function setSubject($subject) { $this->subject = $subject; } } Exception/AccountExpiredException.php 0000644 00000001220 15120140445 0013776 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * AccountExpiredException is thrown when the user account has expired. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class AccountExpiredException extends AccountStatusException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Account has expired.'; } } Exception/AccountStatusException.php 0000644 00000002447 15120140445 0013675 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; use Symfony\Component\Security\Core\User\UserInterface; /** * AccountStatusException is the base class for authentication exceptions * caused by the user account status. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ abstract class AccountStatusException extends AuthenticationException { private $user; /** * Get the user. * * @return UserInterface|null */ public function getUser() { return $this->user; } public function setUser(UserInterface $user) { $this->user = $user; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->user, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->user, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Exception/AuthenticationCredentialsNotFoundException.php 0000644 00000001363 15120140445 0017703 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * AuthenticationCredentialsNotFoundException is thrown when an authentication is rejected * because no Token is available. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class AuthenticationCredentialsNotFoundException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Authentication credentials could not be found.'; } } Exception/AuthenticationException.php 0000644 00000006273 15120140445 0014055 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * AuthenticationException is the base class for all authentication exceptions. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class AuthenticationException extends RuntimeException { /** @internal */ protected $serialized; private $token; public function __construct(string $message = '', int $code = 0, \Throwable $previous = null) { unset($this->serialized); parent::__construct($message, $code, $previous); } /** * @return TokenInterface|null */ public function getToken() { return $this->token; } public function setToken(TokenInterface $token) { $this->token = $token; } /** * Returns all the necessary state of the object for serialization purposes. * * There is no need to serialize any entry, they should be returned as-is. * If you extend this method, keep in mind you MUST guarantee parent data is present in the state. * Here is an example of how to extend this method: * <code> * public function __serialize(): array * { * return [$this->childAttribute, parent::__serialize()]; * } * </code> * * @see __unserialize() */ public function __serialize(): array { return [$this->token, $this->code, $this->message, $this->file, $this->line]; } /** * Restores the object state from an array given by __serialize(). * * There is no need to unserialize any entry in $data, they are already ready-to-use. * If you extend this method, keep in mind you MUST pass the parent data to its respective class. * Here is an example of how to extend this method: * <code> * public function __unserialize(array $data): void * { * [$this->childAttribute, $parentData] = $data; * parent::__unserialize($parentData); * } * </code> * * @see __serialize() */ public function __unserialize(array $data): void { [$this->token, $this->code, $this->message, $this->file, $this->line] = $data; } /** * Message key to be used by the translation component. * * @return string */ public function getMessageKey() { return 'An authentication exception occurred.'; } /** * Message data to be used by the translation component. * * @return array */ public function getMessageData() { return []; } /** * @internal */ public function __sleep(): array { $this->serialized = $this->__serialize(); return ['serialized']; } /** * @internal */ public function __wakeup(): void { $this->__unserialize($this->serialized); unset($this->serialized); } } Exception/AuthenticationExpiredException.php 0000644 00000001525 15120140445 0015371 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * AuthenticationExpiredException is thrown when an authentication token becomes un-authenticated between requests. * * In practice, this is due to the User changing between requests (e.g. password changes), * causes the token to become un-authenticated. * * @author Ryan Weaver <ryan@knpuniversity.com> */ class AuthenticationExpiredException extends AccountStatusException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Authentication expired because your account information has changed.'; } } Exception/AuthenticationServiceException.php 0000644 00000001375 15120140445 0015374 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * AuthenticationServiceException is thrown when an authentication request could not be processed due to a system problem. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class AuthenticationServiceException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Authentication request could not be processed due to a system problem.'; } } Exception/BadCredentialsException.php 0000644 00000001225 15120140445 0013732 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * BadCredentialsException is thrown when the user credentials are invalid. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class BadCredentialsException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Invalid credentials.'; } } Exception/CookieTheftException.php 0000644 00000001365 15120140445 0013277 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * This exception is thrown when the RememberMeServices implementation * detects that a presented cookie has already been used by someone else. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * @author Alexander <iam.asm89@gmail.com> */ class CookieTheftException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Cookie has already been used by someone else.'; } } Exception/CredentialsExpiredException.php 0000644 00000001252 15120140445 0014644 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * CredentialsExpiredException is thrown when the user account credentials have expired. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class CredentialsExpiredException extends AccountStatusException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Credentials have expired.'; } } Exception/CustomUserMessageAccountStatusException.php 0000644 00000003744 15120140445 0017235 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * An authentication exception caused by the user account status * where you can control the message shown to the user. * * Be sure that the message passed to this exception is something that * can be shown safely to your user. In other words, avoid catching * other exceptions and passing their message directly to this class. * * @author Vincent Langlet <vincentlanglet@github.com> */ class CustomUserMessageAccountStatusException extends AccountStatusException { private $messageKey; private $messageData = []; public function __construct(string $message = '', array $messageData = [], int $code = 0, \Throwable $previous = null) { parent::__construct($message, $code, $previous); $this->setSafeMessage($message, $messageData); } /** * Sets a message that will be shown to the user. * * @param string $messageKey The message or message key * @param array $messageData Data to be passed into the translator */ public function setSafeMessage(string $messageKey, array $messageData = []) { $this->messageKey = $messageKey; $this->messageData = $messageData; } public function getMessageKey() { return $this->messageKey; } public function getMessageData() { return $this->messageData; } /** * {@inheritdoc} */ public function __serialize(): array { return [parent::__serialize(), $this->messageKey, $this->messageData]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$parentData, $this->messageKey, $this->messageData] = $data; parent::__unserialize($parentData); } } Exception/CustomUserMessageAuthenticationException.php 0000644 00000004020 15120140445 0017400 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * An authentication exception where you can control the message shown to the user. * * Be sure that the message passed to this exception is something that * can be shown safely to your user. In other words, avoid catching * other exceptions and passing their message directly to this class. * * @author Ryan Weaver <ryan@knpuniversity.com> */ class CustomUserMessageAuthenticationException extends AuthenticationException { private $messageKey; private $messageData = []; public function __construct(string $message = '', array $messageData = [], int $code = 0, \Throwable $previous = null) { parent::__construct($message, $code, $previous); $this->setSafeMessage($message, $messageData); } /** * Set a message that will be shown to the user. * * @param string $messageKey The message or message key * @param array $messageData Data to be passed into the translator */ public function setSafeMessage(string $messageKey, array $messageData = []) { $this->messageKey = $messageKey; $this->messageData = $messageData; } public function getMessageKey() { return $this->messageKey; } public function getMessageData() { return $this->messageData; } /** * {@inheritdoc} */ public function __serialize(): array { return [parent::__serialize(), $this->messageKey, $this->messageData]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$parentData, $this->messageKey, $this->messageData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Exception/DisabledException.php 0000644 00000001204 15120140445 0012572 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * DisabledException is thrown when the user account is disabled. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class DisabledException extends AccountStatusException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Account is disabled.'; } } Exception/ExceptionInterface.php 0000644 00000000715 15120140445 0012771 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * Base ExceptionInterface for the Security component. * * @author Bernhard Schussek <bschussek@gmail.com> */ interface ExceptionInterface extends \Throwable { } Exception/InsufficientAuthenticationException.php 0000644 00000001464 15120140445 0016421 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * InsufficientAuthenticationException is thrown if the user credentials are not sufficiently trusted. * * This is the case when a user is anonymous and the resource to be displayed has an access role. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class InsufficientAuthenticationException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Not privileged to request the resource.'; } } Exception/InvalidArgumentException.php 0000644 00000001002 15120140445 0014150 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * Base InvalidArgumentException for the Security component. * * @author Bernhard Schussek <bschussek@gmail.com> */ class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface { } Exception/InvalidCsrfTokenException.php 0000644 00000001213 15120140445 0014270 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * This exception is thrown when the csrf token is invalid. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * @author Alexander <iam.asm89@gmail.com> */ class InvalidCsrfTokenException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Invalid CSRF token.'; } } Exception/LazyResponseException.php 0000644 00000001360 15120140445 0013524 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; use Symfony\Component\HttpFoundation\Response; /** * A signaling exception that wraps a lazily computed response. * * @author Nicolas Grekas <p@tchwork.com> */ class LazyResponseException extends \Exception implements ExceptionInterface { private $response; public function __construct(Response $response) { $this->response = $response; } public function getResponse(): Response { return $this->response; } } Exception/LockedException.php 0000644 00000001172 15120140445 0012270 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * LockedException is thrown if the user account is locked. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class LockedException extends AccountStatusException { /** * {@inheritdoc} */ public function getMessageKey() { return 'Account is locked.'; } } Exception/LogicException.php 0000644 00000000742 15120140445 0012126 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * Base LogicException for the Security component. * * @author Iltar van der Berg <kjarli@gmail.com> */ class LogicException extends \LogicException implements ExceptionInterface { } Exception/LogoutException.php 0000644 00000001171 15120140445 0012337 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * LogoutException is thrown when the account cannot be logged out. * * @author Jeremy Mikola <jmikola@gmail.com> */ class LogoutException extends RuntimeException { public function __construct(string $message = 'Logout Exception', \Throwable $previous = null) { parent::__construct($message, 403, $previous); } } Exception/ProviderNotFoundException.php 0000644 00000001371 15120140445 0014337 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * ProviderNotFoundException is thrown when no AuthenticationProviderInterface instance * supports an authentication Token. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class ProviderNotFoundException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'No authentication provider found to support the authentication token.'; } } Exception/RuntimeException.php 0000644 00000000752 15120140445 0012515 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * Base RuntimeException for the Security component. * * @author Bernhard Schussek <bschussek@gmail.com> */ class RuntimeException extends \RuntimeException implements ExceptionInterface { } Exception/SessionUnavailableException.php 0000644 00000001610 15120140445 0014653 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * This exception is thrown when no session is available. * * Possible reasons for this are: * * a) The session timed out because the user waited too long. * b) The user has disabled cookies, and a new session is started on each * request. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * @author Alexander <iam.asm89@gmail.com> */ class SessionUnavailableException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'No session available, it either timed out or cookies are not enabled.'; } } Exception/TokenNotFoundException.php 0000644 00000001221 15120140445 0013617 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * TokenNotFoundException is thrown if a Token cannot be found. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> * @author Alexander <iam.asm89@gmail.com> */ class TokenNotFoundException extends AuthenticationException { /** * {@inheritdoc} */ public function getMessageKey() { return 'No token could be found.'; } } Exception/TooManyLoginAttemptsAuthenticationException.php 0000644 00000003032 15120140445 0020065 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * This exception is thrown if there where too many failed login attempts in * this session. * * @author Wouter de Jong <wouter@wouterj.nl> */ class TooManyLoginAttemptsAuthenticationException extends AuthenticationException { private $threshold; public function __construct(int $threshold = null) { $this->threshold = $threshold; } /** * {@inheritdoc} */ public function getMessageData(): array { return [ '%minutes%' => $this->threshold, '%count%' => (int) $this->threshold, ]; } /** * {@inheritdoc} */ public function getMessageKey(): string { return 'Too many failed login attempts, please try again '.($this->threshold ? 'in %minutes% minute'.($this->threshold > 1 ? 's' : '').'.' : 'later.'); } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->threshold, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->threshold, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } Exception/UnsupportedUserException.php 0000644 00000001074 15120140445 0014257 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * This exception is thrown when an account is reloaded from a provider which * doesn't support the passed implementation of UserInterface. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class UnsupportedUserException extends AuthenticationServiceException { } Exception/UserNotFoundException.php 0000644 00000004551 15120140445 0013466 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; /** * UserNotFoundException is thrown if a User cannot be found for the given identifier. * * @author Fabien Potencier <fabien@symfony.com> * @author Alexander <iam.asm89@gmail.com> */ class UserNotFoundException extends AuthenticationException { private $identifier; /** * {@inheritdoc} */ public function getMessageKey() { return 'Username could not be found.'; } /** * Get the user identifier (e.g. username or email address). */ public function getUserIdentifier(): ?string { return $this->identifier; } /** * @return string * * @deprecated */ public function getUsername() { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use getUserIdentifier() instead.', __METHOD__); return $this->identifier; } /** * Set the user identifier (e.g. username or email address). */ public function setUserIdentifier(string $identifier): void { $this->identifier = $identifier; } /** * @deprecated */ public function setUsername(string $username) { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use setUserIdentifier() instead.', __METHOD__); $this->identifier = $username; } /** * {@inheritdoc} */ public function getMessageData() { return ['{{ username }}' => $this->identifier, '{{ user_identifier }}' => $this->identifier]; } /** * {@inheritdoc} */ public function __serialize(): array { return [$this->identifier, parent::__serialize()]; } /** * {@inheritdoc} */ public function __unserialize(array $data): void { [$this->identifier, $parentData] = $data; $parentData = \is_array($parentData) ? $parentData : unserialize($parentData); parent::__unserialize($parentData); } } if (!class_exists(UsernameNotFoundException::class, false)) { class_alias(UserNotFoundException::class, UsernameNotFoundException::class); } Exception/UsernameNotFoundException.php 0000644 00000001307 15120140445 0014323 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Exception; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', UsernameNotFoundException::class, UserNotFoundException::class); class_exists(UserNotFoundException::class); if (false) { /** * @deprecated since Symfony 5.3 to be removed in 6.0, use UserNotFoundException instead. */ class UsernameNotFoundException extends AuthenticationException { } } Resources/translations/security.mn.xlf 0000644 00000010242 15120140445 0014225 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="mn" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Нэвтрэх хүсэлтийн алдаа гарав.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Нэвтрэх эрхийн мэдээлэл олдсонгүй.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Системийн алдаанаас болон нэвтрэх хүсэлтийг гүйцэтгэх боломжгүй байна.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Буруу нэвтрэх эрхийн мэдээлэл.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Күүки файлыг аль хэдийн өөр хүн хэрэглэж байна.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Энэхүү мэдээллийг авах эрх хүрэхгүй байна.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Тохиромжгүй CSRF токен.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Нэвтрэх токенг дэмжих нэвтрэх эрхийн хангагч олдсонгүй.</target> </trans-unit> <trans-unit id="10"> <source>No available, it either timed out or cookies are not enabled.</source> <target>Хэрэглэгчийн session олдсонгүй, хугацаа нь дууссан эсвэл күүки идэвхижүүлээгүй байна.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токен олдсонгүй.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Нэвтрэх нэр олсонгүй.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Бүртгэлийн хугацаа дууссан байна.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Нэвтрэх эрхийн хугацаа дууссан байна.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Бүртгэлийг хаасан байна.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Бүртгэлийг цоожилсон байна.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Хэтэрхий олон амжилтгүй оролдлого, түр хүлээгээд дахин оролдоно уу.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Буруу эсвэл хугацаа нь дууссан нэвтрэх зам.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.my.xlf 0000644 00000013420 15120140445 0014241 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>အသုံးပြုခွင့် ခြွင်းချက်တစ်ခုဖြစ်သွားသည်။</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>အသုံးပြုခွင့် အထောက်အထားများ ရှာမတွေ့ပါ။</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>System ပြဿနာအခက်အခဲရှိ နေပါသဖြင့် အသုံးပြုခွင့်တောင်းဆိုချက်ကို ဆောင်ရွက်၍မရ နိုင်ပါ။</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>သင့်လျှော်သော် အထောက်အထားမဟုတ်ပါ။</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie ကို တစ်စုံတစ်ယောက်မှ အသုံးပြုပြီးဖြစ်သည်။</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>အရင်းအမြစ်ကိုတောင်းဆိုရန်အခွင့်ထူးမရပါ။</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>သင့်လျှော်သော် CSRF token မဟုတ်ပါ။</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>အထောက်အထားစိစစ်ခြင်းသင်္ကေတကိုပံ့ပိုးရန် မည်သည့်အထောက်အထားစိစစ်ရေး ၀န်ဆောင်မှုမှမတွေ့ပါ။</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Session မအားလပ်ပါ။ Session အချိန်ကုန်သွားခြင်း (သို့မဟုတ်) cookies များကိုဖွင့်ထားခြင်းမရှိပါ။</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Toke ရှာမတွေ့ပါ။</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>အသုံးပြုသူအမည် ရှာဖွေတွေ့ရှိချင်းမရှိပါ။</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>အကောင့် သက်တမ်းကုန်လွန်သွားပါပြီ။</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>အထောက်အထားသက်တန်း ကုန်လွန်သွားပါပြီ။</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>အကောင့်ပိတ်ထားပါသည်။</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>အကောင့် လောခ်ကျသွားပါပြီ။</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Login ၀င်ရန်ကြိုးစားမှုများလွန်းပါသည်၊ ကျေးဇူးပြု၍ နောက်မှထပ်ကြိုးစားပါ။</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>မသင့်လျှော်သော် (သို့မဟုတ်) သက်တန်းကုန်သော login link ဖြစ်ပါသည်။</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Too many failed login attempts, please try again in %minutes% minute.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Login ၀င်ရန်ကြိုးစားမှုများလွန်းပါသည်၊ ကျေးဇူးပြု၍ နောက် %minutes% မှထပ်မံကြိုးစားပါ။</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.nb.xlf 0000644 00000010252 15120140445 0014213 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>En autentiseringsfeil har skjedd.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Påloggingsinformasjonen kunne ikke bli funnet.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentiserings forespørselen kunne ikke bli prosessert grunnet en system feil.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ugyldig påloggingsinformasjon.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie har allerede blitt brukt av noen andre.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ingen tilgang til å be om gitt ressurs.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ugyldig CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ingen autentiserings tilbyder funnet som støtter gitt autentiserings token.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ingen sesjon tilgjengelig, sesjonen er enten utløpt eller cookies ikke skrudd på.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Ingen token kunne bli funnet.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Brukernavn kunne ikke bli funnet.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Brukerkonto har utgått.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Påloggingsinformasjon har utløpt.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Brukerkonto er deaktivert.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Brukerkonto er sperret.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>For mange mislykkede påloggingsforsøk. Prøv igjen senere.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ugyldig eller utløpt påloggingskobling.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.nl.xlf 0000644 00000010306 15120140445 0014225 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Er heeft zich een authenticatieprobleem voorgedaan.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Authenticatiegegevens konden niet worden gevonden.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Authenticatieaanvraag kon niet worden verwerkt door een technisch probleem.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ongeldige inloggegevens.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie is al door een ander persoon gebruikt.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Onvoldoende rechten om de aanvraag te verwerken.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF-code is ongeldig.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Geen authenticatieprovider gevonden die de authenticatietoken ondersteunt.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Geen sessie beschikbaar, mogelijk is deze verlopen of cookies zijn uitgeschakeld.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Er kon geen authenticatietoken worden gevonden.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Gebruikersnaam kon niet worden gevonden.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Account is verlopen.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Authenticatiegegevens zijn verlopen.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Account is gedeactiveerd.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Account is geblokkeerd.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Te veel onjuiste inlogpogingen, probeer het later nogmaals.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ongeldige of verlopen inloglink.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Te veel onjuiste inlogpogingen, probeer het opnieuw over %minutes% minuut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Te veel onjuiste inlogpogingen, probeer het opnieuw over %minutes% minuten.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.nn.xlf 0000644 00000010277 15120140445 0014236 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Innlogginga har feila.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Innloggingsinformasjonen vart ikkje funnen.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Innlogginga vart ikkje fullført på grunn av ein systemfeil.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ugyldig innloggingsinformasjon.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Informasjonskapselen er allereie brukt av ein annan brukar.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Du har ikkje åtgang til å be om denne ressursen.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ugyldig CSRF-teikn.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Fann ingen innloggingstilbydar som støttar dette innloggingsteiknet.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ingen sesjon tilgjengeleg. Sesjonen er anten ikkje lenger gyldig, eller informasjonskapslar er ikkje skrudd på i nettlesaren.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Fann ingen innloggingsteikn.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Fann ikkje brukarnamnet.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Brukarkontoen er utgjengen.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Innloggingsinformasjonen er utgjengen.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Brukarkontoen er sperra.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Brukarkontoen er sperra.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>For mange innloggingsforsøk har feila, prøv igjen seinare.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Innloggingslenka er ugyldig eller utgjengen.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.no.xlf 0000644 00000010252 15120140445 0014230 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>En autentiseringsfeil har skjedd.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Påloggingsinformasjonen kunne ikke bli funnet.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentiserings forespørselen kunne ikke bli prosessert grunnet en system feil.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ugyldig påloggingsinformasjon.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie har allerede blitt brukt av noen andre.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ingen tilgang til å be om gitt ressurs.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ugyldig CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ingen autentiserings tilbyder funnet som støtter gitt autentiserings token.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ingen sesjon tilgjengelig, sesjonen er enten utløpt eller cookies ikke skrudd på.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Ingen token kunne bli funnet.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Brukernavn kunne ikke bli funnet.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Brukerkonto har utgått.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Påloggingsinformasjon har utløpt.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Brukerkonto er deaktivert.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Brukerkonto er sperret.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>For mange mislykkede påloggingsforsøk. Prøv igjen senere.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ugyldig eller utløpt påloggingskobling.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutt.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>For mange mislykkede påloggingsforsøk, prøv igjen om %minutes% minutter.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.pl.xlf 0000644 00000010331 15120140445 0014225 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Wystąpił błąd uwierzytelniania.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Dane uwierzytelniania nie zostały znalezione.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Żądanie uwierzytelniania nie mogło zostać pomyślnie zakończone z powodu problemu z systemem.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Nieprawidłowe dane.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>To ciasteczko jest używane przez kogoś innego.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Brak uprawnień dla żądania wskazanego zasobu.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Nieprawidłowy token CSRF.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nie znaleziono mechanizmu uwierzytelniania zdolnego do obsługi przesłanego tokenu.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Brak danych sesji, sesja wygasła lub ciasteczka nie są włączone.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nie znaleziono tokenu.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Użytkownik o podanej nazwie nie istnieje.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Konto wygasło.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Dane uwierzytelniania wygasły.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Konto jest wyłączone.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Konto jest zablokowane.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Zbyt dużo nieudanych prób logowania, proszę spróbować ponownie później.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Nieprawidłowy lub wygasły link logowania.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Zbyt wiele nieudanych prób logowania, spróbuj ponownie po upływie %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Zbyt wiele nieudanych prób logowania, spróbuj ponownie po upływie %minutes% minut.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.pt.xlf 0000644 00000010225 15120140445 0014237 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ocorreu uma excepção durante a autenticação.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>As credenciais de autenticação não foram encontradas.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>O pedido de autenticação não foi concluído devido a um problema no sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credenciais inválidas.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Este cookie já está em uso.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Não possui privilégios para aceder a este recurso.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF inválido.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nenhum fornecedor de autenticação encontrado para suportar o token de autenticação.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Não existe sessão disponível, esta expirou ou os cookies estão desativados.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>O token não foi encontrado.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Nome de utilizador não encontrado.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>A conta expirou.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>As credenciais expiraram.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Conta desativada.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>A conta está trancada.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Várias tentativas de login falhadas, por favor tente mais tarde.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ligação de login inválida ou expirada.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Demasiadas tentativas de login, tente novamente num minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Demasiadas tentativas de login, tente novamente em %minutes% minutos.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.pt_BR.xlf 0000644 00000010321 15120140445 0014617 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Uma exceção ocorreu durante a autenticação.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>As credenciais de autenticação não foram encontradas.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>A solicitação de autenticação não pôde ser processada devido a um problema no sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credenciais inválidas.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Este cookie já foi usado por outra pessoa.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Sem privilégio para solicitar o recurso.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF inválido.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nenhum provedor de autenticação encontrado para suportar o token de autenticação.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Nenhuma sessão disponível, ela expirou ou os cookies não estão habilitados.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nenhum token foi encontrado.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Nome de usuário não encontrado.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>A conta está expirada.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>As credenciais estão expiradas.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Conta desativada.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>A conta está travada.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Muitas tentativas de login malsucedidas, tente novamente mais tarde.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link de login inválido ou expirado.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Muitas tentativas de login inválidas, por favor, tente novamente em um minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Muitas tentativas de login inválidas, por favor, tente novamente em %minutes% minutos.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ro.xlf 0000644 00000010311 15120140445 0014230 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>A apărut o eroare de autentificare.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Informațiile de autentificare nu au fost găsite.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Sistemul nu a putut procesa cererea de autentificare din cauza unei erori.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Date de autentificare invalide.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie este folosit deja de altcineva.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Permisiuni insuficiente pentru resursa cerută.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF este invalid.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nu a fost găsit nici un agent de autentificare pentru tokenul specificat.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sesiunea nu mai este disponibilă, a expirat sau suportul pentru cookies nu este activat.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Tokenul nu a putut fi găsit.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Numele de utilizator nu a fost găsit.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Contul a expirat.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Datele de autentificare au expirat.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Contul este dezactivat.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Contul este blocat.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Prea multe încercări de autentificare eșuate, vă rugăm să încercați mai târziu.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link de autentificare invalid sau expirat.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Prea multe încercări nereușite, încearcă din nou în %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Prea multe încercări nereușite, încearcă din nou în %minutes% minute.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ru.xlf 0000644 00000011656 15120140445 0014253 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ошибка аутентификации.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Аутентификационные данные не найдены.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Запрос аутентификации не может быть обработан в связи с проблемой в системе.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Недействительные аутентификационные данные.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie уже был использован кем-то другим.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Отсутствуют права на запрос этого ресурса.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Недействительный токен CSRF.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Не найден провайдер аутентификации, поддерживающий токен аутентификации.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Сессия не найдена, ее время истекло, либо cookies не включены.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токен не найден.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Имя пользователя не найдено.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Время действия учетной записи истекло.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Время действия аутентификационных данных истекло.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Учетная запись отключена.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Учетная запись заблокирована.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Слишком много неудачных попыток входа, пожалуйста, попробуйте позже.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ссылка для входа недействительна или просрочена.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Слишком много неудачных попыток входа в систему, повторите попытку через %minutes% минуту.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Слишком много неудачных попыток входа в систему, повторите попытку через %minutes% мин.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sk.xlf 0000644 00000010310 15120140445 0014224 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Pri overovaní došlo k chybe.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Overovacie údaje neboli nájdené.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Požiadavok na overenie nemohol byť spracovaný kvôli systémovej chybe.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Neplatné prihlasovacie údaje.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie už bolo použité niekým iným.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nemáte oprávnenie pristupovať k prostriedku.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Neplatný CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Poskytovateľ pre overovací token nebol nájdený.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Session nie je k dispozíci, vypršala jej platnosť, alebo sú zakázané cookies.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Token nebol nájdený.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Prihlasovacie meno nebolo nájdené.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Platnosť účtu skončila.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Platnosť prihlasovacích údajov skončila.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Účet je zakázaný.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Účet je zablokovaný.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Príliš mnoho neúspešných pokusov o prihlásenie. Skúste to prosím znovu neskôr.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Neplatný alebo expirovaný odkaz na prihlásenie.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Príliš veľa neúspešných pokusov o prihlásenie. Skúste to znova o %minutes% minútu.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Príliš veľa neúspešných pokusov o prihlásenie. Skúste to znova o %minutes% minút.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sl.xlf 0000644 00000010205 15120140445 0014230 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Prišlo je do izjeme pri preverjanju avtentikacije.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Poverilnic za avtentikacijo ni bilo mogoče najti.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Zahteve za avtentikacijo ni bilo mogoče izvesti zaradi sistemske težave.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Neveljavne pravice.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Piškotek je uporabil že nekdo drug.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nimate privilegijev za zahtevani vir.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Neveljaven CSRF žeton.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ponudnika avtentikacije za podporo prijavnega žetona ni bilo mogoče najti.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Seja ni na voljo, ali je potekla ali pa piškotki niso omogočeni.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Žetona ni bilo mogoče najti.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Uporabniškega imena ni bilo mogoče najti.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Račun je potekel.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Poverilnice so potekle.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Račun je onemogočen.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Račun je zaklenjen.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Preveč neuspelih poskusov prijave, poskusite znova pozneje.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Neveljavna ali potekla povezava prijave.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Preveč neuspelih poskusov prijave, poskusite znova čez %minutes% minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Preveč neuspelih poskusov prijave, poskusite znova čez %minutes% minut.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sq.xlf 0000644 00000007341 15120140445 0014244 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ndodhi një problem në autentikim.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Kredencialet e autentikimit nuk mund të gjendeshin.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Kërkesa për autentikim nuk mund të përpunohej për shkak të një problemi në sistem.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Kredenciale të pavlefshme.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie është përdorur tashmë nga dikush tjetër.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nuk është i privilegjuar të kërkojë burimin.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Identifikues i pavlefshëm CSRF.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Asnjë ofrues i vërtetimit nuk u gjet që të mbështesë simbolin e vërtetimit.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Nuk ka asnjë sesion të vlefshëm, i ka skaduar koha ose cookies nuk janë aktivizuar.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Asnjë simbol identifikimi nuk mund të gjendej.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Emri i përdoruesit nuk mund të gjendej.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Llogaria ka skaduar.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Kredencialet kanë skaduar.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Llogaria është çaktivizuar.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Llogaria është e kyçur.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Shumë përpjekje të dështuara autentikimi, provo përsëri më vonë.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link hyrje i pavlefshëm ose i skaduar.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sr_Cyrl.xlf 0000644 00000011527 15120140445 0015237 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Изузетак при аутентификацији.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Аутентификациони подаци нису пронађени.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Захтев за аутентификацију не може бити обрађен због системских проблема.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Невалидни подаци за аутентификацију.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Колачић је већ искоришћен од стране неког другог.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Немате права приступа овом ресурсу.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Невалидан CSRF токен.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Аутентификациони провајдер за подршку токена није пронађен.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Сесија није доступна, истекла је или су колачићи искључени.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токен не може бити пронађен.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Корисничко име не може бити пронађено.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Налог је истекао.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Подаци за аутентификацију су истекли.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Налог је онемогућен.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Налог је закључан.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Превише неуспешних покушаја пријављивања, молим покушајте поново касније.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Линк за пријављивање је истекао или је неисправан.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Превише неуспешних покушаја пријављивања, молим покушајте поново за %minutes% минут.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Превише неуспешних покушаја пријављивања, молим покушајте поново за %minutes% минута.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sr_Latn.xlf 0000644 00000010274 15120140445 0015222 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Izuzetak pri autentifikaciji.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentifikacioni podaci nisu pronađeni.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Zahtev za autentifikaciju ne može biti obrađen zbog sistemskih problema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Nevalidni podaci za autentifikaciju.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Kolačić je već iskorišćen od strane nekog drugog.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nemate prava pristupa ovom resursu.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Nevalidan CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Autentifikacioni provajder za podršku tokena nije pronađen.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sesija nije dostupna, istekla je ili su kolačići isključeni.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Token ne može biti pronađen.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Korisničko ime ne može biti pronađeno.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Nalog je istekao.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Podaci za autentifikaciju su istekli.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Nalog je onemogućen.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Nalog je zaključan.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Previše neuspešnih pokušaja prijavljivanja, molim pokušajte ponovo kasnije.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link za prijavljivanje je istekao ili je neispravan.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Previše neuspešnih pokušaja prijavljivanja, molim pokušajte ponovo za %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Previše neuspešnih pokušaja prijavljivanja, molim pokušajte ponovo za %minutes% minuta.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.sv.xlf 0000644 00000010224 15120140445 0014243 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ett autentiseringsfel har inträffat.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Uppgifterna för autentisering kunde inte hittas.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentiseringen kunde inte genomföras på grund av systemfel.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Felaktiga uppgifter.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookien har redan använts av någon annan.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Saknar rättigheter för resursen.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ogiltig CSRF-token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ingen leverantör för autentisering hittades för angiven autentiseringstoken.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ingen session finns tillgänglig, antingen har den förfallit eller är cookies inte aktiverat.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Ingen token kunde hittas.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Användarnamnet kunde inte hittas.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Kontot har förfallit.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Uppgifterna har förfallit.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Kontot är inaktiverat.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Kontot är låst.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>För många misslyckade inloggningsförsök, försök igen senare.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ogiltig eller utgången inloggningslänk.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>För många misslyckade inloggningsförsök, försök igen om %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>För många misslyckade inloggningsförsök, försök igen om %minutes% minuter.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.th.xlf 0000644 00000012354 15120140445 0014234 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>พบความผิดพลาดในการรับรองตัวตน</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>ไม่พบข้อมูลในการรับรองตัวตน (credentials) </target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>คำร้องในการรับรองตัวตนไม่สามารถดำเนินการได้ เนื่องมาจากปัญหาของระบบ</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>ข้อมูลการรับรองตัวตนไม่ถูกต้อง</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie ถูกใช้งานไปแล้วด้วยผู้อื่น</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>ไม่ได้รับสิทธิ์ให้ใช้งานส่วนนี้ได้</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF token ไม่ถูกต้อง</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>ไม่พบ authentication provider ที่รองรับสำหรับ authentication token</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>ไม่มี session ที่พร้อมใช้งาน, Session หมดอายุไปแล้วหรือ cookies ไม่ถูกเปิดใช้งาน</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>ไม่พบ token</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>ไม่พบ Username</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>บัญชีหมดอายุไปแล้ว</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>ข้อมูลการระบุตัวตนหมดอายุแล้ว</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>บัญชีถูกระงับแล้ว</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>บัญชีถูกล็อกแล้ว</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>มีความพยายามเข้าสู่ระบบล้มเหลวมากเกินไป กรุณาลองใหม่ภายหลัง</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>ลิงค์เข้าสู่ระบบไม่ถูกต้องหรือหมดอายุไปแล้ว</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>มีความพยายามเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>มีความพยายามเข้าสู่ระบบล้มเหลวมากเกินไป โปรดลองอีกครั้งใน %minutes% นาที</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.tl.xlf 0000644 00000010434 15120140445 0014235 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Nagkaroon ng isang pagbubukod sa pagpapatotoo.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Hindi matagpuan ang mga kredensyal ng pagpapatotoo.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Ang kahilingan sa pagpapatotoo ay hindi naproseso dahil sa isang problema sa system.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Di-wastong mga kredensyal.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Ang Cookie ay ginamit na ng ibang tao.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Walang pribilehiyo upang humingi ng mga bagong mapagkukunan.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Di-wastong token ng CSRF.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Walang nahanap na provider ng pagpapatotoo upang suportahan ang token ng pagpapatotoo.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Walang magagamit na session, alinman sa nag-time out o ang cookies ay hindi pinagana.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Walang makitang token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Hindi makita ang username.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Nag-expire na ang account.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Nag-expire na ang mga kredensyal.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Ang account ay hindi pinagana.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Ang account ay naka-lock.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Napakaraming nabigong mga pagtatangka sa pag-login, mangyaring subukang muli sa ibang pagkakataon.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Inbalido o nagexpire na ang link para makapaglogin.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Napakaraming nabigong mga pagtatangka sa pag-login, pakisubukan ulit sa% minuto% minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Napakaraming nabigong mga pagtatangka sa pag-login, pakisubukan ulit sa% minuto% minuto.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.tr.xlf 0000644 00000010306 15120140445 0014241 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Bir yetkilendirme istisnası oluştu.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Kimlik bilgileri bulunamadı.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Bir sistem hatası nedeniyle yetkilendirme isteği işleme alınamıyor.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Geçersiz kimlik bilgileri.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Çerez bir başkası tarafından zaten kullanılmıştı.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Kaynak talebi için imtiyaz bulunamadı.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Geçersiz CSRF fişi.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Yetkilendirme fişini destekleyecek yetkilendirme sağlayıcısı bulunamadı.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Oturum bulunamadı, zaman aşımına uğradı veya çerezler etkin değil.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Fiş bulunamadı.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Kullanıcı adı bulunamadı.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Hesap zaman aşımına uğradı.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Kimlik bilgileri zaman aşımına uğradı.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Hesap engellenmiş.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Hesap kilitlenmiş.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Çok fazla başarısız giriş denemesi, lütfen daha sonra tekrar deneyin.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Geçersiz veya süresi dolmuş oturum açma bağlantısı.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Çok fazla başarısız giriş denemesi, lütfen %minutes% dakika sonra tekrar deneyin.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.uk.xlf 0000644 00000011536 15120140445 0014241 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Помилка автентифікації.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Автентифікаційні дані не знайдено.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Запит на автентифікацію не може бути опрацьовано у зв’язку з проблемою в системі.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Невірні автентифікаційні дані.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Хтось інший вже використав цей сookie.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Відсутні права на запит цього ресурсу.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Невірний токен CSRF.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Не знайдено провайдера автентифікації, що підтримує токен автентифікаціії.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Сесія недоступна, її час вийшов, або cookies вимкнено.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токен не знайдено.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Ім’я користувача не знайдено.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Термін дії облікового запису вичерпано.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Термін дії автентифікаційних даних вичерпано.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Обліковий запис відключено.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Обліковий запис заблоковано.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Забагато невдалих спроб входу. Будь ласка, спробуйте пізніше.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Посилання для входу недійсне, або термін його дії закінчився.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Забагато невдалих спроб входу. Будь ласка, спробуйте знову через %minutes% хвилину.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Забагато невдалих спроб входу. Будь ласка, спробуйте знову через %minutes% хв.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ur.xlf 0000644 00000011244 15120140445 0014244 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="ur" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>ایک تصدیقي خرابی پیش آگئی ۓ</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>درج کردھ ریکارڈ نہیں مل سکا</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>سسٹم کی خرابی کی وجہ سے تصدیق کی درخواست پر کارروائی نہیں ہو سکی</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>غلط ڈیٹا</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>کوکی پہلے ہی کسی اور کے ذریعہ استعمال ہو چکی ہے</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>وسائل کی درخواست کرنے کا اختیار نہیں ہے</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>ٹوکن غلط ہے CSRF</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>تصدیقی ٹوکن کو سپورٹ کرنے کے لیے کوئی تصدیقی کنندہ نہیں ملا</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>کوئی سیشن دستیاب نہیں ہے، یا تو اس کا وقت ختم ہو گیا ہے یا کوکیز فعال نہیں ہیں</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>کوئی ٹوکن نہیں مل سکا</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>يوذر نہیں مل سکا</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>اکاؤنٹ کی میعاد ختم ہو گئی ہے</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>اسناد کی میعاد ختم ہو چکی ہے</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>اکاؤنٹ بند کر دیا گیا ہے</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>اکاؤنٹ لاک ہے</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم بعد میں دوبارہ کوشش کریں</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>غلط یا ختم شدھ لاگ ان لنک</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں </target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں </target> </trans-unit> </body> </file> </xliff> Resources/translations/security.uz.xlf 0000644 00000010260 15120140445 0014251 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Autentifikatsiyada xatolik.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentifikatsiya ma'lumotlari topilmadi.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Tizimdagi muammo tufayli autentifikatsiya so'rovi bajarilmadi.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Noto'g'ri ma'lumot.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie faylini allaqachon kimdir ishlatgan.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Sizda ushbu manbani talab qilishga ruxsat yo'q..</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Noto'g'ri CSRF belgisi.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Haqiqiylikni tasdiqlovchi belgini qo'llab-quvvatlovchi biron bir autentifikatsiya provayderi topilmadi.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sessiya topilmadi, muddati tugamadi yoki cookie-fayllar yoqilmagan.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>To'ken topilmadi.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Foydalanuvchi nomi topilmadi.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Akkunt muddati tugagan.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Autentifikatsiya ma'lumotlari muddati tugagan.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Akkunt o'chirilgan.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Akkunt bloklangan.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Kirish urinishlari muvaffaqiyatsiz tugadi, keyinroq qayta urinib ko'ring.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Kirish havolasi yaroqsiz yoki muddati tugagan.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Kirish uchun muvaffaqiyatsiz urinishlar, %minutes% daqiqadan so'ng qayta urinib ko'ring.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Kirish uchun muvaffaqiyatsiz urinishlar, %minutes% daqiqadan so'ng qayta urinib ko'ring.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.vi.xlf 0000644 00000010612 15120140445 0014232 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Có lỗi trong quá trình xác thực.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Thông tin dùng để xác thực không tìm thấy.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Yêu cầu xác thực không thể thực hiện do lỗi của hệ thống.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Thông tin dùng để xác thực không hợp lệ.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie đã được dùng bởi người dùng khác.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Không được phép yêu cầu tài nguyên.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Mã CSRF không hợp lệ.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Không tìm thấy nhà cung cấp dịch vụ xác thực nào cho mã xác thực mà bạn sử dụng.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Không tìm thấy phiên làm việc. Phiên làm việc hoặc cookie có thể bị tắt.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Không tìm thấy mã token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Không tìm thấy tên người dùng.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Tài khoản đã hết hạn.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Thông tin xác thực đã hết hạn.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Tài khoản bị tạm ngừng.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Tài khoản bị khóa.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Đăng nhập sai quá nhiều lần, vui lòng thử lại lần nữa.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Liên kết đăng nhập không hợp lệ hoặc quá hạn.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Quá nhiều lần thử đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Quá nhiều lần thử đăng nhập không thành công, vui lòng thử lại sau %minutes% phút.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.zh_CN.xlf 0000644 00000007743 15120140445 0014630 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>身份验证发生异常。</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>没有找到身份验证的凭证。</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>由于系统故障,身份验证的请求无法被处理。</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>无效的凭证。</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie 已经被其他人使用。</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>没有权限请求此资源。</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>无效的 CSRF token 。</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>没有找到支持此 token 的身份验证服务提供方。</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Session 不可用。会话超时或没有启用 cookies 。</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>找不到 token 。</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>找不到用户名。</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>帐号已过期。</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>凭证已过期。</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>帐号已被禁用。</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>帐号已被锁定。</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>登入失败的次数过多,请稍后再试。</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>失效或过期的登入链接。</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>登入失败的次数过多,请在%minutes%分钟后再试。</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>登入失败的次数过多,请在%minutes%分钟后再试。</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.zh_TW.xlf 0000644 00000007743 15120140445 0014662 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>身份驗證發生異常。</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>沒有找到身份驗證的憑證。</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>由於系統故障,身份驗證的請求無法被處理。</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>無效的憑證。</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie 已經被其他人使用。</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>沒有權限請求此資源。</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>無效的 CSRF token 。</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>沒有找到支持此 token 的身份驗證服務提供方。</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Session 不可用。回話超時或沒有啓用 cookies 。</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>找不到 token 。</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>找不到用戶名。</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>賬號已逾期。</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>憑證已逾期。</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>賬號已被禁用。</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>賬號已被鎖定。</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>登入失敗的次數過多,請稍後再試。</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>失效或過期的登入鏈接。</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>登錄失敗的次數過多,請在%minutes%分鐘後再試。</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>登錄失敗的次數過多,請在%minutes%分鐘後再試。</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.af.xlf 0000644 00000007173 15120140445 0014212 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>'n Verifikasie probleem het voorgekom.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Verifikasiebewyse kon nie gevind word nie.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Verifikasieversoek kon weens 'n stelselprobleem nie verwerk word nie.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ongedige verifikasiebewyse.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Die koekie is alreeds deur iemand anders gebruik.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nie bevoorreg om die hulpbron aan te vra nie.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ongeldige CSRF-teken.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Geen verifikasieverskaffer is gevind wat die verifikasietoken kan ondersteun nie.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Geen sessie is beskikbaar, die het verval of koekies is nie geaktiveer nie.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Geen teken kon gevind word nie.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Gebruikersnaam kon nie gevind word nie.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Rekening het verval.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Verifikasiebewyse het verval.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Rekening is deaktiveer.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Rekening is gesluit.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Te veel mislukte aanmeldpogings, probeer asseblief later weer.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ongeldige of vervalde aanmeldskakel.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ar.xlf 0000644 00000011307 15120140445 0014220 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>حدث خطأ اثناء الدخول.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>لم استطع العثور على معلومات الدخول.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>لم يكتمل طلب الدخول نتيجه عطل فى النظام.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>معلومات الدخول خاطئة.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>ملفات تعريف الارتباط(cookies) تم استخدامها من قبل شخص اخر.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>ليست لديك الصلاحيات الكافية لهذا الطلب.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>رمز الموقع غير صحيح.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>لا يوجد معرف للدخول يدعم الرمز المستخدم للدخول.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>لا يوجد صلة بينك و بين الموقع اما انها انتهت او ان متصفحك لا يدعم خاصية ملفات تعريف الارتباط (cookies).</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>لم استطع العثور على الرمز.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>لم استطع العثور على اسم الدخول.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>انتهت صلاحية الحساب.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>انتهت صلاحية معلومات الدخول.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>الحساب موقوف.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>الحساب مغلق.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>عدد كبير جدا من محاولات الدخول الفاشلة، يرجى المحاولة مرة أخرى في وقت لاحق.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>رابط تسجيل الدخول غير صالح أو منتهي الصلاحية.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>عدد كبير جدا من محاولات الدخول الفاشلة، يرجى اعادة المحاولة بعد %minutes% دقيقة.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>عدد كبير جدا من محاولات الدخول الفاشلة، يرجى اعادة المحاولة بعد %minutes% دقيقة.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.az.xlf 0000644 00000010272 15120140446 0014231 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Doğrulama istisnası baş verdi.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Doğrulama məlumatları tapılmadı.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Sistem xətası səbəbilə doğrulama istəyi emal edilə bilmədi.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Yanlış məlumat.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Kuki başqası tərəfindən istifadə edilib.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Resurs istəyi üçün imtiyaz yoxdur.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Yanlış CSRF nişanı.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Doğrulama nişanını dəstəkləyəcək provayder tapılmadı.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Uyğun seans yoxdur, vaxtı keçib və ya kuki aktiv deyil.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nişan tapılmadı.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>İstifadəçi adı tapılmadı.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Hesabın istifadə müddəti bitib.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Məlumatların istifadə müddəti bitib.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Hesab qeyri-aktiv edilib.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Hesab kilitlənib.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Çoxlu uğursuz giriş təşəbbüsü, zəhmət olmasa daha sonra yeniden yoxlayın.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Yanlış və ya müddəti keçmiş giriş keçidi.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.be.xlf 0000644 00000011644 15120140446 0014211 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Памылка аўтэнтыфікацыі.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Дадзеныя аўтэнтыфікацыі не знойдзены.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Запыт аўтэнтыфікацыі не можа быць апрацаваны ў сувязі з праблемай у сістэме.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Несапраўдныя дадзеныя аўтэнтыфікацыі.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Нехта іншы ўжо выкарыстаў гэтыя кукі (cookie).</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Адсутнічаюць правы на запыт гэтага рэсурсу.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Несапраўдны CSRF-токен.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Не знойдзен правайдар аўтэнтыфікацыі, які можа падтрымліваць гэты токен аўтэнтыфікацыі.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Сесія не даступна, яе час скончыўся, або кукі (cookies) выключаны.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токен не знойдзен.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Імя карыстальніка не знойдзена.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Скончыўся тэрмін дзеяння акаўнта.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Скончыўся тэрмін дзеяння дадзеных аўтэнтыфікацыі.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Акаўнт адключан.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Акаўнт заблакіраван.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Зашмат няўдалых спроб уваходу, калі ласка, паспрабуйце пазней.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Спасылка для ўваходу несапраўдная або пратэрмінаваная.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Занадта шмат няўдалых спроб уваходу ў сістэму, паспрабуйце спробу праз %minutes% хвіліну.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Занадта шмат няўдалых спроб уваходу ў сістэму, паспрабуйце спробу праз %minutes% хвілін.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.bg.xlf 0000644 00000011417 15120140446 0014211 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Грешка при автентикация.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Удостоверението за автентикация не е открито.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Заявката за автентикация не може да бъде обработената поради системна грешка.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Невалидно удостоверение за автентикация.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Тази бисквитка вече се ползва от някой друг.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Нямате права за достъп до този ресурс.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Невалиден CSRF токен.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Не е открит провайдър, който да поддържа този токен за автентикация.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Сесията не е достъпна, или времето за достъп е изтекло, или бисквитките не са разрешени.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Токенът не е открит.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Потребителското име не е открито.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Акаунтът е изтекъл.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Удостоверението за автентикация е изтекло.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Акаунтът е деактивиран.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Акаунтът е заключен.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Твърде много неуспешни опити за вход, моля опитайте по-късно.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Невалиден или изтекъл линк за вход.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минута.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Твърде много неуспешни опити за вход, моля опитайте отново след %minutes% минути.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.bs.xlf 0000644 00000010416 15120140446 0014223 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Došlo je do autentifikacijskog izuzetka (exception).</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentifikacijski podaci nisu pronađeni.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentifikacijski zahtjev ne može biti obrađen zbog sistemskog problema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Autentifikacijski podaci su neispravni.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Neko drugi je već iskoristio ovaj kolačić (cookie).</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nemate privilegije potrebne za pristup ovom resursu.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF žeton (token) je neispravan.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nije pronađen autentifikacijski provajder koji bi podržao dati autentifikacijski žeton (token).</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Nema dostupnih sesija; ili je istekla ili su kolačići (cookies) iksljučeni.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nije pronađen nijedan žeton (token).</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Korisničko ime nije pronađeno.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Nalog je istekao.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Autentifikacijski podaci su istekli.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Nalog je onemogućen.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Nalog je zaključan.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Previše neuspješnih pokušaja prijavljivanja, molim pokušajte ponovo kasnije.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link za prijavljivanje je istekao ili je neispravan.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ca.xlf 0000644 00000010311 15120140446 0014174 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ha succeït un error d'autenticació.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>No s'han trobat les credencials d'autenticació.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>La solicitud d'autenticació no s'ha pogut processar per un problema del sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credencials no vàlides.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>La cookie ja ha estat utilitzada per una altra persona.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>No té privilegis per solicitar el recurs.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF no vàlid.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>No s'ha trobat un proveïdor d'autenticació que suporti el token d'autenticació.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>No hi ha sessió disponible, ha expirat o les cookies no estan habilitades.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>No s'ha trobat cap token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>No s'ha trobat el nom d'usuari.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>El compte ha expirat.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Les credencials han expirat.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>El compte està deshabilitat.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>El compte està bloquejat.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Massa intents d'inici de sessió fallits, torneu-ho a provar més tard.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Enllaç d'inici de sessió no vàlid o caducat.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Massa intents d'inici de sessió fallits, torneu-ho a provar en %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Massa intents d'inici de sessió fallits, torneu-ho a provar en %minutes% minuts.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.cs.xlf 0000644 00000010343 15120140446 0014223 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Při ověřování došlo k chybě.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Ověřovací údaje nebyly nalezeny.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Požadavek na ověření nemohl být zpracován kvůli systémové chybě.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Neplatné přihlašovací údaje.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie již bylo použité někým jiným.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nemáte oprávnění přistupovat k prostředku.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Neplatný CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Poskytovatel pro ověřovací token nebyl nalezen.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Session není k dispozici, vypršela její platnost, nebo jsou zakázané cookies.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Token nebyl nalezen.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Přihlašovací jméno nebylo nalezeno.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Platnost účtu vypršela.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Platnost přihlašovacích údajů vypršela.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Účet je zakázaný.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Účet je zablokovaný.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Příliš mnoho nepovedených pokusů přihlášení. Zkuste to prosím později.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Neplatný nebo expirovaný odkaz na přihlášení.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minutu.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minut.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.da.xlf 0000644 00000010133 15120140446 0014177 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>En fejl indtraf ved godkendelse.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Loginoplysninger kan ikke findes.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Godkendelsesanmodning kan ikke behandles på grund af et systemfejl.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ugyldige loginoplysninger.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie er allerede brugt af en anden.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ingen adgang til at forespørge ressourcen.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ugyldig CSRF-token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ingen godkendelsesudbyder er fundet til understøttelsen af godkendelsestoken.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ingen session tilgængelig, sessionen er enten udløbet eller cookies er ikke aktiveret.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Ingen token kan findes.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Brugernavn kan ikke findes.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Brugerkonto er udløbet.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Loginoplysninger er udløbet.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Brugerkonto er deaktiveret.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Brugerkonto er låst.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>For mange fejlede login forsøg, prøv venligst senere.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ugyldigt eller udløbet login link.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>For mange fejlede login forsøg, prøv igen om %minutes% minut.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>For mange fejlede login forsøg, prøv igen om %minutes% minutter.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.de.xlf 0000644 00000010460 15120140446 0014206 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Es ist ein Fehler bei der Authentifikation aufgetreten.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Es konnten keine Zugangsdaten gefunden werden.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Die Authentifikation konnte wegen eines Systemproblems nicht bearbeitet werden.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Fehlerhafte Zugangsdaten.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie wurde bereits von jemand anderem verwendet.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Keine Rechte, um die Ressource anzufragen.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ungültiges CSRF-Token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Es wurde kein Authentifizierungs-Provider gefunden, der das Authentifizierungs-Token unterstützt.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Keine Session verfügbar, entweder ist diese abgelaufen oder Cookies sind nicht aktiviert.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Es wurde kein Token gefunden.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Der Benutzername wurde nicht gefunden.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Der Account ist abgelaufen.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Die Zugangsdaten sind abgelaufen.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Der Account ist deaktiviert.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Der Account ist gesperrt.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es später noch einmal.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ungültiger oder abgelaufener Anmelde-Link.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in einer Minute noch einmal.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in %minutes% Minuten noch einmal.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.el.xlf 0000644 00000012052 15120140446 0014215 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Συνέβη ένα σφάλμα πιστοποίησης.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Τα στοιχεία πιστοποίησης δε βρέθηκαν.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Το αίτημα πιστοποίησης δε μπορεί να επεξεργαστεί λόγω σφάλματος του συστήματος.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Λανθασμένα στοιχεία σύνδεσης.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Το Cookie έχει ήδη χρησιμοποιηθεί από κάποιον άλλο.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Δεν είστε εξουσιοδοτημένος για πρόσβαση στο συγκεκριμένο περιεχόμενο.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Μη έγκυρο CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Δε βρέθηκε κάποιος πάροχος πιστοποίησης που να υποστηρίζει το token πιστοποίησης.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Δεν υπάρχει ενεργή σύνοδος (session), είτε έχει λήξει ή τα cookies δεν είναι ενεργοποιημένα.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Δεν ήταν δυνατόν να βρεθεί κάποιο token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Το όνομα χρήστη δε βρέθηκε.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Ο λογαριασμός έχει λήξει.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Τα στοιχεία σύνδεσης έχουν λήξει.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Ο λογαριασμός είναι απενεργοποιημένος.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Ο λογαριασμός είναι κλειδωμένος.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Πολλαπλές αποτυχημένες απόπειρες σύνδεσης, παρακαλούμε ξαναδοκιμάστε αργότερα.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Μη έγκυρος ή ληγμένος σύνδεσμος σύνδεσης.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Πολλαπλές αποτυχημένες απόπειρες σύνδεσης, παρακαλούμε ξαναδοκιμάστε σε %minutes% λεπτό.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Πολλαπλές αποτυχημένες απόπειρες σύνδεσης, παρακαλούμε ξαναδοκιμάστε σε %minutes% λεπτά.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.en.xlf 0000644 00000010106 15120140446 0014215 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>An authentication exception occurred.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Authentication credentials could not be found.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Authentication request could not be processed due to a system problem.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Invalid credentials.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie has already been used by someone else.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Not privileged to request the resource.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Invalid CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>No authentication provider found to support the authentication token.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>No session available, it either timed out or cookies are not enabled.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>No token could be found.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Username could not be found.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Account has expired.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Credentials have expired.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Account is disabled.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Account is locked.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Too many failed login attempts, please try again later.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Invalid or expired login link.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Too many failed login attempts, please try again in %minutes% minute.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Too many failed login attempts, please try again in %minutes% minutes.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.es.xlf 0000644 00000010412 15120140446 0014222 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ocurrió un error de autenticación.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>No se encontraron las credenciales de autenticación.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>La solicitud de autenticación no se pudo procesar debido a un problema del sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credenciales no válidas.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>La cookie ya ha sido usada por otra persona.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>No tiene privilegios para solicitar el recurso.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF no válido.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>No se encontró un proveedor de autenticación que soporte el token de autenticación.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>No hay ninguna sesión disponible, ha expirado o las cookies no están habilitados.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>No se encontró ningún token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>No se encontró el nombre de usuario.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>La cuenta ha expirado.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Las credenciales han expirado.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>La cuenta está deshabilitada.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>La cuenta está bloqueada.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo más tarde.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Enlace de inicio de sesión inválido o expirado.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Demasiados intentos fallidos de inicio de sesión, inténtelo de nuevo en %minutes% minutos.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.et.xlf 0000644 00000010222 15120140446 0014222 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Autentimisel juhtus ootamatu viga.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentimisandmeid ei leitud.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentimispäring ei õnnestunud süsteemi probleemi tõttu.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Vigased autentimisandmed.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Küpsis on juba kellegi teise poolt kasutuses.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ressursi pärimiseks pole piisavalt õiguseid.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Vigane CSRF märgis.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ei leitud sobivat autentimismeetodit, mis toetaks autentimismärgist.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Seanss puudub, see on kas aegunud või pole küpsised lubatud.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Identsustõendit ei leitud.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Kasutajanime ei leitud.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Kasutajakonto on aegunud.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Autentimistunnused on aegunud.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Kasutajakonto on keelatud.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Kasutajakonto on lukustatud.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Liiga palju ebaõnnestunud autentimise katseid, palun proovi hiljem uuesti.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Vigane või aegunud sisselogimise link.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Liiga palju ebaõnnestunud autentimise katseid, palun proovi uuesti %minutes% minuti pärast.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Liiga palju ebaõnnestunud autentimise katseid, palun proovi uuesti %minutes% minuti pärast.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.eu.xlf 0000644 00000010217 15120140446 0014227 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Autentifikazio-errorea gertatu da.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Ez dira aurkitu autentifikazio-kredentzialak.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Ezin izan da autentifikazio-eskaera prozesatu, sistema-arazo bat gertatu da eta.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Kredentzialak okerrak dira.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Dagoeneko beste pertsona batek erabili du cookiea.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ez duzu baliabidea eskatzeko aukerarik.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF tokena okerra da.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Ez da aurkitu autentifikazio-tokena eutsi dezakeen autentifikazio-hornitzailerik.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Ez dago saiorik erabilgarri, iraungi egin da edo cookieak ez daude gaituta.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Ez da tokenik aurkitu.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Ez da erabiltzaile-izena aurkitu.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Kontua iraungi da.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Kredentzialak iraungi dira.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Kontua desgaituta dago.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Kontua blokeatuta dago.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Saioa hasteko saio huts gehiegi, saiatu berriro geroago.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Sartzeko esteka baliogabea edo iraungia.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Saioa hasteko huts gehiegi egin dira, saiatu berriro minutu %minutes% geroago.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Saioa hasteko huts gehiegi egin dira, saiatu berriro %minutes% minututan.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.fa.xlf 0000644 00000011650 15120140446 0014206 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>خطایی هنگام احراز هویت رخ داده است.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>شرایط احراز هویت یافت نشد.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>درخواست احراز هویت به دلیل وجود مشکل در سیستم قابل پردازش نمی باشد.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>احراز هویت نامعتبر می باشد.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie قبلا توسط شخص دیگری استفاده گردیده است.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>دسترسی لازم برای درخواست از این منبع را دارا نمی باشید.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>توکن CSRF معتبر نمی باشد.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>هیچ ارائه دهنده احراز هویتی برای پشتیبانی از توکن احراز هویت پیدا نشد.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>هیچ جلسهای در دسترس نمی باشد. این میتواند به دلیل پایان یافتن زمان و یا فعال نبودن کوکی ها باشد.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>هیچ توکنی پیدا نشد.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>نام کاربری پیدا نشد.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>حساب کاربری منقضی گردیده است.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>مجوزهای احراز هویت منقضی گردیدهاند.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>حساب کاربری غیرفعال می باشد.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>حساب کاربری قفل گردیده است.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>تلاشهای ناموفق زیادی برای ورود صورت گرفته است، لطفاً بعداً دوباره امتحان کنید.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>لینک ورود نامعتبر یا تاریخگذشته است.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>تلاشهای ناموفق زیادی برای ورود صورت گرفته است، لطفاً %minutes% دقیقه دیگر دوباره امتحان کنید.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>تلاشهای ناموفق زیادی برای ورود صورت گرفته است، لطفاً %minutes% دقیقه دیگر دوباره امتحان کنید.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.fi.xlf 0000644 00000010275 15120140446 0014220 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Autentikointi poikkeus tapahtui.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentikoinnin tunnistetietoja ei löydetty.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentikointipyyntöä ei voitu käsitellä järjestelmäongelman vuoksi.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Virheelliset tunnistetiedot.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Eväste on jo jonkin muun käytössä.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ei oikeutta resurssiin.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Virheellinen CSRF tunnus.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Autentikointi tunnukselle ei löydetty tuettua autentikointi tarjoajaa.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sessio ei ole saatavilla, se on joko vanhentunut tai evästeet eivät ole käytössä.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Tunnusta ei löytynyt.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Käyttäjätunnusta ei löydetty.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Tili on vanhentunut.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Tunnistetiedot ovat vanhentuneet.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Tili on poistettu käytöstä.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Tili on lukittu.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Liian monta epäonnistunutta kirjautumisyritystä, yritä myöhemmin uudelleen.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Virheellinen tai vanhentunut kirjautumislinkki.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.fr.xlf 0000644 00000010463 15120140446 0014230 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Une exception d'authentification s'est produite.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Les identifiants d'authentification n'ont pas pu être trouvés.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>La requête d'authentification n'a pas pu être executée à cause d'un problème système.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Identifiants invalides.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Le cookie a déjà été utilisé par quelqu'un d'autre.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Privilèges insuffisants pour accéder à la ressource.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Jeton CSRF invalide.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Aucun fournisseur d'authentification n'a été trouvé pour supporter le jeton d'authentification.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Aucune session disponible, celle-ci a expiré ou les cookies ne sont pas activés.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Aucun jeton n'a pu être trouvé.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Le nom d'utilisateur n'a pas pu être trouvé.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Le compte a expiré.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Les identifiants ont expiré.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Le compte est désactivé.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Le compte est bloqué.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Plusieurs tentatives de connexion ont échoué, veuillez réessayer plus tard.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Lien de connexion invalide ou expiré.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Plusieurs tentatives de connexion ont échoué, veuillez réessayer dans %minutes% minute.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Plusieurs tentatives de connexion ont échoué, veuillez réessayer dans %minutes% minutes.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.gl.xlf 0000644 00000010371 15120140446 0014221 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Ocorreu un erro de autenticación.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Non se atoparon as credenciais de autenticación.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>A solicitude de autenticación no puido ser procesada debido a un problema do sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credenciais non válidas.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>A cookie xa foi empregado por outro usuario.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Non ten privilexios para solicitar o recurso.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF non válido.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Non se atopou un provedor de autenticación que soporte o token de autenticación.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Non hai ningunha sesión dispoñible, expirou ou as cookies non están habilitadas.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Non se atopou ningún token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Non se atopou o nome de usuario.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>A conta expirou.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>As credenciais expiraron.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>A conta está deshabilitada.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>A conta está bloqueada.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Demasiados intentos de inicio de sesión fallados. Téntao de novo máis tarde.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ligazón de inicio de sesión non válida ou caducada.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Demasiados intentos de inicio de sesión errados, por favor, ténteo de novo en %minutes% minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Demasiados intentos de inicio de sesión errados, por favor, ténteo de novo en %minutes% minutos.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.he.xlf 0000644 00000010425 15120140446 0014213 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>שגיאה באימות</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>פרטי זיהוי לא נמצאו.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>לא ניתן היה לעבד את בקשת אימות בגלל בעיית מערכת.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>שם משתמש או סיסמא שגויים.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>עוגיה כבר שומשה.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>אין הרשאה מתאימה.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>אסימון CSRF לא חוקי.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>לא נמצא ספק אימות המתאימה לבקשה.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>אין סיישן זמין, או שתם הזמן הקצוב או העוגיות אינן מופעלות.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>הטוקן לא נמצא.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>שם משתמש לא נמצא.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>החשבון פג תוקף.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>פרטי התחברות פקעו תוקף.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>החשבון מבוטל.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>החשבון נעול.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב מאוחר יותר.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>קישור כניסה לא חוקי או שפג תוקפו.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בוד %minutes% דקה.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב בוד %minutes% דקות.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.hr.xlf 0000644 00000010507 15120140446 0014231 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Dogodila se autentifikacijske iznimka.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentifikacijski podaci nisu pronađeni.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentifikacijski zahtjev nije moguće provesti uslijed sistemskog problema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Neispravni akreditacijski podaci.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie je već netko drugi iskoristio.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nemate privilegije zahtijevati resurs.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Neispravan CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nije pronađen autentifikacijski provider koji bi podržao autentifikacijski token.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sesija nije dostupna, ili je istekla ili cookies nisu omogućeni.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Token nije pronađen.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Korisničko ime nije pronađeno.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Račun je isteko.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Akreditacijski podaci su istekli.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Račun je onemogućen.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Račun je zaključan.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Previše neuspjelih pokušaja prijave, molim pokušajte ponovo kasnije.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link za prijavu je isteako ili je neispravan.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minutu.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minute.|Previše neuspjelih pokušaja prijave, molim pokušajte ponovo za %minutes% minuta.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.hu.xlf 0000644 00000010423 15120140446 0014231 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Hitelesítési hiba lépett fel.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Nem találhatók hitelesítési információk.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>A hitelesítési kérést rendszerhiba miatt nem lehet feldolgozni.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Érvénytelen hitelesítési információk.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Ezt a sütit valaki más már felhasználta.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nem rendelkezik az erőforrás eléréséhez szükséges jogosultsággal.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Érvénytelen CSRF token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nem található a hitelesítési tokent támogató hitelesítési szolgáltatás.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Munkamenet nem áll rendelkezésre, túllépte az időkeretet vagy a sütik le vannak tiltva.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nem található token.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>A felhasználónév nem található.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>A fiók lejárt.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>A hitelesítési információk lejártak.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Felfüggesztett fiók.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Zárolt fiók.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Túl sok sikertelen bejelentkezési kísérlet, kérjük próbálja újra később.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Érvénytelen vagy lejárt bejelentkezési link.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Túl sok sikertelen bejelentkezési kísérlet, kérjük próbálja újra %minutes% perc múlva.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Túl sok sikertelen bejelentkezési kísérlet, kérjük próbálja újra %minutes% perc múlva.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.hy.xlf 0000644 00000011256 15120140446 0014242 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Նույնականացման սխալ։</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Նույնականացման տվյալները չեն գտնվել։</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Համակարգային սխալ՝ նույնականացման հացրման պրոցեսինգի ժամանակ։</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Սխալ մուտքային տվյալներ</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie-ն արդեն օգտագործվում է ուրիշի կողմից։</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Ռեսուրսի հարցման համար չկա թույլատվություն։</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Անվավեր CSRF թոքեն։</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Նույնականացման ոչ մի մատակարար չի գտնվել, որ աջակցի նույնականացման թոքենը։</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Հասանելի սեսիա չկա, կամ այն սպառվել է կամ cookie-ները անջատված են:</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Թոքենը չի գտնվել։</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Օգտանունը չի գտնվել։</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Հաշիվը ժամկետանց է։</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Մուտքային տվյալները ժամկետանց են։</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Հաշիվը դեկատիվացված է։</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Հաշիվն արգելափակված է։</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Չափից շատ մուտքի փորձեր, խնդրում ենք փորձել մի փոքր ուշ</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Անվավեր կամ ժամկետանց մուտքի հղում։</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Մուտքի չափազանց շատ անհաջող փորձեր: Խնդրում ենք կրկին փորձել %minutes րոպե:</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Մուտքի չափազանց շատ անհաջող փորձեր: Խնդրում ենք կրկին փորձել %minutes րոպե:</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.id.xlf 0000644 00000010201 15120140446 0014203 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Terjadi sebuah pengecualian otentikasi.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Kredensial otentikasi tidak bisa ditemukan.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Permintaan otentikasi tidak bisa diproses karena masalah sistem.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Kredensial salah.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie sudah digunakan oleh orang lain.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Tidak berhak untuk meminta sumber daya.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Token CSRF salah.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Tidak ditemukan penyedia otentikasi untuk mendukung token otentikasi.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Tidak ada sesi yang tersedia, mungkin waktu sudah habis atau cookie tidak diaktifkan</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Tidak ada token yang bisa ditemukan.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Username tidak bisa ditemukan.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Akun telah berakhir.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Kredensial telah berakhir.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Akun dinonaktifkan.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Akun terkunci.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Terlalu banyak percobaan login yang salah, silahkan coba lagi nanti.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link login salah atau sudah kedaluwarsa.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Terlalu banyak percobaan login yang salah, silahkan coba lagi dalam %minutes% menit.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Terlalu banyak percobaan login yang salah, silahkan coba lagi dalam %minutes% menit.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.it.xlf 0000644 00000010205 15120140446 0014227 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Si è verificato un errore di autenticazione.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Impossibile trovare le credenziali di autenticazione.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>La richiesta di autenticazione non può essere processata a causa di un errore di sistema.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Credenziali non valide.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Il cookie è già stato usato da qualcun altro.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Non hai i privilegi per richiedere questa risorsa.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF token non valido.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Non è stato trovato un valido fornitore di autenticazione per supportare il token.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Nessuna sessione disponibile, può essere scaduta o i cookie non sono abilitati.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nessun token trovato.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Username non trovato.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Account scaduto.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Credenziali scadute.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>L'account è disabilitato.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>L'account è bloccato.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Troppi tentativi di login falliti, riprova tra un po'.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Link di login scaduto o non valido.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Troppi tentativi di login falliti, riprova tra %minutes% minuto.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Troppi tentativi di login falliti, riprova tra %minutes% minuti.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.ja.xlf 0000644 00000010660 15120140446 0014212 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>認証エラーが発生しました。</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>認証資格がありません。</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>システムの問題により認証要求を処理できませんでした。</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>資格が無効です。</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Cookie が別のユーザーで使用されています。</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>リソースをリクエストする権限がありません。</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>CSRF トークンが無効です。</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>認証トークンをサポートする認証プロバイダーが見つかりません。</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>利用可能なセッションがありません。タイムアウトしたか、Cookie が無効になっています。</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>トークンが見つかりません。</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>ユーザー名が見つかりません。</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>アカウントが有効期限切れです。</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>資格が有効期限切れです。</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>アカウントが無効です。</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>アカウントはロックされています。</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>ログイン試行回数を超えました。しばらくして再度お試しください。</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>ログインリンクが有効期限切れ、もしくは無効です。</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>ログイン試行回数が多すぎます。%minutes%分後に再度お試しください。</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.lb.xlf 0000644 00000007302 15120140446 0014214 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Bei der Authentifikatioun ass e Feeler opgetrueden.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Et konnte keng Zouganksdate fonnt ginn.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>D'Ufro fir eng Authentifikatioun konnt wéinst engem Problem vum System net beaarbecht ginn.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Ongëlteg Zouganksdaten.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>De Cookie gouf scho vun engem anere benotzt.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Keng Rechter fir d'Ressource unzefroen.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Ongëltegen CSRF-Token.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Et gouf keen Authentifizéierungs-Provider fonnt deen den Authentifizéierungs-Token ënnerstëtzt.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Keng Sëtzung disponibel. Entweder ass se ofgelaf oder Cookies sinn net aktivéiert.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Et konnt keen Token fonnt ginn.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>De Benotzernumm konnt net fonnt ginn.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Den Account ass ofgelaf.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>D'Zouganksdate sinn ofgelaf.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>De Konto ass deaktivéiert.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>De Konto ass gespaart.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Ze vill mësslonge Login-Versich, w.e.g. méi spéit nach emol probéieren.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Ongëltegen oder ofgelafene Login-Link.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.lt.xlf 0000644 00000010633 15120140446 0014237 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Įvyko autentifikacijos klaida.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Nepavyko rasti autentifikacijos duomenų.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentifikacijos užklausos nepavyko įvykdyti dėl sistemos klaidų.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Klaidingi duomenys.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Slapukas buvo panaudotas kažkam kitam.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Neturite teisių pasiektį resursą.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Neteisingas CSRF raktas.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nerastas autentifikacijos tiekėjas, kuris palaikytų autentifikacijos raktą.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sesija yra nepasiekiama, pasibaigė galiojimo laikas arba slapukai yra išjungti.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nepavyko rasti rakto.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Tokio naudotojo vardo nepavyko rasti.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Paskyros galiojimo laikas baigėsi.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Autentifikacijos duomenų galiojimo laikas baigėsi.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Paskyra yra išjungta.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Paskyra yra užblokuota.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą vėliau.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Netinkama arba pasibaigusio galiojimo laiko prisijungimo nuoroda.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minutės.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minutės.|Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minučių.|Per daug nepavykusių prisijungimo bandymų, pabandykite dar kartą po %minutes% minučių.</target> </trans-unit> </body> </file> </xliff> Resources/translations/security.lv.xlf 0000644 00000010472 15120140446 0014242 0 ustar 00 <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="file.ext"> <body> <trans-unit id="1"> <source>An authentication exception occurred.</source> <target>Radās autentifikācijas kļūda.</target> </trans-unit> <trans-unit id="2"> <source>Authentication credentials could not be found.</source> <target>Autentifikācijas dati nav atrasti.</target> </trans-unit> <trans-unit id="3"> <source>Authentication request could not be processed due to a system problem.</source> <target>Autentifikācijas pieprasījums nevar tikt apstrādāts sistēmas problēmas dēļ.</target> </trans-unit> <trans-unit id="4"> <source>Invalid credentials.</source> <target>Nederīgi autentifikācijas dati.</target> </trans-unit> <trans-unit id="5"> <source>Cookie has already been used by someone else.</source> <target>Kāds cits jau izmantoja sīkdatni.</target> </trans-unit> <trans-unit id="6"> <source>Not privileged to request the resource.</source> <target>Nav tiesību šī resursa izsaukšanai.</target> </trans-unit> <trans-unit id="7"> <source>Invalid CSRF token.</source> <target>Nederīgs CSRF talons.</target> </trans-unit> <trans-unit id="9"> <source>No authentication provider found to support the authentication token.</source> <target>Nav atrasts, autentifikācijas talonu atbalstošs, autentifikācijas sniedzējs.</target> </trans-unit> <trans-unit id="10"> <source>No session available, it either timed out or cookies are not enabled.</source> <target>Sesija nav pieejama - vai nu tā beidzās, vai nu sīkdatnes nav iespējotas.</target> </trans-unit> <trans-unit id="11"> <source>No token could be found.</source> <target>Nevar atrast nevienu talonu.</target> </trans-unit> <trans-unit id="12"> <source>Username could not be found.</source> <target>Nevar atrast lietotājvārdu.</target> </trans-unit> <trans-unit id="13"> <source>Account has expired.</source> <target>Konta derīguma termiņš ir beidzies.</target> </trans-unit> <trans-unit id="14"> <source>Credentials have expired.</source> <target>Autentifikācijas datu derīguma termiņš ir beidzies.</target> </trans-unit> <trans-unit id="15"> <source>Account is disabled.</source> <target>Konts ir atspējots.</target> </trans-unit> <trans-unit id="16"> <source>Account is locked.</source> <target>Konts ir slēgts.</target> </trans-unit> <trans-unit id="17"> <source>Too many failed login attempts, please try again later.</source> <target>Pārāk daudz atteiktu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz vēlāk.</target> </trans-unit> <trans-unit id="18"> <source>Invalid or expired login link.</source> <target>Autentifikācijas saite ir nederīga vai arī tai ir beidzies derīguma termiņš.</target> </trans-unit> <trans-unit id="19"> <source>Too many failed login attempts, please try again in %minutes% minute.</source> <target>Pārāk daudz nesekmīgu autentifikācijas mēģinājumu, lūdzu mēģiniet vēlreiz pēc %minutes% minūtes.</target> </trans-unit> <trans-unit id="20"> <source>Too many failed login attempts, please try again in %minutes% minutes.</source> <target>Pārāk daudz nesekmīgu autentifikācijas mēģinājumu, lūdzu mēģiniet vēlreiz pēc %minutes% minūtēm.</target> </trans-unit> </body> </file> </xliff> Role/Role.php 0000644 00000001011 15120140446 0007045 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Role; /** * Allows migrating session payloads from v4. * * @internal */ class Role { private $role; private function __construct() { } public function __toString(): string { return $this->role; } } Role/RoleHierarchy.php 0000644 00000003743 15120140446 0010722 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Role; /** * RoleHierarchy defines a role hierarchy. * * @author Fabien Potencier <fabien@symfony.com> */ class RoleHierarchy implements RoleHierarchyInterface { private $hierarchy; /** @var array<string, list<string>> */ protected $map; /** * @param array<string, list<string>> $hierarchy */ public function __construct(array $hierarchy) { $this->hierarchy = $hierarchy; $this->buildRoleMap(); } /** * {@inheritdoc} */ public function getReachableRoleNames(array $roles): array { $reachableRoles = $roles; foreach ($roles as $role) { if (!isset($this->map[$role])) { continue; } foreach ($this->map[$role] as $r) { $reachableRoles[] = $r; } } return array_values(array_unique($reachableRoles)); } protected function buildRoleMap() { $this->map = []; foreach ($this->hierarchy as $main => $roles) { $this->map[$main] = $roles; $visited = []; $additionalRoles = $roles; while ($role = array_shift($additionalRoles)) { if (!isset($this->hierarchy[$role])) { continue; } $visited[] = $role; foreach ($this->hierarchy[$role] as $roleToAdd) { $this->map[$main][] = $roleToAdd; } foreach (array_diff($this->hierarchy[$role], $visited) as $additionalRole) { $additionalRoles[] = $additionalRole; } } $this->map[$main] = array_unique($this->map[$main]); } } } Role/RoleHierarchyInterface.php 0000644 00000001116 15120140446 0012533 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Role; /** * RoleHierarchyInterface is the interface for a role hierarchy. * * @author Fabien Potencier <fabien@symfony.com> */ interface RoleHierarchyInterface { /** * @param string[] $roles * * @return string[] */ public function getReachableRoleNames(array $roles): array; } Role/SwitchUserRole.php 0000644 00000000703 15120140446 0011075 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Role; /** * Allows migrating session payloads from v4. * * @internal */ class SwitchUserRole extends Role { private $deprecationTriggered; private $source; } Signature/Exception/ExpiredSignatureException.php 0000644 00000000742 15120140446 0016315 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Signature\Exception; use Symfony\Component\Security\Core\Exception\RuntimeException; /** * @author Wouter de Jong <wouter@wouterj.nl> */ class ExpiredSignatureException extends RuntimeException { } Signature/Exception/InvalidSignatureException.php 0000644 00000000742 15120140446 0016303 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Signature\Exception; use Symfony\Component\Security\Core\Exception\RuntimeException; /** * @author Wouter de Jong <wouter@wouterj.nl> */ class InvalidSignatureException extends RuntimeException { } Signature/ExpiredSignatureStorage.php 0000644 00000002214 15120140446 0014021 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Signature; use Psr\Cache\CacheItemPoolInterface; /** * @author Ryan Weaver <ryan@symfonycasts.com> */ final class ExpiredSignatureStorage { private $cache; private $lifetime; public function __construct(CacheItemPoolInterface $cache, int $lifetime) { $this->cache = $cache; $this->lifetime = $lifetime; } public function countUsages(string $hash): int { $key = rawurlencode($hash); if (!$this->cache->hasItem($key)) { return 0; } return $this->cache->getItem($key)->get(); } public function incrementUsages(string $hash): void { $item = $this->cache->getItem(rawurlencode($hash)); if (!$item->isHit()) { $item->expiresAfter($this->lifetime); } $item->set($this->countUsages($hash) + 1); $this->cache->save($item); } } Signature/SignatureHasher.php 0000644 00000012571 15120140446 0012315 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Signature; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; use Symfony\Component\Security\Core\Signature\Exception\ExpiredSignatureException; use Symfony\Component\Security\Core\Signature\Exception\InvalidSignatureException; use Symfony\Component\Security\Core\User\UserInterface; /** * Creates and validates secure hashes used in login links and remember-me cookies. * * @author Wouter de Jong <wouter@wouterj.nl> * @author Ryan Weaver <ryan@symfonycasts.com> */ class SignatureHasher { private $propertyAccessor; private $signatureProperties; private $secret; private $expiredSignaturesStorage; private $maxUses; /** * @param array $signatureProperties Properties of the User; the hash is invalidated if these properties change * @param ExpiredSignatureStorage|null $expiredSignaturesStorage If provided, secures a sequence of hashes that are expired * @param int|null $maxUses Used together with $expiredSignatureStorage to allow a maximum usage of a hash */ public function __construct(PropertyAccessorInterface $propertyAccessor, array $signatureProperties, string $secret, ExpiredSignatureStorage $expiredSignaturesStorage = null, int $maxUses = null) { $this->propertyAccessor = $propertyAccessor; $this->signatureProperties = $signatureProperties; $this->secret = $secret; $this->expiredSignaturesStorage = $expiredSignaturesStorage; $this->maxUses = $maxUses; } /** * Verifies the hash using the provided user identifier and expire time. * * This method must be called before the user object is loaded from a provider. * * @param int $expires The expiry time as a unix timestamp * @param string $hash The plaintext hash provided by the request * * @throws InvalidSignatureException If the signature does not match the provided parameters * @throws ExpiredSignatureException If the signature is no longer valid */ public function acceptSignatureHash(string $userIdentifier, int $expires, string $hash): void { if ($expires < time()) { throw new ExpiredSignatureException('Signature has expired.'); } $hmac = substr($hash, 0, 44); $payload = substr($hash, 44).':'.$expires.':'.$userIdentifier; if (!hash_equals($hmac, $this->generateHash($payload))) { throw new InvalidSignatureException('Invalid or expired signature.'); } } /** * Verifies the hash using the provided user and expire time. * * @param int $expires The expiry time as a unix timestamp * @param string $hash The plaintext hash provided by the request * * @throws InvalidSignatureException If the signature does not match the provided parameters * @throws ExpiredSignatureException If the signature is no longer valid */ public function verifySignatureHash(UserInterface $user, int $expires, string $hash): void { if ($expires < time()) { throw new ExpiredSignatureException('Signature has expired.'); } if (!hash_equals($hash, $this->computeSignatureHash($user, $expires))) { throw new InvalidSignatureException('Invalid or expired signature.'); } if ($this->expiredSignaturesStorage && $this->maxUses) { if ($this->expiredSignaturesStorage->countUsages($hash) >= $this->maxUses) { throw new ExpiredSignatureException(sprintf('Signature can only be used "%d" times.', $this->maxUses)); } $this->expiredSignaturesStorage->incrementUsages($hash); } } /** * Computes the secure hash for the provided user and expire time. * * @param int $expires The expiry time as a unix timestamp */ public function computeSignatureHash(UserInterface $user, int $expires): string { $userIdentifier = method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername(); $fieldsHash = hash_init('sha256'); foreach ($this->signatureProperties as $property) { $value = $this->propertyAccessor->getValue($user, $property) ?? ''; if ($value instanceof \DateTimeInterface) { $value = $value->format('c'); } if (!\is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { throw new \InvalidArgumentException(sprintf('The property path "%s" on the user object "%s" must return a value that can be cast to a string, but "%s" was returned.', $property, \get_class($user), get_debug_type($value))); } hash_update($fieldsHash, ':'.base64_encode($value)); } $fieldsHash = strtr(base64_encode(hash_final($fieldsHash, true)), '+/=', '-_~'); return $this->generateHash($fieldsHash.':'.$expires.':'.$userIdentifier).$fieldsHash; } private function generateHash(string $tokenValue): string { return strtr(base64_encode(hash_hmac('sha256', $tokenValue, $this->secret, true)), '+/=', '-_~'); } } Test/AccessDecisionStrategyTestCase.php 0000644 00000004626 15120140446 0014237 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Test; use PHPUnit\Framework\TestCase; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\AccessDecisionManager; use Symfony\Component\Security\Core\Authorization\Strategy\AccessDecisionStrategyInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; /** * Abstract test case for access decision strategies. * * @author Alexander M. Turek <me@derrabus.de> */ abstract class AccessDecisionStrategyTestCase extends TestCase { /** * @dataProvider provideStrategyTests * * @param VoterInterface[] $voters */ final public function testDecide(AccessDecisionStrategyInterface $strategy, array $voters, bool $expected) { $token = $this->createMock(TokenInterface::class); $manager = new AccessDecisionManager($voters, $strategy); $this->assertSame($expected, $manager->decide($token, ['ROLE_FOO'])); } /** * @return iterable<array{AccessDecisionStrategyInterface, VoterInterface[], bool}> */ abstract public static function provideStrategyTests(): iterable; /** * @return VoterInterface[] */ final protected static function getVoters(int $grants, int $denies, int $abstains): array { $voters = []; for ($i = 0; $i < $grants; ++$i) { $voters[] = static::getVoter(VoterInterface::ACCESS_GRANTED); } for ($i = 0; $i < $denies; ++$i) { $voters[] = static::getVoter(VoterInterface::ACCESS_DENIED); } for ($i = 0; $i < $abstains; ++$i) { $voters[] = static::getVoter(VoterInterface::ACCESS_ABSTAIN); } return $voters; } final protected static function getVoter(int $vote): VoterInterface { return new class($vote) implements VoterInterface { private $vote; public function __construct(int $vote) { $this->vote = $vote; } public function vote(TokenInterface $token, $subject, array $attributes): int { return $this->vote; } }; } } User/ChainUserProvider.php 0000644 00000012237 15120140446 0011571 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; /** * Chain User Provider. * * This provider calls several leaf providers in a chain until one is able to * handle the request. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class ChainUserProvider implements UserProviderInterface, PasswordUpgraderInterface { private $providers; /** * @param iterable<array-key, UserProviderInterface> $providers */ public function __construct(iterable $providers) { $this->providers = $providers; } /** * @return UserProviderInterface[] */ public function getProviders() { if ($this->providers instanceof \Traversable) { return iterator_to_array($this->providers); } return $this->providers; } /** * {@inheritdoc} */ public function loadUserByUsername(string $username) { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use loadUserByIdentifier() instead.', __METHOD__); return $this->loadUserByIdentifier($username); } public function loadUserByIdentifier(string $identifier): UserInterface { foreach ($this->providers as $provider) { try { // @deprecated since Symfony 5.3, change to $provider->loadUserByIdentifier() in 6.0 if (!method_exists($provider, 'loadUserByIdentifier')) { trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($provider)); return $provider->loadUserByUsername($identifier); } return $provider->loadUserByIdentifier($identifier); } catch (UserNotFoundException $e) { // try next one } } $ex = new UserNotFoundException(sprintf('There is no user with identifier "%s".', $identifier)); $ex->setUserIdentifier($identifier); throw $ex; } /** * {@inheritdoc} */ public function refreshUser(UserInterface $user) { $supportedUserFound = false; foreach ($this->providers as $provider) { try { if (!$provider->supportsClass(get_debug_type($user))) { continue; } return $provider->refreshUser($user); } catch (UnsupportedUserException $e) { // try next one } catch (UserNotFoundException $e) { $supportedUserFound = true; // try next one } } if ($supportedUserFound) { // @deprecated since Symfony 5.3, change to $user->getUserIdentifier() in 6.0 $username = method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername(); $e = new UserNotFoundException(sprintf('There is no user with name "%s".', $username)); $e->setUserIdentifier($username); throw $e; } else { throw new UnsupportedUserException(sprintf('There is no user provider for user "%s". Shouldn\'t the "supportsClass()" method of your user provider return true for this classname?', get_debug_type($user))); } } /** * {@inheritdoc} */ public function supportsClass(string $class) { foreach ($this->providers as $provider) { if ($provider->supportsClass($class)) { return true; } } return false; } /** * @param PasswordAuthenticatedUserInterface $user * * {@inheritdoc} */ public function upgradePassword($user, string $newHashedPassword): void { if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'The "%s::upgradePassword()" method expects an instance of "%s" as first argument, the "%s" class should implement it.', PasswordUpgraderInterface::class, PasswordAuthenticatedUserInterface::class, get_debug_type($user)); if (!$user instanceof UserInterface) { throw new \TypeError(sprintf('The "%s::upgradePassword()" method expects an instance of "%s" as first argument, "%s" given.', static::class, PasswordAuthenticatedUserInterface::class, get_debug_type($user))); } } foreach ($this->providers as $provider) { if ($provider instanceof PasswordUpgraderInterface) { try { $provider->upgradePassword($user, $newHashedPassword); } catch (UnsupportedUserException $e) { // ignore: password upgrades are opportunistic } } } } } User/EquatableInterface.php 0000644 00000001563 15120140446 0011721 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * EquatableInterface used to test if two objects are equal in security * and re-authentication context. * * @author Dariusz Górecki <darek.krk@gmail.com> */ interface EquatableInterface { /** * The equality comparison should neither be done by referential equality * nor by comparing identities (i.e. getId() === getId()). * * However, you do not need to compare every attribute, but only those that * are relevant for assessing whether re-authentication is required. * * @return bool */ public function isEqualTo(UserInterface $user); } User/InMemoryUser.php 0000644 00000003767 15120140446 0010603 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * UserInterface implementation used by the in-memory user provider. * * This should not be used for anything else. * * @author Robin Chalas <robin.chalas@gmail.com> * @author Fabien Potencier <fabien@symfony.com> */ final class InMemoryUser extends User { /** * {@inheritdoc} * * @deprecated since Symfony 5.3 */ public function isAccountNonExpired(): bool { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, you should stop using it.', __METHOD__); return parent::isAccountNonExpired(); } /** * {@inheritdoc} * * @deprecated since Symfony 5.3 */ public function isAccountNonLocked(): bool { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, you should stop using it.', __METHOD__); return parent::isAccountNonLocked(); } /** * {@inheritdoc} * * @deprecated since Symfony 5.3 */ public function isCredentialsNonExpired(): bool { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, you should stop using it.', __METHOD__); return parent::isCredentialsNonExpired(); } /** * @deprecated since Symfony 5.3 */ public function getExtraFields(): array { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, you should stop using it.', __METHOD__); return parent::getExtraFields(); } public function setPassword(string $password) { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, you should stop using it.', __METHOD__); parent::setPassword($password); } } User/InMemoryUserChecker.php 0000644 00000004237 15120140446 0012061 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\AccountExpiredException; use Symfony\Component\Security\Core\Exception\CredentialsExpiredException; use Symfony\Component\Security\Core\Exception\DisabledException; use Symfony\Component\Security\Core\Exception\LockedException; /** * Checks the state of the in-memory user account. * * @author Fabien Potencier <fabien@symfony.com> */ class InMemoryUserChecker implements UserCheckerInterface { public function checkPreAuth(UserInterface $user) { // @deprecated since Symfony 5.3, in 6.0 change to: // if (!$user instanceof InMemoryUser) { if (!$user instanceof InMemoryUser && !$user instanceof User) { return; } if (!$user->isEnabled()) { $ex = new DisabledException('User account is disabled.'); $ex->setUser($user); throw $ex; } // @deprecated since Symfony 5.3 if (User::class === \get_class($user)) { if (!$user->isAccountNonLocked()) { $ex = new LockedException('User account is locked.'); $ex->setUser($user); throw $ex; } if (!$user->isAccountNonExpired()) { $ex = new AccountExpiredException('User account has expired.'); $ex->setUser($user); throw $ex; } } } public function checkPostAuth(UserInterface $user) { // @deprecated since Symfony 5.3, noop in 6.0 if (User::class !== \get_class($user)) { return; } if (!$user->isCredentialsNonExpired()) { $ex = new CredentialsExpiredException('User credentials have expired.'); $ex->setUser($user); throw $ex; } } } if (!class_exists(UserChecker::class, false)) { class_alias(InMemoryUserChecker::class, UserChecker::class); } User/InMemoryUserProvider.php 0000644 00000012150 15120140446 0012300 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; /** * InMemoryUserProvider is a simple non persistent user provider. * * Useful for testing, demonstration, prototyping, and for simple needs * (a backend with a unique admin for instance) * * @author Fabien Potencier <fabien@symfony.com> */ class InMemoryUserProvider implements UserProviderInterface { /** * @var array<string, UserInterface> */ private $users; /** * The user array is a hash where the keys are usernames and the values are * an array of attributes: 'password', 'enabled', and 'roles'. * * @param array<string, array{password?: string, enabled?: bool, roles?: list<string>}> $users An array of users */ public function __construct(array $users = []) { foreach ($users as $username => $attributes) { $password = $attributes['password'] ?? null; $enabled = $attributes['enabled'] ?? true; $roles = $attributes['roles'] ?? []; $user = new InMemoryUser($username, $password, $roles, $enabled); $this->createUser($user); } } /** * Adds a new User to the provider. * * @throws \LogicException */ public function createUser(UserInterface $user) { // @deprecated since Symfony 5.3, change to $user->getUserIdentifier() in 6.0 $userIdentifier = strtolower(method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername()); if (isset($this->users[$userIdentifier])) { throw new \LogicException('Another user with the same username already exists.'); } $this->users[$userIdentifier] = $user; } /** * {@inheritdoc} */ public function loadUserByUsername(string $username) { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use loadUserByIdentifier() instead.', __METHOD__); return $this->loadUserByIdentifier($username); } public function loadUserByIdentifier(string $identifier): UserInterface { $user = $this->getUser($identifier); // @deprecated since Symfony 5.3, change to $user->getUserIdentifier() in 6.0 return new InMemoryUser(method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername(), $user->getPassword(), $user->getRoles(), $user->isEnabled()); } /** * {@inheritdoc} */ public function refreshUser(UserInterface $user) { if (!$user instanceof InMemoryUser && !$user instanceof User) { throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_debug_type($user))); } // @deprecated since Symfony 5.3, change to $user->getUserIdentifier() in 6.0 $storedUser = $this->getUser(method_exists($user, 'getUserIdentifier') ? $user->getUserIdentifier() : $user->getUsername()); $userIdentifier = method_exists($storedUser, 'getUserIdentifier') ? $storedUser->getUserIdentifier() : $storedUser->getUsername(); // @deprecated since Symfony 5.3 if (User::class === \get_class($user)) { if (User::class !== \get_class($storedUser)) { $accountNonExpired = true; $credentialsNonExpired = $storedUser->getPassword() === $user->getPassword(); $accountNonLocked = true; } else { $accountNonExpired = $storedUser->isAccountNonExpired(); $credentialsNonExpired = $storedUser->isCredentialsNonExpired() && $storedUser->getPassword() === $user->getPassword(); $accountNonLocked = $storedUser->isAccountNonLocked(); } return new User($userIdentifier, $storedUser->getPassword(), $storedUser->getRoles(), $storedUser->isEnabled(), $accountNonExpired, $credentialsNonExpired, $accountNonLocked); } return new InMemoryUser($userIdentifier, $storedUser->getPassword(), $storedUser->getRoles(), $storedUser->isEnabled()); } /** * {@inheritdoc} */ public function supportsClass(string $class) { // @deprecated since Symfony 5.3 if (User::class === $class) { return true; } return InMemoryUser::class == $class; } /** * Returns the user by given username. * * @throws UserNotFoundException if user whose given username does not exist */ private function getUser(string $username)/* : InMemoryUser */ { if (!isset($this->users[strtolower($username)])) { $ex = new UserNotFoundException(sprintf('Username "%s" does not exist.', $username)); $ex->setUserIdentifier($username); throw $ex; } return $this->users[strtolower($username)]; } } User/LegacyPasswordAuthenticatedUserInterface.php 0000644 00000001442 15120140446 0016303 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * For users that can be authenticated using a password/salt couple. * * Once all password hashes have been upgraded to a modern algorithm via password migrations, * implement {@see PasswordAuthenticatedUserInterface} instead. * * @author Robin Chalas <robin.chalas@gmail.com> */ interface LegacyPasswordAuthenticatedUserInterface extends PasswordAuthenticatedUserInterface { /** * Returns the salt that was originally used to hash the password. */ public function getSalt(): ?string; } User/MissingUserProvider.php 0000644 00000002721 15120140446 0012155 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; /** * MissingUserProvider is a dummy user provider used to throw proper exception * when a firewall requires a user provider but none was defined. * * @internal */ class MissingUserProvider implements UserProviderInterface { /** * @param string $firewall the firewall missing a provider */ public function __construct(string $firewall) { throw new InvalidConfigurationException(sprintf('"%s" firewall requires a user provider but none was defined.', $firewall)); } /** * {@inheritdoc} */ public function loadUserByUsername(string $username): UserInterface { throw new \BadMethodCallException(); } public function loadUserByIdentifier(string $identifier): UserInterface { throw new \BadMethodCallException(); } /** * {@inheritdoc} */ public function refreshUser(UserInterface $user): UserInterface { throw new \BadMethodCallException(); } /** * {@inheritdoc} */ public function supportsClass(string $class): bool { throw new \BadMethodCallException(); } } User/PasswordAuthenticatedUserInterface.php 0000644 00000001320 15120140446 0015151 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * For users that can be authenticated using a password. * * @author Robin Chalas <robin.chalas@gmail.com> * @author Wouter de Jong <wouter@wouterj.nl> */ interface PasswordAuthenticatedUserInterface { /** * Returns the hashed password used to authenticate the user. * * Usually on authentication, a plain-text password will be compared to this value. */ public function getPassword(): ?string; } User/PasswordUpgraderInterface.php 0000644 00000002263 15120140446 0013310 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * @author Nicolas Grekas <p@tchwork.com> * * @method void upgradePassword(PasswordAuthenticatedUserInterface|UserInterface $user, string $newHashedPassword) Upgrades the hashed password of a user, typically for using a better hash algorithm. * This method should persist the new password in the user storage and update the $user object accordingly. * Because you don't want your users not being able to log in, this method should be opportunistic: * it's fine if it does nothing or if it fails without throwing any exception. */ interface PasswordUpgraderInterface { } User/User.php 0000644 00000013211 15120140446 0007104 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * User is the user implementation used by the in-memory user provider. * * This should not be used for anything else. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link InMemoryUser} instead */ class User implements UserInterface, PasswordAuthenticatedUserInterface, EquatableInterface { private $username; private $password; private $enabled; private $accountNonExpired; private $credentialsNonExpired; private $accountNonLocked; private $roles; private $extraFields; public function __construct(?string $username, ?string $password, array $roles = [], bool $enabled = true, bool $userNonExpired = true, bool $credentialsNonExpired = true, bool $userNonLocked = true, array $extraFields = []) { if (InMemoryUser::class !== static::class) { trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', self::class, InMemoryUser::class); } if ('' === $username || null === $username) { throw new \InvalidArgumentException('The username cannot be empty.'); } $this->username = $username; $this->password = $password; $this->enabled = $enabled; $this->accountNonExpired = $userNonExpired; $this->credentialsNonExpired = $credentialsNonExpired; $this->accountNonLocked = $userNonLocked; $this->roles = $roles; $this->extraFields = $extraFields; } public function __toString(): string { return $this->getUserIdentifier(); } /** * {@inheritdoc} */ public function getRoles(): array { return $this->roles; } /** * {@inheritdoc} */ public function getPassword(): ?string { return $this->password; } /** * {@inheritdoc} */ public function getSalt(): ?string { return null; } /** * {@inheritdoc} */ public function getUsername(): string { trigger_deprecation('symfony/security-core', '5.3', 'Method "%s()" is deprecated, use getUserIdentifier() instead.', __METHOD__); return $this->username; } /** * Returns the identifier for this user (e.g. its username or email address). */ public function getUserIdentifier(): string { return $this->username; } /** * Checks whether the user's account has expired. * * Internally, if this method returns false, the authentication system * will throw an AccountExpiredException and prevent login. * * @see AccountExpiredException */ public function isAccountNonExpired(): bool { return $this->accountNonExpired; } /** * Checks whether the user is locked. * * Internally, if this method returns false, the authentication system * will throw a LockedException and prevent login. * * @see LockedException */ public function isAccountNonLocked(): bool { return $this->accountNonLocked; } /** * Checks whether the user's credentials (password) has expired. * * Internally, if this method returns false, the authentication system * will throw a CredentialsExpiredException and prevent login. * * @see CredentialsExpiredException */ public function isCredentialsNonExpired(): bool { return $this->credentialsNonExpired; } /** * Checks whether the user is enabled. * * Internally, if this method returns false, the authentication system * will throw a DisabledException and prevent login. * * @see DisabledException */ public function isEnabled(): bool { return $this->enabled; } /** * {@inheritdoc} */ public function eraseCredentials() { } public function getExtraFields(): array { return $this->extraFields; } /** * {@inheritdoc} */ public function isEqualTo(UserInterface $user): bool { if (!$user instanceof self) { return false; } if ($this->getPassword() !== $user->getPassword()) { return false; } if ($this->getSalt() !== $user->getSalt()) { return false; } $currentRoles = array_map('strval', (array) $this->getRoles()); $newRoles = array_map('strval', (array) $user->getRoles()); $rolesChanged = \count($currentRoles) !== \count($newRoles) || \count($currentRoles) !== \count(array_intersect($currentRoles, $newRoles)); if ($rolesChanged) { return false; } if ($this->getUserIdentifier() !== $user->getUserIdentifier()) { return false; } if (self::class === static::class) { if ($this->isAccountNonExpired() !== $user->isAccountNonExpired()) { return false; } if ($this->isAccountNonLocked() !== $user->isAccountNonLocked()) { return false; } if ($this->isCredentialsNonExpired() !== $user->isCredentialsNonExpired()) { return false; } } if ($this->isEnabled() !== $user->isEnabled()) { return false; } return true; } public function setPassword(string $password) { $this->password = $password; } } User/UserChecker.php 0000644 00000001347 15120140446 0010400 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', UserChecker::class, InMemoryUserChecker::class); class_exists(InMemoryUserChecker::class); if (false) { /** * UserChecker checks the user account flags. * * @author Fabien Potencier <fabien@symfony.com> * * @deprecated since Symfony 5.3, use {@link InMemoryUserChecker} instead */ class UserChecker { } } User/UserCheckerInterface.php 0000644 00000002021 15120140446 0012207 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\AccountStatusException; /** * Implement to throw AccountStatusException during the authentication process. * * Can be used when you want to check the account status, e.g when the account is * disabled or blocked. This should not be used to make authentication decisions. * * @author Fabien Potencier <fabien@symfony.com> */ interface UserCheckerInterface { /** * Checks the user account before authentication. * * @throws AccountStatusException */ public function checkPreAuth(UserInterface $user); /** * Checks the user account after authentication. * * @throws AccountStatusException */ public function checkPostAuth(UserInterface $user); } User/UserInterface.php 0000644 00000005233 15120140446 0010732 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; /** * Represents the interface that all user classes must implement. * * This interface is useful because the authentication layer can deal with * the object through its lifecycle, using the object to get the hashed * password (for checking against a submitted password), assigning roles * and so on. * * Regardless of how your users are loaded or where they come from (a database, * configuration, web service, etc.), you will have a class that implements * this interface. Objects that implement this interface are created and * loaded by different objects that implement UserProviderInterface. * * @see UserProviderInterface * * @method string getUserIdentifier() returns the identifier for this user (e.g. its username or email address) * * @author Fabien Potencier <fabien@symfony.com> */ interface UserInterface { /** * Returns the roles granted to the user. * * public function getRoles() * { * return ['ROLE_USER']; * } * * Alternatively, the roles might be stored in a ``roles`` property, * and populated in any number of different ways when the user object * is created. * * @return string[] */ public function getRoles(); /** * Returns the password used to authenticate the user. * * This should be the hashed password. On authentication, a plain-text * password will be hashed, and then compared to this value. * * This method is deprecated since Symfony 5.3, implement it from {@link PasswordAuthenticatedUserInterface} instead. * * @return string|null */ public function getPassword(); /** * Returns the salt that was originally used to hash the password. * * This can return null if the password was not hashed using a salt. * * This method is deprecated since Symfony 5.3, implement it from {@link LegacyPasswordAuthenticatedUserInterface} instead. * * @return string|null */ public function getSalt(); /** * Removes sensitive data from the user. * * This is important if, at any given point, sensitive information like * the plain-text password is stored on this object. */ public function eraseCredentials(); /** * @return string * * @deprecated since Symfony 5.3, use getUserIdentifier() instead */ public function getUsername(); } User/UserProviderInterface.php 0000644 00000004625 15120140446 0012451 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\User; use Symfony\Component\Security\Core\Exception\UnsupportedUserException; use Symfony\Component\Security\Core\Exception\UserNotFoundException; /** * Represents a class that loads UserInterface objects from some source for the authentication system. * * In a typical authentication configuration, a user identifier (e.g. a * username or email address) credential enters the system (via form login, or * any method). The user provider that is configured with that authentication * method is asked to load the UserInterface object for the given identifier (via * loadUserByIdentifier) so that the rest of the process can continue. * * Internally, a user provider can load users from any source (databases, * configuration, web service). This is totally independent of how the authentication * information is submitted or what the UserInterface object looks like. * * @see UserInterface * * @method UserInterface loadUserByIdentifier(string $identifier) loads the user for the given user identifier (e.g. username or email). * This method must throw UserNotFoundException if the user is not found. * * @author Fabien Potencier <fabien@symfony.com> */ interface UserProviderInterface { /** * Refreshes the user. * * It is up to the implementation to decide if the user data should be * totally reloaded (e.g. from the database), or if the UserInterface * object can just be merged into some internal array of users / identity * map. * * @return UserInterface * * @throws UnsupportedUserException if the user is not supported * @throws UserNotFoundException if the user is not found */ public function refreshUser(UserInterface $user); /** * Whether this provider supports the given user class. * * @return bool */ public function supportsClass(string $class); /** * @return UserInterface * * @throws UserNotFoundException * * @deprecated since Symfony 5.3, use loadUserByIdentifier() instead */ public function loadUserByUsername(string $username); } Validator/Constraints/UserPassword.php 0000644 00000002153 15120140446 0014150 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Validator\Constraints; use Symfony\Component\Validator\Constraint; /** * @Annotation * @Target({"PROPERTY", "METHOD", "ANNOTATION"}) */ #[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] class UserPassword extends Constraint { public $message = 'This value should be the user\'s current password.'; public $service = 'security.validator.user_password'; public function __construct(array $options = null, string $message = null, string $service = null, array $groups = null, $payload = null) { parent::__construct($options, $groups, $payload); $this->message = $message ?? $this->message; $this->service = $service ?? $this->service; } /** * {@inheritdoc} */ public function validatedBy() { return $this->service; } } Validator/Constraints/UserPasswordValidator.php 0000644 00000007245 15120140446 0016025 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Validator\Constraints; use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface; use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface; use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\Exception\ConstraintDefinitionException; use Symfony\Component\Validator\Exception\UnexpectedTypeException; class UserPasswordValidator extends ConstraintValidator { private $tokenStorage; private $hasherFactory; /** * @param PasswordHasherFactoryInterface $hasherFactory */ public function __construct(TokenStorageInterface $tokenStorage, $hasherFactory) { if ($hasherFactory instanceof EncoderFactoryInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Passing a "%s" instance to the "%s" constructor is deprecated, use "%s" instead.', EncoderFactoryInterface::class, __CLASS__, PasswordHasherFactoryInterface::class); } $this->tokenStorage = $tokenStorage; $this->hasherFactory = $hasherFactory; } /** * {@inheritdoc} */ public function validate($password, Constraint $constraint) { if (!$constraint instanceof UserPassword) { throw new UnexpectedTypeException($constraint, UserPassword::class); } if (null === $password || '' === $password) { $this->context->addViolation($constraint->message); return; } if (!\is_string($password)) { throw new UnexpectedTypeException($password, 'string'); } $user = $this->tokenStorage->getToken()->getUser(); if (!$user instanceof UserInterface) { throw new ConstraintDefinitionException('The User object must implement the UserInterface interface.'); } if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Using the "%s" validation constraint without implementing the "%s" interface is deprecated, the "%s" class should implement it.', UserPassword::class, PasswordAuthenticatedUserInterface::class, get_debug_type($user)); } $salt = $user->getSalt(); if ($salt && !$user instanceof LegacyPasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'Returning a string from "getSalt()" without implementing the "%s" interface is deprecated, the "%s" class should implement it.', LegacyPasswordAuthenticatedUserInterface::class, get_debug_type($user)); } $hasher = $this->hasherFactory instanceof EncoderFactoryInterface ? $this->hasherFactory->getEncoder($user) : $this->hasherFactory->getPasswordHasher($user); if (null === $user->getPassword() || !($hasher instanceof PasswordEncoderInterface ? $hasher->isPasswordValid($user->getPassword(), $password, $user->getSalt()) : $hasher->verify($user->getPassword(), $password, $user->getSalt()))) { $this->context->addViolation($constraint->message); } } } AuthenticationEvents.php 0000644 00000002621 15120140446 0011417 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core; use Symfony\Component\Security\Core\Event\AuthenticationFailureEvent; use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent; final class AuthenticationEvents { /** * The AUTHENTICATION_SUCCESS event occurs after a user is authenticated * by one provider. * * @Event("Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent") */ public const AUTHENTICATION_SUCCESS = 'security.authentication.success'; /** * The AUTHENTICATION_FAILURE event occurs after a user cannot be * authenticated by any of the providers. * * @Event("Symfony\Component\Security\Core\Event\AuthenticationFailureEvent") * * @deprecated since Symfony 5.4, use {@see Event\LoginFailureEvent} instead */ public const AUTHENTICATION_FAILURE = 'security.authentication.failure'; /** * Event aliases. * * These aliases can be consumed by RegisterListenersPass. */ public const ALIASES = [ AuthenticationSuccessEvent::class => self::AUTHENTICATION_SUCCESS, AuthenticationFailureEvent::class => self::AUTHENTICATION_FAILURE, ]; } CHANGELOG.md 0000644 00000004037 15120140446 0006356 0 ustar 00 CHANGELOG ========= 5.4.21 ------ * [BC BREAK] `AccessDecisionStrategyTestCase::provideStrategyTests()` is now static 5.4 --- * Add a `CacheableVoterInterface` for voters that vote only on identified attributes and subjects * Deprecate `AuthenticationEvents::AUTHENTICATION_FAILURE`, use the `LoginFailureEvent` instead * Deprecate `AnonymousToken`, as the related authenticator was deprecated in 5.3 * Deprecate `Token::getCredentials()`, tokens should no longer contain credentials (as they represent authenticated sessions) * Deprecate returning `string|\Stringable` from `Token::getUser()` (it must return a `UserInterface`) * Deprecate `AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY` and `AuthenticatedVoter::IS_ANONYMOUS`, use `AuthenticatedVoter::IS_AUTHENTICATED_FULLY` or `AuthenticatedVoter::IS_AUTHENTICATED` instead. * Deprecate `AuthenticationTrustResolverInterface::isAnonymous()` and the `is_anonymous()` expression function as anonymous no longer exists in version 6, use the `isFullFledged()` or the new `isAuthenticated()` instead if you want to check if the request is (fully) authenticated. * Deprecate the `$authenticationManager` argument of the `AuthorizationChecker` constructor * Deprecate setting the `$alwaysAuthenticate` argument to `true` and not setting the `$exceptionOnNoToken` argument to `false` of `AuthorizationChecker` * Deprecate methods `TokenInterface::isAuthenticated()` and `setAuthenticated`, return null from "getUser()" instead when a token is not authenticated * Add `AccessDecisionStrategyInterface` to allow custom access decision strategies * Add access decision strategies `AffirmativeStrategy`, `ConsensusStrategy`, `PriorityStrategy`, `UnanimousStrategy` * Deprecate passing the strategy as string to `AccessDecisionManager`, pass an instance of `AccessDecisionStrategyInterface` instead * Flag `AccessDecisionManager` as `@final` 5.3 --- The CHANGELOG for version 5.3 and earlier can be found at https://github.com/symfony/symfony/blob/5.3/src/Symfony/Component/Security/CHANGELOG.md LICENSE 0000644 00000002054 15120140446 0005547 0 ustar 00 Copyright (c) 2004-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md 0000644 00000004237 15120140446 0006026 0 ustar 00 Security Component - Core ========================= Security provides an infrastructure for sophisticated authorization systems, which makes it possible to easily separate the actual authorization logic from so called user providers that hold the users credentials. Getting Started --------------- ``` $ composer require symfony/security-core ``` ```php use Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolver; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Authorization\AccessDecisionManager; use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter; use Symfony\Component\Security\Core\Authorization\Voter\RoleVoter; use Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Role\RoleHierarchy; $accessDecisionManager = new AccessDecisionManager([ new AuthenticatedVoter(new AuthenticationTrustResolver()), new RoleVoter(), new RoleHierarchyVoter(new RoleHierarchy([ 'ROLE_ADMIN' => ['ROLE_USER'], ])) ]); $user = new \App\Entity\User(...); $token = new UsernamePasswordToken($user, 'main', $user->getRoles()); if (!$accessDecisionManager->decide($token, ['ROLE_ADMIN'])) { throw new AccessDeniedException(); } ``` Sponsor ------- The Security component for Symfony 5.4/6.0 is [backed][1] by [SymfonyCasts][2]. Learn Symfony faster by watching real projects being built and actively coding along with them. SymfonyCasts bridges that learning gap, bringing you video tutorials and coding challenges. Code on! Help Symfony by [sponsoring][3] its development! Resources --------- * [Documentation](https://symfony.com/doc/current/components/security.html) * [Contributing](https://symfony.com/doc/current/contributing/index.html) * [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls) in the [main Symfony repository](https://github.com/symfony/symfony) [1]: https://symfony.com/backers [2]: https://symfonycasts.com [3]: https://symfony.com/sponsor Security.php 0000644 00000003623 15120140446 0007065 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core; use Psr\Container\ContainerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\User\UserInterface; /** * Helper class for commonly-needed security tasks. * * @final */ class Security implements AuthorizationCheckerInterface { public const ACCESS_DENIED_ERROR = '_security.403_error'; public const AUTHENTICATION_ERROR = '_security.last_error'; public const LAST_USERNAME = '_security.last_username'; public const MAX_USERNAME_LENGTH = 4096; private $container; public function __construct(ContainerInterface $container) { $this->container = $container; } public function getUser(): ?UserInterface { if (!$token = $this->getToken()) { return null; } $user = $token->getUser(); // @deprecated since Symfony 5.4, $user will always be a UserInterface instance if (!$user instanceof UserInterface) { return null; } return $user; } /** * Checks if the attributes are granted against the current authentication token and optionally supplied subject. * * @param mixed $attributes * @param mixed $subject */ public function isGranted($attributes, $subject = null): bool { return $this->container->get('security.authorization_checker') ->isGranted($attributes, $subject); } public function getToken(): ?TokenInterface { return $this->container->get('security.token_storage')->getToken(); } } composer.json 0000644 00000003742 15120140446 0007271 0 ustar 00 { "name": "symfony/security-core", "type": "library", "description": "Symfony Security Component - Core Library", "keywords": [], "homepage": "https://symfony.com", "license": "MIT", "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "require": { "php": ">=7.2.5", "symfony/event-dispatcher-contracts": "^1.1|^2|^3", "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1.6|^2|^3", "symfony/deprecation-contracts": "^2.1|^3", "symfony/password-hasher": "^5.3|^6.0" }, "require-dev": { "psr/container": "^1.0|^2.0", "psr/cache": "^1.0|^2.0|^3.0", "symfony/cache": "^4.4|^5.0|^6.0", "symfony/event-dispatcher": "^4.4|^5.0|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", "symfony/http-foundation": "^5.3|^6.0", "symfony/ldap": "^4.4|^5.0|^6.0", "symfony/translation": "^4.4|^5.0|^6.0", "symfony/validator": "^5.2|^6.0", "psr/log": "^1|^2|^3" }, "conflict": { "symfony/event-dispatcher": "<4.4", "symfony/http-foundation": "<5.3", "symfony/security-guard": "<4.4", "symfony/ldap": "<4.4", "symfony/validator": "<5.2" }, "suggest": { "psr/container-implementation": "To instantiate the Security class", "symfony/event-dispatcher": "", "symfony/http-foundation": "", "symfony/validator": "For using the user password constraint", "symfony/expression-language": "For using the expression voter", "symfony/ldap": "For using LDAP integration" }, "autoload": { "psr-4": { "Symfony\\Component\\Security\\Core\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "minimum-stability": "dev" }
Coded With 💗 by
0x6ick