Request.class.php 3.27 KB
<?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()
    {
        if ($this->getHttpMethod() === 'PUT' || $this->getHttpMethod() === 'POST') {
            $jsondata=file_get_contents("php://input");
            $this->data = json_decode($jsondata, true);
        }
    }
   

    // 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;
    }
    // returns JWT token in Authorization header or throw an exception
    public function getJwtToken()
    {
        // Field names are case-insensitive : https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html
        $headers = array_change_key_case(getallheaders());
        $autorization = $headers['authorization'];
        $arr = explode(" ", $autorization);

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

        $jwt_token = $arr[1];

        return $jwt_token;
    }
}