pixelhumain / GoGoCarto

This repo has been moved to https://gitlab.adullact.net/pixelhumain/GoGoCarto since 17/12/2018
GNU General Public License v3.0
44 stars 10 forks source link

Configuration des règles concernant l'API #28

Closed seballot closed 5 years ago

seballot commented 5 years ago

L'API qui permet de récupérer les éléments a des règles de protection qui sont en dur dans le code, et qu'il faudrait rendre configurable.

Ces règles sont dans le fichier ApiController

// allow ajax request from same host
    if ($request->isXmlHttpRequest() && $this->requestFromSameHost($request))
    {
      $isAdmin = $this->isUserAdmin();
      $includeContact = true;
    }
    else if ($token) // otherwise API is protected by user token 
    {
      $user = $em->getRepository('BiopenCoreBundle:User')->findOneByToken($token);
      if (!$user) return new Response("The token you provided does not correspond to any existing user. Please visit " . $this->generateUrl('biopen_api_ui', [], UrlGeneratorInterface::ABSOLUTE_URL)); 
      $isAdmin = false;
      $includeContact = false;
    } 
    else
    {      
      return new Response("You need to provide a token to access to this API. Please visit " . $this->generateUrl('biopen_api_ui', [], UrlGeneratorInterface::ABSOLUTE_URL)); 
    }    

En gros ça distingue deux cas :

L'idée serait de rendre ça configurable, pour choisir

  1. Si l'on veut protéger l'api par un token
  2. Si on autorise des domaines externes à accéder à l'API via des requetes ajax
  3. Si l'on transmet les contacts à travers l'api publique
  4. etc..

Pour le 2., il faut utiliser le header suivant pour autoriser les domaines distants : $result->headers->set('Access-Control-Allow-Origin', 'http://mydomain.fr'); On peut utiliser une wildcard (*) pour autoriser tout les domaines

Le code qui permet de générer cette page https://presdecheznous.fr/api/ est dans ApiController::apiUiAction