/**
* Logs calls and results of the authenticate() method of the Authentication Manager
*
* @Flow\After("within(Neos\Flow\Security\Authentication\AuthenticationManagerInterface) && method(.*->authenticate())")
* @param JoinPointInterface $joinPoint The current joinpoint
* @return mixed The result of the target method if it has not been intercepted
* @throws \Exception
*/
public function logManagerAuthenticate(JoinPointInterface $joinPoint)
{
if ($joinPoint->hasException()) {
$exception = $joinPoint->getException();
if (!$exception instanceof NoTokensAuthenticatedException) {
$this->securityLogger->log(sprintf('Authentication failed: "%s" #%d', $exception->getMessage(), $exception->getCode()), LOG_NOTICE);
}
throw $exception;
} elseif ($this->alreadyLoggedAuthenticateCall === false) {
/** @var AuthenticationManagerInterface $authenticationManager */
$authenticationManager = $joinPoint->getProxy();
if ($authenticationManager->getSecurityContext()->getAccount() !== null) {
$this->securityLogger->log(sprintf('Successfully re-authenticated tokens for account "%s"', $authenticationManager->getSecurityContext()->getAccount()->getAccountIdentifier()), LOG_INFO);
} else {
$this->securityLogger->log('No account authenticated', LOG_INFO);
}
$this->alreadyLoggedAuthenticateCall = true;
}
}