public function testDeleteHeader()
 {
     $this->object->setHeader('Sample', 'value');
     $this->assertThat($this->object->getHeader('sample'), $this->equalTo('value'));
     $this->object->deleteHeader('Sample');
     $this->assertThat($this->object->getHeader('sample'), $this->equalTo(null));
 }
 /**
  * @param string $message Message.
  * @param int $code Error code.
  * @param mixed $customMessages Additional information about error.
  *
  * @todo определиться с $customMessages: это mixed или array?
  */
 public function __construct($message, $code = self::ERR_CRITICAL, $customMessages = null)
 {
     $this->response = E()->getResponse();
     if (isset($customMessages)) {
         if (!is_array($customMessages)) {
             $this->customMessages = array($customMessages);
         } else {
             $this->customMessages = $customMessages;
         }
     }
     if ($code == self::ERR_LANG) {
         $this->response->setStatus(503);
         $this->response->setHeader('Retry-After', 20);
         $message = translate($message, E()->getLanguage()->getDefault());
     } elseif ($code == self::ERR_403) {
         $this->response->setStatus(403);
         $message = translate($message, E()->getLanguage()->getCurrent());
     } elseif ($code == self::ERR_404) {
         $this->response->setStatus(404);
         $message = translate($message, E()->getLanguage()->getCurrent());
     } elseif ($code != self::ERR_DB) {
         $message = translate($message, E()->getLanguage()->getCurrent());
     }
     $this->backtrace = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT, 5);
     parent::__construct($message, $code);
 }
Example #3
0
 public static function dispatch()
 {
     $url = new Url();
     $uri = $url->getPath();
     foreach (array_reverse(self::$routes, true) as $route => $class) {
         if (preg_match("~^{$route}\$~", $uri, $params)) {
             Router::$current = $class;
             $return = call_user_func_array(array('Controller', 'dispatch'), array_merge(array($class), array_slice($params, 1)));
             if (!(false === $return)) {
                 $vars = get_class_vars($class);
                 $type = 'text/html';
                 if (isset($vars['type'])) {
                     $type = $vars['type'];
                 }
                 # PHP >= 5.3
                 # if ( isset($class::$type) )
                 #     $type = $class::$type;
                 //Response::setHeader('Content-Type', 'application/xhtml+xml');
                 Response::setHeader('Content-Type', "{$type};charset=UTF-8");
                 Response::setBody($class, $return);
                 return;
             }
             Router::$current = null;
         }
     }
     if (Response::getHttpResponseCode() == 200) {
         $class = 'Error404';
         $return = Controller::dispatch($class);
         Response::setHeader('Content-Type', 'text/html;charset=UTF-8');
         Response::setBody($class, $return);
         //Response::setHeader('HTTP/1.0 404 Not Found');
         //Response::setHttpResponseCode(404);
         //Response::setBody('404', 'Error 404');
     }
 }
Example #4
0
 public static function instance($className, $args = array())
 {
     global $root;
     settype($className, 'string');
     settype($args, 'array');
     $fileName = str_replace('_', DIRECTORY_SEPARATOR, $className);
     if (!is_readable("{$root}/bin/{$fileName}.php")) {
         return false;
     }
     include_once "{$root}/bin/{$fileName}.php";
     if (!class_exists($className, false)) {
         return false;
     }
     $reflection = new ReflectionClass($className);
     if ($reflection->getParentClass()->getName() != 'WebBase') {
         return false;
     }
     if (null === self::$match) {
         self::$match = $className;
     }
     $controller = call_user_func(array(&$reflection, 'newInstance'), $args);
     if ($controller->type && !empty($controller->type) && Response::canSendHeaders()) {
         Response::setHeader('Content-Type', $controller->type, true);
     }
     if (Request::isPost() && method_exists($controller, 'submit')) {
         $controller->submit();
     }
     if (Response::canSendHeaders()) {
         Response::sendResponse();
     }
     if (method_exists($controller, 'dispatch')) {
         $controller->dispatch();
     }
     return true;
 }
