decode() final public méthode

final public decode ( $data, $format )
Exemple #1
0
 public function deserialize($data, $type, $format, array $context = array())
 {
     if (!$type) {
         $temp = $this->serializer->decode($data, $format, $context);
         $type = isset($this->map[$temp['type']]) ? $this->map[$temp['type']] : 'Bangpound\\oEmbed\\Response\\Response';
     }
     return $this->serializer->deserialize($data, $type, $format, $context);
 }
Exemple #2
0
 /**
  * Process the client-side request and send response.
  *
  * @param string $class
  *   Defines a form class.
  *
  * @param callable $callback
  *   Defines a callback function.
  *
  * @return \Symfony\Component\HttpFoundation\JsonResponse
  *   Response represents an HTTP response in JSON format.
  */
 public function handler($class, $callback = NULL)
 {
     $response = $this->response();
     $request = $this->request();
     $output = array();
     $params = NULL;
     // Get the Request body and decode the JSON content.
     $content = $request->getContent();
     if ($this->isJson($content)) {
         $params = $this->serializer->decode($content, 'json');
     } else {
         $response->setStatusCode($response::HTTP_BAD_REQUEST);
     }
     // Submit the form.
     if ($request->getMethod() == 'POST' && $params) {
         $output = $this->submitForm($class, $params);
         // Success.
         if (isset($output['data'])) {
             // Execute pre-process callback, if provided.
             if (is_callable($callback)) {
                 $callback($output['data']);
             }
             $response->setStatusCode($response::HTTP_ACCEPTED);
         } elseif (isset($output['error'])) {
             $response->setStatusCode($response::HTTP_BAD_REQUEST);
         } else {
             $response->setStatusCode($response::HTTP_FORBIDDEN);
         }
     }
     // Return the response.
     return $response->setData($output);
 }
 /**
  * Test csrf protection of User Logout route.
  */
 public function testLogoutCsrfProtection()
 {
     $client = \Drupal::httpClient();
     $login_status_url = $this->getLoginStatusUrlString();
     $account = $this->drupalCreateUser();
     $name = $account->getUsername();
     $pass = $account->passRaw;
     $response = $this->loginRequest($name, $pass);
     $this->assertEquals(200, $response->getStatusCode());
     $result_data = $this->serializer->decode($response->getBody(), 'json');
     $logout_token = $result_data['logout_token'];
     // Test third party site posting to current site with logout request.
     // This should not logout the current user because it lacks the CSRF
     // token.
     $response = $this->logoutRequest('json');
     $this->assertEquals(403, $response->getStatusCode());
     // Ensure still logged in.
     $response = $client->get($login_status_url, ['cookies' => $this->cookies]);
     $this->assertHttpResponse($response, 200, UserAuthenticationController::LOGGED_IN);
     // Try with an incorrect token.
     $response = $this->logoutRequest('json', 'not-the-correct-token');
     $this->assertEquals(403, $response->getStatusCode());
     // Ensure still logged in.
     $response = $client->get($login_status_url, ['cookies' => $this->cookies]);
     $this->assertHttpResponse($response, 200, UserAuthenticationController::LOGGED_IN);
     // Try a logout request with correct token.
     $response = $this->logoutRequest('json', $logout_token);
     $this->assertEquals(204, $response->getStatusCode());
     // Ensure actually logged out.
     $response = $client->get($login_status_url, ['cookies' => $this->cookies]);
     $this->assertHttpResponse($response, 200, UserAuthenticationController::LOGGED_OUT);
 }
 /**
  * Decode tha data
  * @param string $req_obj
  * @return array
  */
 public function decodeData($req_obj)
 {
     //get serializer instance
     $serializer = new Serializer(array(), array('json' => new \Symfony\Component\Serializer\Encoder\JsonEncoder(), 'xml' => new \Symfony\Component\Serializer\Encoder\XmlEncoder()));
     $jsonContent = $serializer->decode($req_obj, 'json');
     return $jsonContent;
 }
 /**
  * Logs in a user.
  *
  * @param \Symfony\Component\HttpFoundation\Request $request
  *   The request.
  *
  * @return \Symfony\Component\HttpFoundation\Response
  *   A response which contains the ID and CSRF token.
  */
 public function login(Request $request)
 {
     $format = $this->getRequestFormat($request);
     $content = $request->getContent();
     $credentials = $this->serializer->decode($content, $format);
     if (!isset($credentials['name']) && !isset($credentials['pass'])) {
         throw new BadRequestHttpException('Missing credentials.');
     }
     if (!isset($credentials['name'])) {
         throw new BadRequestHttpException('Missing credentials.name.');
     }
     if (!isset($credentials['pass'])) {
         throw new BadRequestHttpException('Missing credentials.pass.');
     }
     $this->floodControl($request, $credentials['name']);
     if ($this->userIsBlocked($credentials['name'])) {
         throw new BadRequestHttpException('The user has not been activated or is blocked.');
     }
     if ($uid = $this->userAuth->authenticate($credentials['name'], $credentials['pass'])) {
         $this->flood->clear('user.http_login', $this->getLoginFloodIdentifier($request, $credentials['name']));
         /** @var \Drupal\user\UserInterface $user */
         $user = $this->userStorage->load($uid);
         $this->userLoginFinalize($user);
         // Send basic metadata about the logged in user.
         $response_data = [];
         if ($user->get('uid')->access('view', $user)) {
             $response_data['current_user']['uid'] = $user->id();
         }
         if ($user->get('roles')->access('view', $user)) {
             $response_data['current_user']['roles'] = $user->getRoles();
         }
         if ($user->get('name')->access('view', $user)) {
             $response_data['current_user']['name'] = $user->getAccountName();
         }
         $response_data['csrf_token'] = $this->csrfToken->get('rest');
         $logout_route = $this->routeProvider->getRouteByName('user.logout.http');
         // Trim '/' off path to match \Drupal\Core\Access\CsrfAccessCheck.
         $logout_path = ltrim($logout_route->getPath(), '/');
         $response_data['logout_token'] = $this->csrfToken->get($logout_path);
         $encoded_response_data = $this->serializer->encode($response_data, $format);
         return new Response($encoded_response_data);
     }
     $flood_config = $this->config('user.flood');
     if ($identifier = $this->getLoginFloodIdentifier($request, $credentials['name'])) {
         $this->flood->register('user.http_login', $flood_config->get('user_window'), $identifier);
     }
     // Always register an IP-based failed login event.
     $this->flood->register('user.failed_login_ip', $flood_config->get('ip_window'));
     throw new BadRequestHttpException('Sorry, unrecognized username or password.');
 }
