예제 #1
0
 /**
  * @Template
  * @param Request $request
  * @param string $procedureId
  * @return array|Response
  */
 public function sendChallengeAction(Request $request, $procedureId)
 {
     $this->denyAccessUnlessGranted(['ROLE_RA']);
     $logger = $this->get('ra.procedure_logger')->forProcedure($procedureId);
     $logger->notice('Received request for Send SMS Challenge page');
     if (!$this->getVettingService()->hasProcedure($procedureId)) {
         $logger->notice(sprintf('Vetting procedure "%s" not found', $procedureId));
         throw new NotFoundHttpException(sprintf('Vetting procedure "%s" not found', $procedureId));
     }
     $command = new SendSmsChallengeCommand();
     $form = $this->createForm('ra_send_sms_challenge', $command)->handleRequest($request);
     $vettingService = $this->getVettingService();
     $phoneNumber = InternationalPhoneNumber::fromStringFormat($vettingService->getSecondFactorIdentifier($procedureId));
     $otpRequestsRemaining = $vettingService->getSmsOtpRequestsRemainingCount();
     $maximumOtpRequests = $vettingService->getSmsMaximumOtpRequestsCount();
     $viewVariables = ['otpRequestsRemaining' => $otpRequestsRemaining, 'maximumOtpRequests' => $maximumOtpRequests];
     if (!$form->isValid()) {
         $logger->notice('Form has not been submitted, not sending SMS, rendering Send SMS Challenge page');
         return array_merge($viewVariables, ['phoneNumber' => $phoneNumber, 'form' => $form->createView()]);
     }
     $logger->notice('Sending of SMS Challenge has been requested, sending OTP via SMS');
     if ($vettingService->sendSmsChallenge($procedureId, $command)) {
         $logger->notice('SMS Challenge successfully sent, redirecting to Proof of Possession page to verify challenge');
         return $this->redirectToRoute('ra_vetting_sms_prove_possession', ['procedureId' => $procedureId]);
     }
     $form->addError(new FormError('ra.sms_send_challenge.send_sms_challenge_failed'));
     $logger->notice('SMS Challenge could not be sent, added error to page to notify user and re-rendering send challenge page');
     return array_merge($viewVariables, ['phoneNumber' => $phoneNumber, 'form' => $form->createView()]);
 }
 /**
  * @test
  * @dataProvider invalid_phone_numbers
  * @expectedException \Surfnet\StepupBundle\Value\Exception\InvalidPhoneNumberFormatException
  * @group value
  *
  * @param mixed $invalidPhoneNumber
  */
 public function it_rejects_invalid_phone_numbers($invalidPhoneNumber)
 {
     InternationalPhoneNumber::fromStringFormat($invalidPhoneNumber);
 }
예제 #3
0
 /**
  * @param string $procedureId
  * @param SendSmsChallengeCommand $command
  * @return bool
  * @throws UnknownVettingProcedureException
  * @throws DomainException
  */
 public function sendSmsChallenge($procedureId, SendSmsChallengeCommand $command)
 {
     $procedure = $this->getProcedure($procedureId);
     $phoneNumber = InternationalPhoneNumber::fromStringFormat($procedure->getSecondFactor()->secondFactorIdentifier);
     $command->phoneNumber = $phoneNumber;
     $command->body = $this->translator->trans('ra.vetting.sms.challenge_body');
     $command->identity = $procedure->getSecondFactor()->identityId;
     $command->institution = $procedure->getSecondFactor()->institution;
     return $this->smsSecondFactorService->sendChallenge($command);
 }