Example #5
0
 protected function getCurlResponse(Request $curl, $source)
 {
     $cresp = new Response();
     $header = substr($source, 0, $curl->getHeaderSize());
     $source = substr($source, $curl->getHeaderSize());
     $cresp->setHeader($header)->setUrl($curl->getLastUrl())->setHeaderSize($curl->getHeaderSize())->setResponse($source)->setStatusCode($curl->getStatusCode());
     return $cresp;
 }
Example #6
0
 /**
  * Sets response headers for a file sending
  * 
  * @param array $params
  * @return void
  */
 private function setFileHeaders($params = array())
 {
     $disposition = $params['disposition'];
     if (isset($params['filename'])) {
         $disposition .= '; filename=' . $params['filename'];
     }
     $headers = array('Content-Length' => $params['length'], 'Content-Type' => $params['type'], 'Content-Disposition' => $disposition, 'Content-Transfer-Encoding' => 'binary');
     foreach ($headers as $k => $v) {
         $this->response->setHeader($k, $v);
     }
 }
Example #7
0
 protected function _auth($user, $pass)
 {
     if (!Session::exists("auth")) {
         $auth = Request::auth();
         if (is_null($auth) || $auth["user"] !== $user || $auth["pass"] !== $pass) {
             Response::setHeader('WWW-Authenticate: Basic realm="' . Config::$realm . '"');
             return false;
         }
         Session::set("auth", true);
     }
     return true;
 }
Example #8
0
 public function getResponse()
 {
     $headers = array('X-Shop: ' . $this->shopId, 'X-Key: ' . $this->apiKey);
     $content = json_encode($this->data);
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $this->apiUrl . '/' . $this->resource . $this->getQueryString());
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     curl_setopt($ch, CURLOPT_HEADER, true);
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->type);
     if ($this->type === 'POST') {
         curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
     }
     $response = curl_exec($ch);
     $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
     $header = substr($response, 0, $header_size);
     $jsonBody = substr($response, $header_size);
     $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
     $error = curl_error($ch);
     curl_close($ch);
     $response = new Response();
     if ($error) {
         $response->addError(new Error($code, $error));
         return $response;
     }
     if (!preg_match("/2../", $code)) {
         $body = json_decode($jsonBody, true);
         if (isset($body['errors'])) {
             foreach ($body['errors'] as $error) {
                 $response->addError(new Error($error['code'], $error['description']));
             }
             return $response;
         } else {
             $response->addError(new Error($code, 'Unknown error.'));
             return $response;
         }
     }
     $response->setHttpCode($code);
     $response->setHeader($header);
     $response->setJsonBody($jsonBody);
     return $response;
 }
Example #9
0
 private function set_etag_headers($text)
 {
     $this->response->setHeader('ETag', md5($text));
     $this->logger->debug(sprintf('[Medick] >> ETag set to %s.', md5($text)));
     // get around PHP session
     $this->response->setHeader('Cache-Control', null, false);
     $this->response->setHeader('Expires', null, false);
     $this->response->setHeader('Pragma', null, false);
 }
Example #10
0
 /**
  * The return data type.
  *
  * @param array  $data
  * @param string $format
  * @param string $ContentType
  *
  * @return string
  */
 public function wrapResponseOutput($data, $format = 'json', $ContentType = 'application')
 {
     Response::setHeader('Content-type', $ContentType . '/' . $format);
     if ($format == 'xml') {
         return Tools::xmlEncode($data);
     } else {
         return json_encode($data);
     }
 }
Example #11
0
 static function challenge()
 {
     $response = new Response('Please provide your credentials.', Response::UNAUTHORIZED);
     $response->setHeader('WWW-Authenticate', 'Basic realm="' . self::$realm . '"');
     die($response);
 }
Example #12
0
 /**
  * Redirect to a new location
  *
  * @param string $location 
  * @param array $options 
  * @return void
  */
 public function redirect($location, $status = 302)
 {
     $this->response->setStatus($status);
     $this->response->setHeader('Location: ' . $location);
     $this->response->finish();
 }