Exemple #6
0
 public function testDecode()
 {
     $serializer = new Serializer(array(), array('json' => new JsonEncoder()));
     $data = array('foo', array(5, 3));
     $result = $serializer->decode(json_encode($data), 'json');
     $this->assertEquals($data, $result);
 }
 /**
  * @param string $string
  * @param string $format
  * @param array  $context
  *
  * @return array
  */
 public function decode($string, $format = null, array $context = [])
 {
     $array = $this->serializer->decode($string, $context['encoding'], $context);
     $array = $this->decodeValue($array);
     return $array;
 }
 /**
  * Displays a form to edit an existing Products product.
  *
  * @Security("has_role('ROLE_ACCOUNTANT')")
  * @Route("/{id}/edit", name="products_edit")
  * @Method({"GET", "PUT"})
  * @Template()
  */
 public function editAction(Request $request, $id)
 {
     $em = $this->getDoctrine()->getManager();
     $product = $em->getRepository('MeVisaERPBundle:Products')->find($id);
     if (!$product) {
         throw $this->createNotFoundException('Unable to find Products product.');
     }
     if (!is_array($product->getRequiredDocuments())) {
         $encoders = array(new XmlEncoder(), new JsonEncoder());
         $normalizers = array(new ObjectNormalizer());
         $serializer = new Serializer($normalizers, $encoders);
         $product->setRequiredDocuments($serializer->decode($product->getRequiredDocuments(), 'json'));
     }
     $editForm = $this->createEditForm($product);
     $editForm->handleRequest($request);
     if ($editForm->isSubmitted()) {
         if ($editForm->isValid()) {
             $productPrices = $product->getPricing();
             foreach ($productPrices as $price) {
                 if (empty($price->getId())) {
                     $product->addPricing($price);
                 } else {
                     $em->refresh($price);
                 }
             }
             $em->flush();
             return $this->redirect($this->generateUrl('products_show', array('id' => $id)));
         }
     }
     return array('product' => $product, 'product_form' => $editForm->createView());
 }
