/**
  * @param Token $token
  * @return void
  */
 public function createAction(Token $token = NULL)
 {
     if ($token === NULL) {
         $this->addFlashMessage('The activation link is not valid.', '', Message::SEVERITY_ERROR);
         $this->forward('createError');
     }
     $user = $token->getMeta()['user'];
     $result = $this->crowdClient->addUser($user->getFirstname(), $user->getLastname(), $user->getEmail(), $user->getUsername(), $user->getPassword());
     if (!$result->hasErrors()) {
         $this->addFlashMessage('Your account was created successfully. You can now sing in with your credentials.', 'Account created', Message::SEVERITY_OK);
         $this->redirect('index');
     } else {
         $error = $result->getFirstError();
         $this->addFlashMessage($error->getMessage(), $error->getTitle(), Message::SEVERITY_ERROR);
         $this->forward('createError');
     }
 }
 /**
  * Sends an activation mail for $token to the given $recipientAddress.
  *
  * The mail is built and sent according to the configuration given in the preset assigned to the $token.
  *
  * @param string $recipientAddress
  * @param Token $token
  * @param array $additionalTemplateVariables
  * @return int
  */
 public function sendActivationMail($recipientAddress, Token $token, array $additionalTemplateVariables = [])
 {
     $preset = $token->getPreset();
     $activationLink = $this->getActivationLink($token);
     $mail = new Message();
     $mail->setFrom([$preset['mail']['from']['address'] => $preset['mail']['from']['name']])->setTo($recipientAddress)->setSubject($preset['mail']['subject']);
     $templateVariables = array_merge(['activationLink' => $activationLink, 'recipientAddress' => $recipientAddress, 'token' => $token, 'meta' => $token->getMeta()], $additionalTemplateVariables);
     $this->fluidView->setTemplatePathAndFilename($preset['mail']['message']['plaintext']);
     $this->fluidView->assignMultiple($templateVariables);
     $mail->setBody($this->fluidView->render(), 'text/plain');
     if (isset($preset['mail']['html'])) {
         $this->fluidView->setTemplatePathAndFilename($preset['mail']['message']['html']);
         $this->fluidView->assignMultiple($templateVariables);
         $mail->setBody($this->fluidView->render(), 'text/html');
     }
     return $mail->send();
 }
 /**
  * @param Token $token
  * @return void
  */
 public function onetimeLoginAction(Token $token)
 {
     $username = $token->getMeta()['name'];
     /** @var $account \TYPO3\Flow\Security\Account */
     $account = NULL;
     $providerName = $this->authenticationProviderName;
     $accountRepository = $this->accountRepository;
     $this->securityContext->withoutAuthorizationChecks(function () use($username, $providerName, $accountRepository, &$account) {
         $account = $accountRepository->findActiveByAccountIdentifierAndAuthenticationProviderName($username, $providerName);
     });
     foreach ($this->securityContext->getAuthenticationTokens() as $authenticationToken) {
         if ($authenticationToken->getAuthenticationProviderName() === $providerName) {
             $authenticationToken->setAuthenticationStatus(TokenInterface::AUTHENTICATION_SUCCESSFUL);
             $authenticationToken->setAccount($account);
             break;
         }
     }
     $this->redirect('resetForm');
 }