/**
  * Logs calls
  *
  * @Flow\After("method(PerfectIn\Api\Webservice\WebserviceCall->invoke())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint The current joinpoint
  */
 public function logFinishServiceCall(\TYPO3\Flow\Aop\JoinPointInterface $joinPoint)
 {
     $callIdentifier = $joinPoint->getProxy()->getClass() . '::' . $joinPoint->getProxy()->getMethod();
     if ($joinPoint->hasException()) {
         $this->logger->log($this->logIdentifier . ' - error - ' . $joinPoint->getException()->getMessage() . '(' . $joinPoint->getException()->getCode() . ')', LOG_ERR);
     } else {
         $this->logger->log($this->logIdentifier . ' - response - ' . $this->getLogMessageForVariable($joinPoint->getResult()), LOG_INFO);
     }
 }
 /**
  * Logs calls and results of the authenticate() method of the Authentication Manager
  *
  * @Flow\After("within(TYPO3\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;
     }
 }
 /**
  * Logs calls and results of decideOnResource()
  *
  * @Flow\AfterThrowing("method(TYPO3\Flow\Security\Authorization\AccessDecisionVoterManager->decideOnResource())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint
  * @throws \Exception
  * @return void
  */
 public function logResourceAccessDecisions(\TYPO3\Flow\Aop\JoinPointInterface $joinPoint)
 {
     $exception = $joinPoint->getException();
     $message = $exception->getMessage() . ' on resource "' . $joinPoint->getMethodArgument('resource') . '".';
     $this->securityLogger->log($message, \LOG_INFO);
     throw $exception;
 }