Exemple #9
0
 /**
  * @inheritdoc
  */
 protected function serialize($data)
 {
     return new ParameterBag((array) $this->serializer->decode($data, 'xml'));
 }
 /**
  * Parses JSON into a PHP array.
  *
  * This method, when supplied with a JSON stream, converts JSON
  * into a PHP array structure.
  *
  * @param string $jsonFormatedString The string containing JSON formatted text.
  *
  * @return array The JSON string converted into a PHP array.
  *
  * @api
  */
 public function deserialize(string $jsonFormatedString) : array
 {
     return $this->serializer->decode($jsonFormatedString, static::FORMAT);
 }
 /**
  * @param string $string
  * @param null   $format
  * @param array  $context
  *
  * @return mixed
  */
 public function decode($string, $format = null, array $context = [])
 {
     return $this->serializer->decode($string, $context['encoding'], $context);
 }
 /**
  * {@inheritdoc}
  */
 public function importContent($module)
 {
     $created = array();
     $folder = drupal_get_path('module', $module) . "/content";
     if (file_exists($folder)) {
         $file_map = array();
         foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
             $reflection = new \ReflectionClass($entity_type->getClass());
             // We are only interested in importing content entities.
             if ($reflection->implementsInterface('\\Drupal\\Core\\Config\\Entity\\ConfigEntityInterface')) {
                 continue;
             }
             if (!file_exists($folder . '/' . $entity_type_id)) {
                 continue;
             }
             $files = $this->scanner()->scan($folder . '/' . $entity_type_id);
             // Default content uses drupal.org as domain.
             // @todo Make this use a uri like default-content:.
             $this->linkManager->setLinkDomain(static::LINK_DOMAIN);
             // Parse all of the files and sort them in order of dependency.
             foreach ($files as $file) {
                 $contents = $this->parseFile($file);
                 // Decode the file contents.
                 $decoded = $this->serializer->decode($contents, 'hal_json');
                 // Get the link to this entity.
                 $self = $decoded['_links']['self']['href'];
                 // Throw an exception when this URL already exists.
                 if (isset($file_map[$self])) {
                     $args = array('@href' => $self, '@first' => $file_map[$self]->uri, '@second' => $file->uri);
                     // Reset link domain.
                     $this->linkManager->setLinkDomain(FALSE);
                     throw new \Exception(SafeMarkup::format('Default content with href @href exists twice: @first @second', $args));
                 }
                 // Store the entity type with the file.
                 $file->entity_type_id = $entity_type_id;
                 // Store the file in the file map.
                 $file_map[$self] = $file;
                 // Create a vertex for the graph.
                 $vertex = $this->getVertex($self);
                 $this->graph[$vertex->link]['edges'] = [];
                 if (empty($decoded['_embedded'])) {
                     // No dependencies to resolve.
                     continue;
                 }
                 // Here we need to resolve our dependencies;
                 foreach ($decoded['_embedded'] as $embedded) {
                     foreach ($embedded as $item) {
                         $edge = $this->getVertex($item['_links']['self']['href']);
                         $this->graph[$vertex->link]['edges'][$edge->link] = TRUE;
                     }
                 }
             }
         }
         // @todo what if no dependencies?
         $sorted = $this->sortTree($this->graph);
         foreach ($sorted as $link => $details) {
             if (!empty($file_map[$link])) {
                 $file = $file_map[$link];
                 $entity_type_id = $file->entity_type_id;
                 $resource = $this->resourcePluginManager->getInstance(array('id' => 'entity:' . $entity_type_id));
                 $definition = $resource->getPluginDefinition();
                 $contents = $this->parseFile($file);
                 $class = $definition['serialization_class'];
                 $entity = $this->serializer->deserialize($contents, $class, 'hal_json', array('request_method' => 'POST'));
                 $entity->enforceIsNew(TRUE);
                 $entity->save();
                 $created[$entity->uuid()] = $entity;
             }
         }
         $this->eventDispatcher->dispatch(DefaultContentEvents::IMPORT, new ImportEvent($created, $module));
     }
     // Reset the tree.
     $this->resetTree();
     // Reset link domain.
     $this->linkManager->setLinkDomain(FALSE);
     return $created;
 }
 /**
  * Fonction pour télécharger les informations d'un livre
  * 
  * @param string $isbn ISBN
  * @return array Livre
  * @throws \Exception
  */
 private function downloadInfos($isbn)
 {
     $serializer = new Serializer(array(), array(new XmlEncoder()));
     // Récupération du livre
     $url = "http://isbndb.com/api/books.xml?access_key=45L5NTHL&index1=isbn&value1=" . $isbn;
     if (!($reponse = file_get_contents($url))) {
         throw new \Exception('Impossible de télécharger les résultats !');
     }
     if (!($book = $serializer->decode($reponse, 'xml')['BookList']['BookData'])) {
         throw new \Exception('Le livre n\'a pas été trouvé : ' . $isbn);
     }
     return $book;
 }