Example #13
0
 public function __invoke(Request $request, Response $response, ...$args)
 {
     if ($request->getMethod() !== "GET") {
         $response->setStatus(HTTP_STATUS["METHOD_NOT_ALLOWED"]);
         $response->setHeader("Allow", "GET");
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     if ($request->getProtocolVersion() !== "1.1") {
         $response->setStatus(HTTP_STATUS["HTTP_VERSION_NOT_SUPPORTED"]);
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     $body = $request->getBody();
     if (!$body instanceof NullBody) {
         $response->setStatus(HTTP_STATUS["BAD_REQUEST"]);
         $response->setReason("Bad Request: Entity body disallowed for websocket endpoint");
         $response->setHeader("Connection", "close");
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     $hasUpgradeWebsocket = false;
     foreach ($request->getHeaderArray("Upgrade") as $value) {
         if (strcasecmp($value, "websocket") === 0) {
             $hasUpgradeWebsocket = true;
             break;
         }
     }
     if (empty($hasUpgradeWebsocket)) {
         $response->setStatus(HTTP_STATUS["UPGRADE_REQUIRED"]);
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     $hasConnectionUpgrade = false;
     foreach ($request->getHeaderArray("Connection") as $value) {
         $values = array_map("trim", explode(",", $value));
         foreach ($values as $token) {
             if (strcasecmp($token, "Upgrade") === 0) {
                 $hasConnectionUpgrade = true;
                 break;
             }
         }
     }
     if (empty($hasConnectionUpgrade)) {
         $response->setStatus(HTTP_STATUS["UPGRADE_REQUIRED"]);
         $response->setReason("Bad Request: \"Connection: Upgrade\" header required");
         $response->setHeader("Upgrade", "websocket");
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     if (!($acceptKey = $request->getHeader("Sec-Websocket-Key"))) {
         $response->setStatus(HTTP_STATUS["BAD_REQUEST"]);
         $response->setReason("Bad Request: \"Sec-Websocket-Key\" header required");
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     if (!in_array("13", $request->getHeaderArray("Sec-Websocket-Version"))) {
         $response->setStatus(HTTP_STATUS["BAD_REQUEST"]);
         $response->setReason("Bad Request: Requested Websocket version unavailable");
         $response->setHeader("Sec-WebSocket-Version", "13");
         $response->setHeader("Aerys-Generic-Response", "enable");
         $response->end();
         return;
     }
     $handshaker = new Handshake($response, $acceptKey);
     $onHandshakeResult = $this->application->onHandshake($request, $handshaker, ...$args);
     if ($onHandshakeResult instanceof \Generator) {
         $onHandshakeResult = (yield from $onHandshakeResult);
     }
     $request->setLocalVar("aerys.websocket", $onHandshakeResult);
     $handshaker->end();
 }
Example #14
0
 public function delete($params)
 {
     if (PatientRepo::delete($params['id_patient']) !== FALSE) {
         $_status = 'success';
         $_title = 'Patient supprimé!';
         $_message = 'Le patient a bien été supprimé de la base de données!';
         if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
             Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
         } else {
             $response = new Response();
             $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Patients.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
             $response->send();
         }
     } else {
         $_status = 'error';
         $_title = 'Erreur de suppression!';
         $_message = 'Erreur lors de la suppression. Réessayez!';
         if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
             Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
         } else {
             $response = new Response();
             $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Patients.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
             $response->send();
         }
     }
 }
Example #15
0
 public function testSetContentTypeHeader()
 {
     $response = new Response(200);
     $response->setHeader('Content-type', 'text/html');
     assertThat($this->readAttribute($response, 'headers'), is(equalTo(['Content-type' => 'text/html'])));
 }
Example #16
0
 /**
  * Sets the HTTP1.0 Pragma header on the response if the no-cache option
  * has been specified to attempt compatibility with older browsers.
  */
 protected function setPragma()
 {
     if (isset($this->parts["no-cache"])) {
         $this->response->setHeader("Pragma", "no-cache");
     }
 }
 public function respond(Response $response)
 {
     $response->clean();
     $response->setHeader('Location: ' . $this->url, 301);
     $response->flush();
 }
Example #18
0
 public function redirect($location = '', $status = 302)
 {
     if (substr($location, 0, 4) != 'http') {
         $location = $this->location() . $location;
     }
     Response::setHeader('Location', $location, $status);
     return '<html><head><meta http-equiv="refresh" content="0; url=' . $location . '" /></head></html>';
 }
 public function __construct($path)
 {
     parent::setHeader('Location', $path);
     return parent::sendHeaders();
 }
Example #20
0
 /**
  * Dispatch the router
  *
  * @param Request  $req  Representation the HTTP request to process
  * @param Response $resp Response object to populate with the controller's output
  * @return void
  */
 public function dispatch(Request $req, Response $resp)
 {
     if ($this->options['dirmatch'] == 'ignore') {
         $path = '/' . trim($req->getPath(), '/');
     } elseif ($this->options['dirmatch'] == 'redirect' and substr($req->getPath(), -1, 1) === '/' and $req->getPath() !== '/') {
         $resp->setStatus(301);
         $resp->setHeader('Location', rtrim($req->getPath(), '/'));
         return;
     } else {
         $path = $req->getPath();
     }
     $method = strtolower($req->getMethod());
     $patterns = $this->patterns;
     $controller = null;
     $allowedmethods = array();
     foreach ($this->routes as $pattern => $dest) {
         $pattern = preg_replace_callback('/\\:(\\w+)/', function ($m) use($patterns) {
             return isset($patterns[$m[1]]) ? '(?<' . $m[1] . '>' . $patterns[$m[1]] . ')' : $m[0];
         }, $pattern);
         $pattern = '~^' . str_replace('~', '\\~', $pattern) . '$~' . ($this->options['matchcase'] ? '' : 'i');
         if (preg_match($pattern, $path, $m)) {
             // Handle naive redirects
             if (preg_match('/^(\\/|https?\\:\\/\\/)/i', $dest)) {
                 $dest = preg_replace_callback('/\\{\\{(\\w+)\\}\\}/', function ($m_dest) use($m) {
                     return isset($m[$m_dest[0]]) ? $m[$m_dest[0]] : $m[0];
                 }, $dest);
                 $resp->setStatus(301);
                 $resp->setHeader('Location', $dest);
                 return;
             }
             // Find applicable controller class
             if (!($controllerclass = $this->controllerClass($dest))) {
                 continue;
             }
             // If controller does not support the request method, record the methods it does support (so if no controller is found that can handle the request, an unsupported method error can be returned), then proceed to next route
             $availablemethods = array_intersect($controllerclass::getSupportedMethods(), $this->options['validmethods']);
             if (!in_array($method, $availablemethods)) {
                 $allowedmethods = array_merge($allowedmethods, $availablemethods);
                 continue;
             }
             // Extract and index the URL slugs
             foreach ($m as $key => $value) {
                 if (is_int($key)) {
                     unset($m[$key]);
                 }
             }
             $urlargs = $m;
             // Dispatch the controller.  If controller throws RouteRejectedException (either in contructor or verb method) treat the route as unmatched and attempt to find an alternative
             try {
                 $controller = new $controllerclass($this->di, $req, $resp, $urlargs);
                 if (!method_exists($controller, $method)) {
                     $method = 'all';
                 }
                 $controller->dispatch($method);
             } catch (RouteRejectedException $e) {
                 // TODO: Also consider resetting the $resp object to a blank state
                 $controller = null;
                 continue;
             }
             break;
         }
     }
     // If no controller was found to handle the request, assign a default one
     if (!$controller) {
         if ($allowedmethods) {
             $controllerclass = $this->getDefaultRouteControllerClass('unsupportedmethod');
             $urlargs = array('allowedmethods' => $allowedmethods);
         } else {
             $controllerclass = $this->getDefaultRouteControllerClass('noroute');
             $urlargs = array();
         }
         $controller = new $controllerclass($this->di, $req, $resp, $urlargs);
         if (!method_exists($controller, $method)) {
             $method = 'all';
         }
         $controller->{$method}();
     }
 }
Example #21
0
 private function sendPreAppOptionsResponse(Request $request, Response $response)
 {
     $response->setStatus(HTTP_STATUS["OK"]);
     $response->setHeader("Allow", implode(",", $this->options->allowedMethods));
     $response->end(null);
 }
Example #22
0
 protected function render_json($text, $status = NULL)
 {
     include_once 'action/view/JSON.php';
     $this->response->setHeader('X-JSON', '(' . JSON::encode($text) . ')');
     $this->render_text('', $status);
 }
Example #23
0
 public function update($params)
 {
     if (StaticRepo::checkParam($params['Id'], 'Numeric') && StaticRepo::checkParam($params['Prenom'], 'String45') && StaticRepo::checkParam($params['Nom'], 'String45')) {
         // si la modification réussit
         if (MedecinRepo::update($params['Id'], $params['Nom'], $params['Prenom'])) {
             $_status = 'success';
             $_title = 'Médecin modifié!';
             $_message = 'Le médecin <strong>' . $params['Prenom'] . ' ' . strtoupper($params['Nom']) . '</strong> a bien été modifié! ';
             if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
                 Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
             } else {
                 $response = new Response();
                 $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Medecins.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
                 $response->send();
             }
         } else {
             $_status = 'error';
             $_title = 'Erreur de modification!';
             $_message = 'La modification a échoué. Réessayez!';
             if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
                 Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
             } else {
                 $response = new Response();
                 $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Medecins.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
                 $response->send();
             }
         }
         // erreur de params
     } else {
         $_status = 'error';
         $_title = 'Erreur de paramètres!';
         $_message = 'Un des champs est incorrect. Réessayez!';
         if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
             Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
         } else {
             $response = new Response();
             $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Medecins.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
             $response->send();
         }
     }
 }
Example #24
0
 public function update($params)
 {
     // si params ok
     if (StaticRepo::checkParam($params['id_consultation'], 'Numeric') && StaticRepo::checkParam($params['jour'], 'Date') && StaticRepo::checkParam($params['heure'], 'Heure') && StaticRepo::checkParam($params['Duree'], 'Heure')) {
         $params['date'] = DateTime::createFromFormat('d/m/Y H:i', $params['jour'] . ' ' . $params['heure']);
         $params['dureeTime'] = $params['Duree'] . ':00';
         // var_dump($params['dureeTime']);
         if (RDVRepo::updateDateTime($params['id_consultation'], $params['date']->format('Y-m-d H:i:00'), $params['dureeTime']) !== FALSE) {
             $_status = 'success';
             $_title = 'Modification effectuée!';
             $_message = 'La consultation du ' . $params['date']->format('d/m/Y') . ' à ' . $params['heure'] . ' a bien été mise à jour.';
             if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
                 Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
             } else {
                 $response = new Response();
                 $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Consultations.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
                 $response->send();
             }
         } else {
             $_status = 'error';
             $_title = 'Erreur lors de la modifiction!';
             $_message = 'La consultation n\'a pas pu être modifiée!';
             if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
                 Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
             } else {
                 $response = new Response();
                 $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Consultations.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
                 $response->send();
             }
         }
     } else {
         $_status = 'error';
         $_title = 'Erreur de paramètre!';
         $_message = 'Date Incorrecte!';
         if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
             Response::quickResponse(200, json_encode(['status' => $_status, 'title' => $_title, 'message' => $_message]));
         } else {
             $response = new Response();
             $response->setHeader('Location', 'http://' . $_SERVER['HTTP_HOST'] . '/Consultations.php?status=' . $_status . '&title=' . $_title . '&message=' . $_message);
             $response->send();
         }
     }
 }