Subida del módulo y tema de PrestaShop

This commit is contained in:
Kaloyan
2026-04-09 18:31:51 +02:00
parent 12c253296f
commit 16b3ff9424
39262 changed files with 7418797 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
<?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\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();
}
public function isRememberMe(?TokenInterface $token = null): bool
{
return $token && $token instanceof RememberMeToken;
}
public function isFullFledged(?TokenInterface $token = null): bool
{
return $this->isAuthenticated($token) && !$this->isRememberMe($token);
}
}

View File

@@ -0,0 +1,38 @@
<?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>
*/
interface AuthenticationTrustResolverInterface
{
/**
* Resolves whether the passed token implementation is authenticated.
*/
public function isAuthenticated(?TokenInterface $token = null): bool;
/**
* Resolves whether the passed token implementation is authenticated
* using remember-me capabilities.
*/
public function isRememberMe(?TokenInterface $token = null): bool;
/**
* Resolves whether the passed token implementation is fully authenticated.
*/
public function isFullFledged(?TokenInterface $token = null): bool;
}

View File

@@ -0,0 +1,69 @@
<?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 CacheItemPoolInterface $cache;
private int $outdatedTokenTtl;
private string $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;
}
public function verifyToken(PersistentTokenInterface $token, #[\SensitiveParameter] 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);
}
public function updateExistingToken(PersistentTokenInterface $token, #[\SensitiveParameter] 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());
}
}

View File

@@ -0,0 +1,72 @@
<?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>
*
* @final since Symfony 6.4
*/
class InMemoryTokenProvider implements TokenProviderInterface
{
private array $tokens = [];
public function loadTokenBySeries(string $series): PersistentTokenInterface
{
if (!isset($this->tokens[$series])) {
throw new TokenNotFoundException('No token found.');
}
return $this->tokens[$series];
}
/**
* @param \DateTimeInterface $lastUsed Accepting only DateTime is deprecated since Symfony 6.4
*
* @return void
*/
public function updateToken(string $series, #[\SensitiveParameter] string $tokenValue, \DateTime $lastUsed)
{
if (!isset($this->tokens[$series])) {
throw new TokenNotFoundException('No token found.');
}
$token = new PersistentToken(
$this->tokens[$series]->getClass(),
$this->tokens[$series]->getUserIdentifier(),
$series,
$tokenValue,
$lastUsed
);
$this->tokens[$series] = $token;
}
/**
* @return void
*/
public function deleteTokenBySeries(string $series)
{
unset($this->tokens[$series]);
}
/**
* @return void
*/
public function createNewToken(PersistentTokenInterface $token)
{
$this->tokens[$token->getSeries()] = $token;
}
}

View File

@@ -0,0 +1,73 @@
<?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 string $class;
private string $userIdentifier;
private string $series;
private string $tokenValue;
private \DateTimeImmutable $lastUsed;
public function __construct(string $class, string $userIdentifier, string $series, #[\SensitiveParameter] string $tokenValue, \DateTimeInterface $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 = \DateTimeImmutable::createFromInterface($lastUsed);
}
public function getClass(): string
{
return $this->class;
}
public function getUserIdentifier(): string
{
return $this->userIdentifier;
}
public function getSeries(): string
{
return $this->series;
}
public function getTokenValue(): string
{
return $this->tokenValue;
}
public function getLastUsed(): \DateTime
{
return \DateTime::createFromImmutable($this->lastUsed);
}
}

View File

@@ -0,0 +1,48 @@
<?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).
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
interface PersistentTokenInterface
{
/**
* Returns the class of the user.
*/
public function getClass(): string;
/**
* Returns the series.
*/
public function getSeries(): string;
/**
* Returns the token value.
*/
public function getTokenValue(): string;
/**
* Returns the time the token was last used.
*
* Each call SHOULD return a new distinct DateTime instance.
*/
public function getLastUsed(): \DateTime;
/**
* Returns the identifier used to authenticate (e.g. their email address or username).
*/
public function getUserIdentifier(): string;
}

View File

@@ -0,0 +1,56 @@
<?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.
*
* @return void
*/
public function deleteTokenBySeries(string $series);
/**
* Updates the token according to this data.
*
* @param \DateTimeInterface $lastUsed Accepting only DateTime is deprecated since Symfony 6.4
*
* @return void
*
* @throws TokenNotFoundException if the token is not found
*/
public function updateToken(string $series, #[\SensitiveParameter] string $tokenValue, \DateTime $lastUsed);
/**
* Creates a new token.
*
* @return void
*/
public function createNewToken(PersistentTokenInterface $token);
}

View File

@@ -0,0 +1,32 @@
<?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, #[\SensitiveParameter] string $tokenValue): bool;
/**
* Updates an existing token with a new token value and lastUsed time.
*/
public function updateExistingToken(PersistentTokenInterface $token, #[\SensitiveParameter] string $tokenValue, \DateTimeInterface $lastUsed): void;
}

