Example #1
0
 public function handle(RequestConfiguration $requestConfiguration, View $view)
 {
     if ($view->getResponse()->getContent()) {
         return $view->getResponse();
     }
     return parent::handle($requestConfiguration, $view);
 }
 /**
  * Sign in users by pair username:password.
  *
  * @ApiDoc(
  *     views={"default", "user"},
  *     section="Security API",
  *     resource=true,
  *     resourceDescription="Sign in users by pair username:password.",
  *     statusCodes={
  *         200="Returned when successful",
  *         400="Returned when an error has occurred",
  *     }
  * )
  *
  * @Rest\Route("/sign-in", requirements={
  *     "_format": "json|xml"
  * })
  *
  * @Rest\RequestParam(name="username", requirements="[\w\-]+", nullable=false, description="Username")
  * @Rest\RequestParam(name="password", nullable=false, description="Password")
  *
  * @param ParamFetcherInterface $paramFetcher
  * @return View
  */
 public function postUserSignInAction(ParamFetcherInterface $paramFetcher)
 {
     $username = $paramFetcher->get('username');
     $password = $paramFetcher->get('password');
     /** @var EntityRepository $repository */
     $repository = $this->getDoctrine()->getManager()->getRepository('UserBundle:User');
     /** @var User $user */
     $user = $repository->findOneBy(['username' => $username]);
     if (!$user || !$this->validatePassword($user, $password)) {
         return new View(array('message' => 'User not found.'), 400);
     }
     if (!$user->isEnabled()) {
         return new View(array('message' => 'Account is disabled.'), 400);
     }
     if (!$user->isAccountNonLocked()) {
         return new View(array('message' => 'Account is locked.'), 400);
     }
     if (!$user->isAccountNonExpired()) {
         return new View(array('message' => 'Account is expired.'), 400);
     }
     if (!$user->isCredentialsNonExpired()) {
         return new View(array('message' => 'Credentials is expired.'), 400);
     }
     $this->generateToken($user);
     $this->getDoctrine()->getManager()->flush();
     $headers = array('Token' => $user->getApiToken(), 'ExpireAt' => $user->getApiTokenExpireAt()->format('c'), 'Username' => $user->getUsername());
     $view = new View(array_merge(array('user' => $user->getId()), $headers), 200, $headers);
     $this->setAuthInfoInCookie($headers, $view->getResponse(), $user->getApiTokenExpireAt());
     return $view;
 }
