Request.class.php 2.9 KB
Newer Older
1 2 3
<?php
class Request {

thibaut-felten's avatar
thibaut-felten committed
4 5 6
   protected $controllerName;
   protected $uriParameters;
   protected static $request = NULL;
7
   protected $jsonReceived;
8

thibaut-felten's avatar
thibaut-felten committed
9 10 11 12 13 14
   public static function getCurrentRequest(){
      if(is_null(static::$request))
         static::$request = new static();

      return static::$request;
   }
15 16 17 18 19 20 21 22 23 24

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

   // 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() {
thibaut-felten's avatar
thibaut-felten committed
25 26
      $url = dirname($_SERVER['SCRIPT_NAME']);
      $this->baseURI = $url;
27 28 29 30 31 32 33 34 35 36 37 38
   }

   // 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(){
thibaut-felten's avatar
thibaut-felten committed
39 40
      $prefix = $_SERVER['SCRIPT_NAME'];
      $uriParameters = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
41
      
thibaut-felten's avatar
thibaut-felten committed
42 43 44 45 46 47 48 49 50 51 52 53
      $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;
      }
54 55 56 57 58 59 60 61 62 63

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

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

64 65 66 67
   public function getURIParams(){
      return $this->uriParameters;
   }

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

73 74 75 76 77 78 79
   // returns the decoded JSON content of the request
   public function jsonContent() {
      if(is_null($this->jsonReceived))
         $this->jsonReceived = json_decode(file_get_contents("php://input"));
      return $this->jsonReceived;
   }

80 81 82 83 84 85 86 87 88 89 90 91 92 93
   // 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;
   }

94
}