View File

@@ -0,0 +1,179 @@
<?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\InMemoryUser;
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, \Serializable
{
private ?UserInterface $user = null;
private array $roleNames = [];
private array $attributes = [];
/**
* @param string[] $roles An array of roles
*
* @throws \InvalidArgumentException
*/
public function __construct(array $roles = [])
{
foreach ($roles as $role) {
$this->roleNames[] = $role;
}
}
public function getRoleNames(): array
{
return $this->roleNames;
}
public function getUserIdentifier(): string
{
return $this->user ? $this->user->getUserIdentifier() : '';
}
public function getUser(): ?UserInterface
{
return $this->user;
}
/**
* @return void
*/
public function setUser(UserInterface $user)
{
$this->user = $user;
}
/**
* @return void
*/
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, true, 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
{
[$user, , , $this->attributes, $this->roleNames] = $data;
$this->user = \is_string($user) ? new InMemoryUser($user, '', $this->roleNames, false) : $user;
}
public function getAttributes(): array
{
return $this->attributes;
}
/**
* @return void
*/
public function setAttributes(array $attributes)
{
$this->attributes = $attributes;
}
public function hasAttribute(string $name): bool
{
return \array_key_exists($name, $this->attributes);
}
public function getAttribute(string $name): mixed
{
if (!\array_key_exists($name, $this->attributes)) {
throw new \InvalidArgumentException(\sprintf('This token has no "%s" attribute.', $name));
}
return $this->attributes[$name];
}
/**
* @return void
*/
public function setAttribute(string $name, mixed $value)
{
$this->attributes[$name] = $value;
}
public function __toString(): string
{
$class = static::class;
$class = substr($class, strrpos($class, '\\') + 1);
$roles = [];
foreach ($this->roleNames as $role) {
$roles[] = $role;
}
return \sprintf('%s(user="%s", roles="%s")', $class, $this->getUserIdentifier(), implode(', ', $roles));
}
/**
* @internal
*/
final public function serialize(): string
{
throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
}
/**
* @internal
*/
final public function unserialize(string $serialized): void
{
$this->__unserialize(unserialize($serialized));
}
}

View File

@@ -0,0 +1,95 @@
<?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;
/**
* @author Wouter de Jong <wouter@wouterj.nl>
*/
class NullToken implements TokenInterface
{
public function __toString(): string
{
return '';
}
public function getRoleNames(): array
{
return [];
}
public function getUser(): ?UserInterface
{
return null;
}
/**
* @return never
*/
public function setUser(UserInterface $user)
{
throw new \BadMethodCallException('Cannot set user on a NullToken.');
}
public function getUserIdentifier(): string
{
return '';
}
/**
* @return void
*/
public function eraseCredentials()
{
}
public function getAttributes(): array
{
return [];
}
/**
* @return never
*/
public function setAttributes(array $attributes)
{
throw new \BadMethodCallException('Cannot set attributes of NullToken.');
}
public function hasAttribute(string $name): bool
{
return false;
}
public function getAttribute(string $name): mixed
{
return null;
}
/**
* @return never
*/
public function setAttribute(string $name, mixed $value)
{
throw new \BadMethodCallException('Cannot add attribute to NullToken.');
}
public function __serialize(): array
{
return [];
}
public function __unserialize(array $data): void
{
}
}

View File