Example #3
0
 /**
  * @param ViewHandler   $handler
  * @param View          $view
  * @param Request       $request
  *
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function createResponse(ViewHandler $handler, View $view, Request $request)
 {
     $format = $view->getFormat() ?: $request->getRequestFormat();
     $data = $view->getData();
     if ($data instanceof Cursor) {
         $view->setData(iterator_to_array($data, false));
         $view->getResponse()->headers->set('X-Total-Count', $data->count());
         return $handler->createResponse($view, $request, $view->getFormat());
     }
     if ($data instanceof Form && Codes::HTTP_BAD_REQUEST === $view->getStatusCode()) {
         $view->setData($this->formatFormErrors($data));
         return $handler->createResponse($view, $request, $format);
     }
     return $handler->createResponse($view, $request, $format);
 }
 /**
  * Create the Response from the view
  *
  * @param View   $view
  * @param string $location
  * @param string $format
  *
  * @return Response
  */
 public function createRedirectResponse(View $view, $location, $format)
 {
     $content = null;
     $response = $view->getResponse();
     if ('html' === $format && isset($this->forceRedirects[$format])) {
         $redirect = new RedirectResponse($location);
         $content = $redirect->getContent();
         $response->setContent($content);
     }
     $code = isset($this->forceRedirects[$format]) ? $this->forceRedirects[$format] : $this->getStatusCode($view, $content);
     $response->setStatusCode($code);
     $response->headers->set('Location', $location);
     return $response;
 }
 /**
  * @param Response     $response
  * @param ParameterBag $parameterBag
  * @return bool|void
  */
 protected function doExecute(Response $response, ParameterBag $parameterBag)
 {
     /** @var Request $request */
     /** @var AbstractType $formType */
     /** @var object $entity */
     /** @var bool $cleanForm */
     /** @var bool $cleanRequestData */
     /** @var bool $getContent */
     /** @var array $formOptions */
     /** @var SerializationContext $serializationContext */
     /** @var \Closure $onPreValidation */
     /** @var \Closure $onPostValidation */
     /** @var \Closure $onPostPersist */
     /** @var \Closure $onSuccess */
     /** @var \Closure $onFailure  */
     $request = $parameterBag->get('request');
     $formType = $parameterBag->get('formType');
     $entity = $parameterBag->get('entity');
     $cleanForm = $parameterBag->get('cleanForm');
     $cleanRequestData = $parameterBag->get('cleanRequestData', true);
     $getContent = $parameterBag->get('getContent');
     $formOptions = $parameterBag->get('formOptions', array());
     $serializationContext = $parameterBag->get('serializationContext');
     $onPreValidation = $parameterBag->get('onPreValidation');
     $onPostValidation = $parameterBag->get('onPostValidation');
     $onPostPersist = $parameterBag->get('onPostPersist');
     $onSuccess = $parameterBag->get('onSuccess');
     $onFailure = $parameterBag->get('onFailure ');
     $view = new View();
     $httpResponse = $view->getResponse();
     $requestData = array_merge($request->request->all(), $request->files->all());
     if ($serializationContext) {
         $view->setSerializationContext($serializationContext);
     }
     $form = $this->getFormFactory()->createNamed(null, get_class($formType), $entity, array_merge(array('csrf_protection' => false), $formOptions));
     if ($cleanRequestData) {
         $requestData = $this->cleanRequestData($requestData, $form);
     }
     if ($cleanForm) {
         $this->cleanForm($requestData, $form);
     }
     $this->prepareFormCollections($request, $form);
     /**
      * Pre validation
      */
     $this->onPreValidation($request, $form, $entity, $httpResponse);
     if ($onPreValidation instanceof \Closure) {
         $onPreValidation($request, $form, $entity, $httpResponse);
     }
     if ($httpResponse->getStatusCode() != HttpResponse::HTTP_OK) {
         $response->response = $view;
         return true;
     }
     $form->submit($requestData);
     if ($form->isValid()) {
         if ($onPostValidation instanceof \Closure) {
             $onPostValidation($request, $form, $entity, $httpResponse);
             if ($httpResponse->getStatusCode() != HttpResponse::HTTP_OK) {
                 $response->response = $view;
                 return true;
             }
         }
         $isEditAction = $entity->getId();
         $statusCode = $isEditAction ? HttpResponse::HTTP_OK : HttpResponse::HTTP_CREATED;
         /** @var \Doctrine\Common\Persistence\ObjectManager $em */
         $em = $this->getDoctrine()->getManager();
         $em->persist($entity);
         if ($onPostPersist instanceof \Closure) {
             $onPostPersist($request, $form, $entity, $httpResponse);
         }
         $em->flush();
         $httpResponse->setStatusCode($statusCode);
         if ($isEditAction) {
             if ($getContent) {
                 $em->refresh($entity);
                 $view->setData($entity);
             }
         } else {
             $view->setData($entity->getId());
         }
         if ($onSuccess instanceof \Closure) {
             $onSuccess($request, $form, $entity, $httpResponse);
         }
         $response->response = $view;
         return true;
     }
     if ($onFailure instanceof \Closure) {
         $onFailure($request, $form, $entity, $httpResponse);
         $response->response = $view;
         return true;
     }
     $response->response = $form;
     return false;
 }
Example #6
0
 public function testGetStatusCodeFromResponse()
 {
     $view = new View();
     $this->assertNull($view->getStatusCode());
     $this->assertEquals(Response::HTTP_OK, $view->getResponse()->getStatusCode());
     // default code of the response.
 }