Request.class.php 3.01 KB
Newer Older
quentin.vrel's avatar
quentin.vrel committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
<?php
class Request {

    protected $controllerName;
    protected $uriParameters;
    protected $data;
    protected static $_instance;

    public static function getCurrentRequest(){
        if(is_null(self::$_instance)) {
            self::$_instance = new Request();  
          }
      
          return self::$_instance;
    }

   public function __construct() {
      $this->initBaseURI();
      $this->initControllerAndParametersFromURI();
      $this->initData();
   }

   // intialise baseURI
   // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php => __BASE_URI = /~luc.fabresse
   // e.g. http://localhost/CDAW/api.php => __BASE_URI = /CDAW
   protected function initBaseURI() {
      $this->baseURI = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
   }

   // intialise controllerName et uriParameters
   // controllerName contient chaîne 'default' ou le nom du controleur s'il est présent dans l'URI (la requête)
   // uriParameters contient un tableau vide ou un tableau contenant les paramètres passés dans l'URI (la requête)
   // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php
   //    => controllerName == 'default'
   //       uriParameters == []
   // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php/user/1
   //    => controllerName == 'user'
   //       uriParameters == [ 1 ]
   protected function initControllerAndParametersFromURI(){

        $prefix = $_SERVER['SCRIPT_NAME'];
        $uriParameters = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

        $i=0;
        while($i<strlen($prefix) && $i<strlen($uriParameters))
        if($prefix[$i]===$uriParameters[$i])
        $i++;

        $uriParameters = substr($uriParameters, $i);

        $uriParameters = trim($uriParameters, '/');
        $uriSegments = explode('/', $uriParameters);

        $this->controllerName = array_shift($uriSegments) ?: "default";
        $this->uriParameters = $uriSegments;
    }

   // ==============
   // Public API
   // ==============

    // retourne le name du controleur qui doit traiter la requête courante
    public function getControllerName() {
      return $this->controllerName;
   }

   public function getUriParams() {
      return $this->uriParameters;
   }

   public function initData() {
quentin.vrel's avatar
quentin.vrel committed
72
      if ($this->getHttpMethod() === 'PUT' || $this->getHttpMethod() === 'POST'){
quentin.vrel's avatar
quentin.vrel committed
73 74
         $jsondata=file_get_contents("php://input");
         $this->data = json_decode($jsondata, true);   
quentin.vrel's avatar
quentin.vrel committed
75 76 77 78 79 80 81 82 83 84 85 86 87
      }
         
   }
   

    // retourne la méthode HTTP utilisée dans la requête courante
    public function getHttpMethod() {
      return $_SERVER["REQUEST_METHOD"];
   }

   public function getData() {
      return $this->data;
   }
quentin.vrel's avatar
quentin.vrel committed
88 89 90 91 92 93 94 95 96 97 98 99 100
   // returns JWT token in Authorization header or throw an exception
   public function getJwtToken() {
      $headers = getallheaders();
      $autorization = $headers['Authorization'];
      $arr = explode(" ", $autorization);

      if(count($arr)<2)
         throw new Exception("Missing JWT token");

      $jwt_token = $arr[1];

      return $jwt_token;
   }
quentin.vrel's avatar
quentin.vrel committed
101 102 103 104

   

}