@@ -0,0 +1,56 @@
<?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 string $firewallName;
/**
* @param string[] $roles
*/
public function __construct(UserInterface $user, string $firewallName, array $roles = [])
{
parent::__construct($roles);
if ('' === $firewallName) {
throw new \InvalidArgumentException('$firewallName must not be empty.');
}
$this->setUser($user);
$this->firewallName = $firewallName;
}
public function getFirewallName(): string
{
return $this->firewallName;
}
public function __serialize(): array
{
return [null, $this->firewallName, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[, $this->firewallName, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,71 @@
<?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\Exception\InvalidArgumentException;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Authentication Token for "Remember-Me".
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
class RememberMeToken extends AbstractToken
{
private string $secret;
private string $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, #[\SensitiveParameter] string $secret)
{
parent::__construct($user->getRoles());
if (!$secret) {
throw new InvalidArgumentException('A non-empty secret is required.');
}
if (!$firewallName) {
throw new InvalidArgumentException('$firewallName must not be empty.');
}
$this->firewallName = $firewallName;
$this->secret = $secret;
$this->setUser($user);
}
public function getFirewallName(): string
{
return $this->firewallName;
}
public function getSecret(): string
{
return $this->secret;
}
public function __serialize(): array
{
return [$this->secret, $this->firewallName, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[$this->secret, $this->firewallName, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,70 @@
<?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 ?TokenInterface $token = null;
private ?\Closure $initializer = null;
public function getToken(): ?TokenInterface
{
if ($initializer = $this->initializer) {
$this->initializer = null;
$initializer();
}
return $this->token;
}
/**
* @return void
*/
public function setToken(?TokenInterface $token = null)
{
if (1 > \func_num_args()) {
trigger_deprecation('symfony/security-core', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
}
if ($token) {
// ensure any initializer is called
$this->getToken();
}
$this->initializer = null;
$this->token = $token;
}
public function setInitializer(?callable $initializer): void
{
$this->initializer = null === $initializer ? null : $initializer(...);
}
/**
* @return void
*/
public function reset()
{
$this->setToken(null);
}
}

View File

@@ -0,0 +1,36 @@
<?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.
*/
public function getToken(): ?TokenInterface;
/**
* Sets the authentication token.
*
* @param TokenInterface|null $token A TokenInterface token, or null if no further authentication information should be stored
*
* @return void
*/
public function setToken(?TokenInterface $token);
}

View File

@@ -0,0 +1,83 @@
<?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 TokenStorageInterface $storage;
private ContainerInterface $container;
private bool $enableUsageTracking = false;
public function __construct(TokenStorageInterface $storage, ContainerInterface $container)
{
$this->storage = $storage;
$this->container = $container;
}
public function getToken(): ?TokenInterface
{
if ($this->shouldTrackUsage()) {
// increments the internal session usage index
$this->getSession()->getMetadataBag();
}
return $this->storage->getToken();
}
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
{
return $this->container->get('request_stack')->getSession();
}
private function shouldTrackUsage(): bool
{
return $this->enableUsageTracking && $this->container->get('request_stack')->getMainRequest();
}
}

View File

@@ -0,0 +1,66 @@
<?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 TokenInterface $originalToken;
private ?string $originatedFromUri = null;
/**
* @param $user The username (like a nickname, email address, etc.), or a UserInterface instance or an object implementing a __toString method
* @param $originatedFromUri The URI where was the user at the switch
*
* @throws \InvalidArgumentException
*/
public function __construct(UserInterface $user, string $firewallName, array $roles, TokenInterface $originalToken, ?string $originatedFromUri = null)
{
parent::__construct($user, $firewallName, $roles);
$this->originalToken = $originalToken;
$this->originatedFromUri = $originatedFromUri;
}
public function getOriginalToken(): TokenInterface
{
return $this->originalToken;
}
public function getOriginatedFromUri(): ?string
{
return $this->originatedFromUri;
}
public function __serialize(): array
{
return [$this->originalToken, $this->originatedFromUri, parent::__serialize()];
}
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);
}
}

View File

@@ -0,0 +1,96 @@
<?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.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
interface TokenInterface extends \Stringable
{
/**
* Returns a string representation of the Token.
*
* This is only to be used for debugging purposes.
*/
public function __toString(): string;
/**
* Returns the user identifier used during authentication (e.g. a user's email address or username).
*/
public function getUserIdentifier(): string;
/**
* Returns the user roles.
*
* @return string[]
*/
public function getRoleNames(): array;
/**
* Returns a user representation.
*
* @see AbstractToken::setUser()
*/
public function getUser(): ?UserInterface;
/**
* Sets the authenticated user in the token.
*
* @return void
*
* @throws \InvalidArgumentException
*/
public function setUser(UserInterface $user);
/**
* Removes sensitive information from the token.
*
* @return void
*/
public function eraseCredentials();
public function getAttributes(): array;
/**
* @param array $attributes The token attributes
*
* @return void
*/
public function setAttributes(array $attributes);
public function hasAttribute(string $name): bool;
/**
* @throws \InvalidArgumentException When attribute doesn't exist for this token
*/
public function getAttribute(string $name): mixed;
/**
* @return void
*/
public function setAttribute(string $name, mixed $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;
}

View File

@@ -0,0 +1,53 @@
<?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 string $firewallName;
public function __construct(UserInterface $user, string $firewallName, array $roles = [])
{
parent::__construct($roles);
if ('' === $firewallName) {
throw new \InvalidArgumentException('$firewallName must not be empty.');
}
$this->setUser($user);
$this->firewallName = $firewallName;
}
public function getFirewallName(): string
{
return $this->firewallName;
}
public function __serialize(): array
{
return [null, $this->firewallName, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[, $this->firewallName, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,34 @@
<?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\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';
/**
* Event aliases.
*
* These aliases can be consumed by RegisterListenersPass.
*/
public const ALIASES = [
AuthenticationSuccessEvent::class => self::AUTHENTICATION_SUCCESS,
];
}

View File

@@ -0,0 +1,125 @@
<?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\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 class AccessDecisionManager implements AccessDecisionManagerInterface
{
private const VALID_VOTES = [
VoterInterface::ACCESS_GRANTED => true,
VoterInterface::ACCESS_DENIED => true,
VoterInterface::ACCESS_ABSTAIN => true,
];
private iterable $voters;
private array $votersCacheAttributes = [];
private array $votersCacheObject = [];
private AccessDecisionStrategyInterface $strategy;
/**
* @param iterable<mixed, VoterInterface> $voters An array or an iterator of VoterInterface instances
*/
public function __construct(iterable $voters = [], ?AccessDecisionStrategyInterface $strategy = null)
{
$this->voters = $voters;
$this->strategy = $strategy ?? new AffirmativeStrategy();
}
/**
* @param bool $allowMultipleAttributes Whether to allow passing multiple values to the $attributes array
*/
public function decide(TokenInterface $token, array $attributes, mixed $object = null, bool $allowMultipleAttributes = false): bool
{
// 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)
);
}
/**
* @return \Traversable<int, int>
*/
private function collectResults(TokenInterface $token, array $attributes, mixed $object): \Traversable
{
foreach ($this->getVoters($attributes, $object) as $voter) {
$result = $voter->vote($token, $object, $attributes);
if (!\is_int($result) || !(self::VALID_VOTES[$result] ?? false)) {
throw new \LogicException(\sprintf('"%s::vote()" must return one of "%s" constants ("ACCESS_GRANTED", "ACCESS_DENIED" or "ACCESS_ABSTAIN"), "%s" returned.', get_debug_type($voter), VoterInterface::class, var_export($result, true)));
}
yield $result;
}
}
/**
* @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) ? $object::class : 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;
}
}
}

View File

@@ -0,0 +1,30 @@
<?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
*/
public function decide(TokenInterface $token, array $attributes, mixed $object = null): bool;
}

View File

@@ -0,0 +1,50 @@
<?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\NullToken;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* 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 TokenStorageInterface $tokenStorage;
private AccessDecisionManagerInterface $accessDecisionManager;
public function __construct(TokenStorageInterface $tokenStorage, AccessDecisionManagerInterface $accessDecisionManager, bool $exceptionOnNoToken = false)
{
if ($exceptionOnNoToken) {
throw new \LogicException(\sprintf('Argument $exceptionOnNoToken of "%s()" must be set to "false".', __METHOD__));
}
$this->tokenStorage = $tokenStorage;
$this->accessDecisionManager = $accessDecisionManager;
}
final public function isGranted(mixed $attribute, mixed $subject = null): bool
{
$token = $this->tokenStorage->getToken();
if (!$token || !$token->getUser()) {
$token = new NullToken();
}
return $this->accessDecisionManager->decide($token, [$attribute], $subject);
}
}

View File

@@ -0,0 +1,27 @@
<?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)
*/
public function isGranted(mixed $attribute, mixed $subject = null): bool;
}

View File

@@ -0,0 +1,40 @@
<?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
{
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);
}
}
}

