[Security] Removed get/setExtraInformation, added get/set(Token|User)

This commit is contained in:
Alexander 2012-07-15 17:26:18 +02:00
parent 837ae15102
commit 39da27a06d
8 changed files with 55 additions and 18 deletions

View File

@ -35,5 +35,6 @@ CHANGELOG
* [BC BREAK] moved the default logout success handling to a separate class. The
order of arguments in the constructor of `LogoutListener` has changed.
* [BC BREAK] The constructor of `AuthenticationException` and all child
classes now matches the constructor of `\Exception`. Extra information
should be passed via the `setExtraInformation` setter.
classes now matches the constructor of `\Exception`. The extra information
getters and setters are removed. There are now dedicated getters/setters for
token (`AuthenticationException') and user (`AccountStatusException`).

View File

@ -77,7 +77,7 @@ class AuthenticationProviderManager implements AuthenticationManagerInterface
break;
}
} catch (AccountStatusException $e) {
$e->setExtraInformation($token);
$e->setToken($token);
throw $e;
} catch (AuthenticationException $e) {
@ -105,7 +105,7 @@ class AuthenticationProviderManager implements AuthenticationManagerInterface
$this->eventDispatcher->dispatch(AuthenticationEvents::AUTHENTICATION_FAILURE, new AuthenticationFailureEvent($token, $lastException));
}
$lastException->setExtraInformation($token);
$lastException->setToken($token);
throw $lastException;
}

View File

@ -91,7 +91,7 @@ class DaoAuthenticationProvider extends UserAuthenticationProvider
throw $notFound;
} catch (\Exception $repositoryProblem) {
$ex = new AuthenticationServiceException($repositoryProblem->getMessage(), 0, $repositoryProblem);
$ex->setExtraInformation($token);
$ex->setToken($token);
throw $ex;
}
}

View File

@ -11,12 +11,36 @@
namespace Symfony\Component\Security\Core\Exception;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* AccountStatusException is the base class for authentication exceptions
* caused by the user account status.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Alexander <iam.asm89@gmail.com>
*/
abstract class AccountStatusException extends AuthenticationException
{
private $user;
/**
* Get the user.
*
* @return UserInterface
*/
public function getUser()
{
return $this->user;
}
/**
* Set the user.
*
* @param UserInterface $user
*/
public function setUser(UserInterface $user)
{
$this->user = $user;
}
}

View File

@ -11,6 +11,8 @@
namespace Symfony\Component\Security\Core\Exception;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
/**
* AuthenticationException is the base class for all authentication exceptions.
*
@ -19,16 +21,26 @@ namespace Symfony\Component\Security\Core\Exception;
*/
class AuthenticationException extends \RuntimeException implements \Serializable
{
private $extraInformation;
private $token;
public function getExtraInformation()
/**
* Get the token.
*
* @return TokenInterface
*/
public function getToken()
{
return $this->extraInformation;
return $this->token;
}
public function setExtraInformation($extraInformation)
/**
* Set the token.
*
* @param TokenInterface $token
*/
public function setToken(TokenInterface $token)
{
$this->extraInformation = $extraInformation;
$this->token = $token;
}
public function serialize()

View File

@ -34,7 +34,7 @@ class UserChecker implements UserCheckerInterface
if (!$user->isCredentialsNonExpired()) {
$ex = new CredentialsExpiredException('User credentials have expired.');
$ex->setExtraInformation($user);
$ex->setUser($user);
throw $ex;
}
}
@ -50,19 +50,19 @@ class UserChecker implements UserCheckerInterface
if (!$user->isAccountNonLocked()) {
$ex = new LockedException('User account is locked.');
$ex->setExtraInformation($user);
$ex->setUser($user);
throw $ex;
}
if (!$user->isEnabled()) {
throw new DisabledException('User account is disabled.');
$ex->setExtraInformation($user);
$ex->setUser($user);
throw $ex;
}
if (!$user->isAccountNonExpired()) {
$ex = new AccountExpiredException('User account has expired.');
$ex->setExtraInformation($user);
$ex->setUser($user);
throw $ex;
}
}

View File

@ -107,7 +107,7 @@ class ExceptionListener
try {
$insufficientAuthenticationException = new InsufficientAuthenticationException('Full authentication is required to access this resource.', 0, $exception);
$insufficientAuthenticationException->setExtraInformation($token);
$insufficientAuthenticationException->setToken($token);
$response = $this->startAuthentication($request, $insufficientAuthenticationException);
} catch (\Exception $e) {
$event->setException($e);

View File

@ -37,7 +37,7 @@ class AuthenticationProviderManagerTest extends \PHPUnit_Framework_TestCase
$manager->authenticate($token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'));
$this->fail();
} catch (ProviderNotFoundException $e) {
$this->assertSame($token, $e->getExtraInformation());
$this->assertSame($token, $e->getToken());
}
}
@ -51,7 +51,7 @@ class AuthenticationProviderManagerTest extends \PHPUnit_Framework_TestCase
$manager->authenticate($token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'));
$this->fail();
} catch (AccountStatusException $e) {
$this->assertSame($token, $e->getExtraInformation());
$this->assertSame($token, $e->getToken());
}
}
@ -65,7 +65,7 @@ class AuthenticationProviderManagerTest extends \PHPUnit_Framework_TestCase
$manager->authenticate($token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface'));
$this->fail();
} catch (AuthenticationException $e) {
$this->assertSame($token, $e->getExtraInformation());
$this->assertSame($token, $e->getToken());
}
}