View File

@@ -0,0 +1,36 @@
<?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;
/**
* Define some ExpressionLanguage functions.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface
{
public function getFunctions(): array
{
return [
new ExpressionFunction('is_authenticated', fn () => '$auth_checker->isGranted("IS_AUTHENTICATED")', fn (array $variables) => $variables['auth_checker']->isGranted('IS_AUTHENTICATED')),
new ExpressionFunction('is_fully_authenticated', fn () => '$token && $auth_checker->isGranted("IS_AUTHENTICATED_FULLY")', fn (array $variables) => $variables['token'] && $variables['auth_checker']->isGranted('IS_AUTHENTICATED_FULLY')),
new ExpressionFunction('is_granted', fn ($attributes, $object = 'null') => \sprintf('$auth_checker->isGranted(%s, %s)', $attributes, $object), fn (array $variables, $attributes, $object = null) => $variables['auth_checker']->isGranted($attributes, $object)),
new ExpressionFunction('is_remember_me', fn () => '$token && $auth_checker->isGranted("IS_REMEMBERED")', fn (array $variables) => $variables['token'] && $variables['auth_checker']->isGranted('IS_REMEMBERED')),
];
}
}

View File

@@ -0,0 +1,25 @@
<?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;
}

View File

@@ -0,0 +1,58 @@
<?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
{
private bool $allowIfAllAbstainDecisions;
public function __construct(bool $allowIfAllAbstainDecisions = false)
{
$this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions;
}
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';
}
}

View File

@@ -0,0 +1,75 @@
<?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 bool $allowIfAllAbstainDecisions;
private bool $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';
}
}

View File

@@ -0,0 +1,54 @@
<?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 bool $allowIfAllAbstainDecisions;
public function __construct(bool $allowIfAllAbstainDecisions = false)
{
$this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions;
}
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';
}
}

View File

@@ -0,0 +1,59 @@
<?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 bool $allowIfAllAbstainDecisions;
public function __construct(bool $allowIfAllAbstainDecisions = false)
{
$this->allowIfAllAbstainDecisions = $allowIfAllAbstainDecisions;
}
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';
}
}

View File

@@ -0,0 +1,109 @@
<?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\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 AccessDecisionManagerInterface $manager;
private ?AccessDecisionStrategyInterface $strategy = null;
/** @var iterable<mixed, VoterInterface> */
private iterable $voters = [];
private array $decisionLog = []; // All decision logs
private array $currentLog = []; // Logs being filled in
public function __construct(AccessDecisionManagerInterface $manager)
{
$this->manager = $manager;
// The strategy and voters are stored in a private properties of the decorated service
if (property_exists($manager, 'strategy')) {
$reflection = new \ReflectionProperty($manager::class, 'strategy');
$this->strategy = $reflection->getValue($manager);
}
if (property_exists($manager, 'voters')) {
$reflection = new \ReflectionProperty($manager::class, 'voters');
$this->voters = $reflection->getValue($manager);
}
}
public function decide(TokenInterface $token, array $attributes, mixed $object = null, bool $allowMultipleAttributes = false): bool
{
$currentDecisionLog = [
'attributes' => $attributes,
'object' => $object,
'voterDetails' => [],
];
$this->currentLog[] = &$currentDecisionLog;
$result = $this->manager->decide($token, $attributes, $object, $allowMultipleAttributes);
$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): void
{
$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;
}
}

View File

@@ -0,0 +1,104 @@
<?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';
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 AuthenticationTrustResolverInterface $authenticationTrustResolver;
public function __construct(AuthenticationTrustResolverInterface $authenticationTrustResolver)
{
$this->authenticationTrustResolver = $authenticationTrustResolver;
}
public function vote(TokenInterface $token, mixed $subject, array $attributes): int
{
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 !== $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 === $attribute && $this->authenticationTrustResolver->isAuthenticated($token)) {
return VoterInterface::ACCESS_GRANTED;
}
if (self::IS_REMEMBERED === $attribute && $this->authenticationTrustResolver->isRememberMe($token)) {
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,
self::IS_IMPERSONATOR,
self::IS_REMEMBERED,
self::PUBLIC_ACCESS,
], true);
}
public function supportsType(string $subjectType): bool
{
return true;
}
}

View File

@@ -0,0 +1,30 @@
<?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;
}

View File

@@ -0,0 +1,99 @@
<?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 $expressionLanguage;
private AuthenticationTrustResolverInterface $trustResolver;
private AuthorizationCheckerInterface $authChecker;
private ?RoleHierarchyInterface $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;
}
public function vote(TokenInterface $token, mixed $subject, array $attributes): int
{
$result = VoterInterface::ACCESS_ABSTAIN;
$variables = null;
foreach ($attributes as $attribute) {
if (!$attribute instanceof Expression) {
continue;
}
$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, mixed $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;
}
}

View File

@@ -0,0 +1,41 @@
<?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 RoleHierarchyInterface $roleHierarchy;
public function __construct(RoleHierarchyInterface $roleHierarchy, string $prefix = 'ROLE_')
{
$this->roleHierarchy = $roleHierarchy;
parent::__construct($prefix);
}
/**
* @return array
*/
protected function extractRoles(TokenInterface $token)
{
return $this->roleHierarchy->getReachableRoleNames($token->getRoleNames());
}
}

View File

@@ -0,0 +1,68 @@
<?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 string $prefix;
public function __construct(string $prefix = 'ROLE_')
{
$this->prefix = $prefix;
}
public function vote(TokenInterface $token, mixed $subject, array $attributes): int
{
$result = VoterInterface::ACCESS_ABSTAIN;
$roles = $this->extractRoles($token);
foreach ($attributes as $attribute) {
if (!\is_string($attribute) || !str_starts_with($attribute, $this->prefix)) {
continue;
}
$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;
}
/**
* @return array
*/
protected function extractRoles(TokenInterface $token)
{
return $token->getRoleNames();
}
}

View File

@@ -0,0 +1,59 @@
<?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 VoterInterface $voter;
private EventDispatcherInterface $eventDispatcher;
public function __construct(VoterInterface $voter, EventDispatcherInterface $eventDispatcher)
{
$this->voter = $voter;
$this->eventDispatcher = $eventDispatcher;
}
public function vote(TokenInterface $token, mixed $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);
}
}

View File

@@ -0,0 +1,95 @@
<?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>
*
* @template TAttribute of string
* @template TSubject of mixed
*/
abstract class Voter implements VoterInterface, CacheableVoterInterface
{
public function vote(TokenInterface $token, mixed $subject, array $attributes): int
{
// 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 (str_contains($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 mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
*
* @psalm-assert-if-true TSubject $subject
* @psalm-assert-if-true TAttribute $attribute
*/
abstract protected function supports(string $attribute, mixed $subject): bool;
/**
* 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 TAttribute $attribute
* @param TSubject $subject
*/
abstract protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool;
}

View File

@@ -0,0 +1,41 @@
<?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
*
* @psalm-return self::ACCESS_* must be transformed into @return on Symfony 7
*/
public function vote(TokenInterface $token, mixed $subject, array $attributes);
}

View File

@@ -0,0 +1,38 @@
<?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 TokenInterface $authenticationToken;
public function __construct(TokenInterface $token)
{
$this->authenticationToken = $token;
}
/**
* @return TokenInterface
*/
public function getAuthenticationToken()
{
return $this->authenticationToken;
}
}

View File

@@ -0,0 +1,16 @@
<?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
{
}

View File

@@ -0,0 +1,58 @@
<?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 VoterInterface $voter;
private mixed $subject;
private array $attributes;
private int $vote;
public function __construct(VoterInterface $voter, mixed $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(): mixed
{
return $this->subject;
}
public function getAttributes(): array
{
return $this->attributes;
}
public function getVote(): int
{
return $this->vote;
}
}

View File

@@ -0,0 +1,57 @@
<?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\HttpKernel\Attribute\WithHttpStatus;
/**
* AccessDeniedException is thrown when the account has not the required role.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
#[WithHttpStatus(403)]
class AccessDeniedException extends RuntimeException
{
private array $attributes = [];
private mixed $subject = null;
public function __construct(string $message = 'Access Denied.', ?\Throwable $previous = null, int $code = 403)
{
parent::__construct($message, $code, $previous);
}
public function getAttributes(): array
{
return $this->attributes;
}
/**
* @return void
*/
public function setAttributes(array|string $attributes)
{
$this->attributes = (array) $attributes;
}
public function getSubject(): mixed
{
return $this->subject;
}
/**
* @return void
*/
public function setSubject(mixed $subject)
{
$this->subject = $subject;
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Account has expired.';
}
}

View File

@@ -0,0 +1,54 @@
<?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 ?UserInterface $user = null;
/**
* Get the user.
*/
public function getUser(): ?UserInterface
{
return $this->user;
}
/**
* @return void
*/
public function setUser(UserInterface $user)
{
$this->user = $user;
}
public function __serialize(): array
{
return [$this->user, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[$this->user, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,27 @@
<?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
{
public function getMessageKey(): string
{
return 'Authentication credentials could not be found.';
}
}

View File

@@ -0,0 +1,99 @@
<?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\HttpKernel\Attribute\WithHttpStatus;
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>
*/
#[WithHttpStatus(401)]
class AuthenticationException extends RuntimeException
{
private ?TokenInterface $token = null;
public function getToken(): ?TokenInterface
{
return $this->token;
}
/**
* @return void
*/
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.
*/
public function getMessageData(): array
{
return [];
}
}

View File

@@ -0,0 +1,28 @@
<?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
{
public function getMessageKey(): string
{
return 'Authentication expired because your account information has changed.';
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Authentication request could not be processed due to a system problem.';
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Invalid credentials.';
}
}

View File

@@ -0,0 +1,27 @@
<?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
{
public function getMessageKey(): string
{
return 'Cookie has already been used by someone else.';
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Credentials have expired.';
}
}

View File

@@ -0,0 +1,70 @@
<?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 string $messageKey;
private array $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
*
* @return void
*/
public function setSafeMessage(string $messageKey, array $messageData = [])
{
$this->messageKey = $messageKey;
$this->messageData = $messageData;
}
public function getMessageKey(): string
{
return $this->messageKey;
}
public function getMessageData(): array
{
return $this->messageData;
}
public function __serialize(): array
{
return [parent::__serialize(), $this->messageKey, $this->messageData];
}
public function __unserialize(array $data): void
{
[$parentData, $this->messageKey, $this->messageData] = $data;
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,70 @@
<?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 string $messageKey;
private array $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
*
* @return void
*/
public function setSafeMessage(string $messageKey, array $messageData = [])
{
$this->messageKey = $messageKey;
$this->messageData = $messageData;
}
public function getMessageKey(): string
{
return $this->messageKey;
}
public function getMessageData(): array
{
return $this->messageData;
}
public function __serialize(): array
{
return [parent::__serialize(), $this->messageKey, $this->messageData];
}
public function __unserialize(array $data): void
{
[$parentData, $this->messageKey, $this->messageData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Account is disabled.';
}
}

View File

@@ -0,0 +1,21 @@
<?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
{
}

View File

@@ -0,0 +1,28 @@
<?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
{
public function getMessageKey(): string
{
return 'Not privileged to request the resource.';
}
}

View File

@@ -0,0 +1,21 @@
<?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
{
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Invalid CSRF token.';
}
}

View File

@@ -0,0 +1,34 @@
<?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 $response;
public function __construct(Response $response)
{
$this->response = $response;
}
public function getResponse(): Response
{
return $this->response;
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'Account is locked.';
}
}

View File

@@ -0,0 +1,21 @@
<?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
{
}

View File

@@ -0,0 +1,25 @@
<?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);
}
}

View File

@@ -0,0 +1,27 @@
<?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
{
public function getMessageKey(): string
{
return 'No authentication provider found to support the authentication token.';
}
}

View File

@@ -0,0 +1,21 @@
<?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
{
}

View File

@@ -0,0 +1,32 @@
<?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
{
public function getMessageKey(): string
{
return 'No session available, it either timed out or cookies are not enabled.';
}
}

View File

@@ -0,0 +1,26 @@
<?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
{
public function getMessageKey(): string
{
return 'No token could be found.';
}
}

View File

@@ -0,0 +1,53 @@
<?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 ?int $threshold;
public function __construct(?int $threshold = null)
{
$this->threshold = $threshold;
}
public function getMessageData(): array
{
return [
'%minutes%' => $this->threshold,
'%count%' => (int) $this->threshold,
];
}
public function getMessageKey(): string
{
return 'Too many failed login attempts, please try again '.($this->threshold ? 'in %minutes% minute'.($this->threshold > 1 ? 's' : '').'.' : 'later.');
}
public function __serialize(): array
{
return [$this->threshold, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[$this->threshold, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

View File

@@ -0,0 +1,22 @@
<?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
{
}

View File

@@ -0,0 +1,61 @@
<?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 ?string $identifier = null;
public function getMessageKey(): string
{
return 'Username could not be found.';
}
/**
* Get the user identifier (e.g. username or email address).
*/
public function getUserIdentifier(): ?string
{
return $this->identifier;
}
/**
* Set the user identifier (e.g. username or email address).
*/
public function setUserIdentifier(string $identifier): void
{
$this->identifier = $identifier;
}
public function getMessageData(): array
{
return ['{{ username }}' => $this->identifier, '{{ user_identifier }}' => $this->identifier];
}
public function __serialize(): array
{
return [$this->identifier, parent::__serialize()];
}
public function __unserialize(array $data): void
{
[$this->identifier, $parentData] = $data;
$parentData = \is_array($parentData) ? $parentData : unserialize($parentData);
parent::__unserialize($parentData);
}
}

19
vendor/symfony/security-core/LICENSE vendored Normal file
View File

@@ -0,0 +1,19 @@
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.

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="af" 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>
<trans-unit id="19">
<source>Too many failed login attempts, please try again in %minutes% minute.</source>
<target state="needs-review-translation">Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minuut.</target>
</trans-unit>
<trans-unit id="20">
<source>Too many failed login attempts, please try again in %minutes% minutes.</source>
<target state="needs-review-translation">Te veel mislukte aanmeldpogings, probeer asseblief weer oor %minutes% minute.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="ar" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="az" 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 state="needs-review-translation">Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin.|Çox sayda uğursuz giriş cəhdi, zəhmət olmasa %minutes% dəqiqə sonra yenidən cəhd edin.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="be" 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% хвіліну.|Занадта вялікая колькасць няўдалых спробаў уваходу. Калі ласка, паспрабуйце зноў праз %minutes% хвіліны.|Занадта вялікая колькасць няўдалых спробаў уваходу. Калі ласка, паспрабуйце зноў праз %minutes% хвілін.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="bg" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="bs" 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 state="needs-review-translation">Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minut.|Previše neuspješnih pokušaja prijave, pokušajte ponovo za %minutes% minuta.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="ca" 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, si us plau 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, si us plau 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, si us plau torneu-ho a provar en %minutes% minuts.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="cs" 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% minutu.|Příliš mnoho neúspěšných pokusů o přihlášení, zkuste to prosím znovu za %minutes% minuty.|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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="cy" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>An authentication exception occurred.</source>
<target state="needs-review-translation">Digwyddodd eithriad dilysu.</target>
</trans-unit>
<trans-unit id="2">
<source>Authentication credentials could not be found.</source>
<target state="needs-review-translation">Ni ellid dod o hyd i ddogfennau dilysu.</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
<target state="needs-review-translation">Ni ellid prosesu cais dilysu oherwydd problem gyda'r system.</target>
</trans-unit>
<trans-unit id="4">
<source>Invalid credentials.</source>
<target state="needs-review-translation">Dogfennau annilys.</target>
</trans-unit>
<trans-unit id="5">
<source>Cookie has already been used by someone else.</source>
<target state="needs-review-translation">Mae rhywun arall eisoes wedi defnyddio'r cwcis.</target>
</trans-unit>
<trans-unit id="6">
<source>Not privileged to request the resource.</source>
<target state="needs-review-translation">Heb y fraint i ofyn am yr adnodd.</target>
</trans-unit>
<trans-unit id="7">
<source>Invalid CSRF token.</source>
<target state="needs-review-translation">Tocyn CSRF annilys.</target>
</trans-unit>
<trans-unit id="9">
<source>No authentication provider found to support the authentication token.</source>
<target state="needs-review-translation">Heb ddod o hyd i ddarparwr dilysu i gefnogi'r tocyn dilysu.</target>
</trans-unit>
<trans-unit id="10">
<source>No session available, it either timed out or cookies are not enabled.</source>
<target state="needs-review-translation">Dim sesiwn ar gael, naill ai mae wedi dod i ben neu nid yw cwcis wedi'u galluogi.</target>
</trans-unit>
<trans-unit id="11">
<source>No token could be found.</source>
<target state="needs-review-translation">Heb ddod o hyd i docyn.</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target state="needs-review-translation">Heb ddod o hyd i enw defnyddiwr.</target>
</trans-unit>
<trans-unit id="13">
<source>Account has expired.</source>
<target state="needs-review-translation">Mae'r cyfrif wedi dod i ben.</target>
</trans-unit>
<trans-unit id="14">
<source>Credentials have expired.</source>
<target state="needs-review-translation">Mae'r dogfennau wedi dod i ben.</target>
</trans-unit>
<trans-unit id="15">
<source>Account is disabled.</source>
<target state="needs-review-translation">Mae'r cyfrif wedi'i analluogi.</target>
</trans-unit>
<trans-unit id="16">
<source>Account is locked.</source>
<target state="needs-review-translation">Mae'r cyfrif wedi'i gloi.</target>
</trans-unit>
<trans-unit id="17">
<source>Too many failed login attempts, please try again later.</source>
<target state="needs-review-translation">Gormod o ymdrechion mewngofnodi wedi methu, ceisiwch eto'n hwyrach.</target>
</trans-unit>
<trans-unit id="18">
<source>Invalid or expired login link.</source>
<target state="needs-review-translation">Dolen mewngofnodi annilys neu wedi dod i ben.</target>
</trans-unit>
<trans-unit id="19">
<source>Too many failed login attempts, please try again in %minutes% minute.</source>
<target state="needs-review-translation">Gormod o ymdrechion mewngofnodi wedi methu, ceisiwch eto ymhen %minutes% munud.</target>
</trans-unit>
<trans-unit id="20">
<source>Too many failed login attempts, please try again in %minutes% minutes.</source>
<target state="needs-review-translation">Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud.|Gormod o ymdrechion mewngofnodi wedi methu, rhowch gynnig arall arni mewn %minutes% munud.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="da" 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 kunne ikke findes.</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
<target>Godkendelsesanmodningen kunne ikke behandles på grund af en 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 blevet 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 blev fundet til at understøtte 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 er tilgængelig. Den 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 kunne findes.</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target>Brugernavn kunne 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 mislykkede loginforsøg. Prøv venligst igen 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 mislykkede loginforsøg. Prøv venligst 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 state="needs-review-translation">For mange mislykkede loginforsøg, prøv igen om %minutes% minutter.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="de" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="el" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="es" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="et" 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 state="needs-review-translation">Liiga palju nurjunud sisselogimiskatseid, proovige uuesti %minutes% minuti pärast.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="eu" 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 state="needs-review-translation">Saioa hasteko saiakera huts gehiegi, saiatu berriro %minutes% minututan.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="fa" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="fi" 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 state="needs-review-translation">Liian monta epäonnistunutta kirjautumisyritystä, yritä uudelleen %minutes% minuutin kuluttua.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="fr" 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>Trop de tentatives de connexion échouées, veuillez réessayer dans %minutes% minutes.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="gl" 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 state="needs-review-translation">Demasiados intentos fallidos de inicio de sesión, inténtao de novo en %minutes% minutos.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="he" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="hr" 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, pokušajte ponovo za %minutes% minutu.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minute.|Previše neuspjelih pokušaja prijave, pokušajte ponovo za %minutes% minuta.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="hu" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="hy" 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 state="needs-review-translation">Չափազանց շատ անհաջող մուտքի փորձեր, խնդրում ենք փորձել կրկին %minutes% րոպեից.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="id" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>An authentication exception occurred.</source>
<target>Terjadi kesalahan 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 tidak valid.</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 tidak valid.</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 gagal, silahkan coba lagi nanti.</target>
</trans-unit>
<trans-unit id="18">
<source>Invalid or expired login link.</source>
<target>Link login tidak valid 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 gagal, 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 upaya login yang gagal, silakan coba lagi dalam beberapa %minutes% menit.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="it" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="ja" 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>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="lb" 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>
<trans-unit id="19">
<source>Too many failed login attempts, please try again in %minutes% minute.</source>
<target>Zu vill fehlgeschloen Loginversich, w. e. g. probéiert nach am %minutes% Minutt.</target>
</trans-unit>
<trans-unit id="20">
<source>Too many failed login attempts, please try again in %minutes% minutes.</source>
<target state="needs-review-translation">Ze vill Feeler beim Umellen, versicht weg erëm an %minutes% Minutten.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" target-language="lt" 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 state="needs-review-translation">Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minutės.|Per daug nesėkmingų prisijungimo bandymų, bandykite vėl po %minutes% minučių.</target>
</trans-unit>
</body>
</file>
</xliff>

Some files were not shown because too many files have changed in this diff Show More