/** * Redirect to the installation page of the application. * This method does not send the response. * * @param Response $response HTTP response. * @param Request $request HTTP request. * @return void */ static function redirectToInstall(Response $response, Request $request) { list($dirname) = Uri\split($request->getUrl()); $response->setStatus(307); $response->setHeader('Location', $dirname . '/install.php'); $response->setBody('The application is not installed. ' . 'You are going to be redirected to the installation page.'); }
/** * Sends compiled view * @param string $tpl_name Name of the template (in "dot" notation) * @param array $data Array containing your data; empty by default * @param integer $status_code HTTP status code for the response; 200 by default */ function view($tpl_name, $data = [], $status_code = 200) { $response = new HTTP\Response(); $response->setStatus($status_code); $response->setBody(twig()->render($tpl_name, $data)); HTTP\Sapi::sendResponse($response); }
* @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/). * @author Evert Pot (http://evertpot.com/) * @license http://sabre.io/license/ Modified BSD License */ $userList = ["user1" => "password", "user2" => "password"]; use Sabre\HTTP\Sapi; use Sabre\HTTP\Response; use Sabre\HTTP\Auth; // Find the autoloader $paths = [__DIR__ . '/../vendor/autoload.php', __DIR__ . '/../../../autoload.php', __DIR__ . '/vendor/autoload.php']; foreach ($paths as $path) { if (file_exists($path)) { include $path; break; } } $request = Sapi::getRequest(); $response = new Response(); $basicAuth = new Auth\Basic("Locked down area", $request, $response); if (!($userPass = $basicAuth->getCredentials())) { // No username or password given $basicAuth->requireLogin(); } elseif (!isset($userList[$userPass[0]]) || $userList[$userPass[0]] !== $userPass[1]) { // Username or password are incorrect $basicAuth->requireLogin(); } else { // Success ! $response->setBody('You are logged in!'); } // Sending the response Sapi::sendResponse($response);
/** * This simple example shows the capability of Request and Response objects to * serialize themselves as strings. * * This is mainly useful for debugging purposes. * * @copyright Copyright (C) 2009-2015 fruux GmbH (https://fruux.com/). * @author Evert Pot (http://evertpot.com/) * @license http://sabre.io/license/ Modified BSD License */ use Sabre\HTTP\Request; use Sabre\HTTP\Response; // Find the autoloader $paths = [__DIR__ . '/../vendor/autoload.php', __DIR__ . '/../../../autoload.php', __DIR__ . '/vendor/autoload.php']; foreach ($paths as $path) { if (file_exists($path)) { include $path; break; } } $request = new Request('POST', '/foo'); $request->setHeaders(['Host' => 'example.org', 'Content-Type' => 'application/json']); $request->setBody(json_encode(['foo' => 'bar'])); echo $request; echo "\r\n\r\n"; $response = new Response(424); $response->setHeaders(['Content-Type' => 'text/plain', 'Connection' => 'close']); $response->setBody("ABORT! ABORT!"); echo $response; echo "\r\n";
return; } } $url = $request->getUrl(); $query = ''; /** * We compute asynchronous tasks from the installation page. * They have the following form: install?/<command> * * Else, we print the installation page. */ if (false !== ($pos = strpos($url, '?'))) { $response->addHeader('Content-Type', 'application/json'); $router = new Router\Http(); $router->post('baseurl', '/(?-i)baseurl', function () use($request, $response) { $response->setBody(json_encode(Installer::checkBaseUrl($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('password', '/(?-i)password', function () use($request, $response) { $response->setBody(json_encode(Installer::checkPassword($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('email', '/(?-i)email', function () use($request, $response) { $response->setBody(json_encode(Installer::checkEmail($request->getBodyAsString()))); HTTP\Sapi::sendResponse($response); })->post('database', '/(?-i)database', function () use($request, $response) { $payload = json_decode($request->getBodyAsString(), true); $out = false; if (is_array($payload)) { try { $out = Installer::checkDatabase($payload); } catch (\Exception $exception) { $out = ['error' => $exception->getMessage()];
<?php use Sabre\HTTP; require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../bootstrap/bootstrap.php'; if (file_exists(app_path() . '/' . request()->getPath() . '.php')) { require_once app_path() . '/' . request()->getPath() . '.php'; } elseif (file_exists(app_path() . '/' . request()->getPath() . '/index.php')) { require_once app_path() . '/' . request()->getPath() . '/index.php'; } else { $response = new HTTP\Response(); $response->setStatus(404); $response->setBody('Page not found'); HTTP\Sapi::sendResponse($response); }
/** * Parses the result of a curl call in a format that's a bit more * convenient to work with. * * The method returns an array with the following elements: * * status - one of the 3 STATUS constants. * * curl_errno - A curl error number. Only set if status is * STATUS_CURLERROR. * * curl_errmsg - A current error message. Only set if status is * STATUS_CURLERROR. * * response - Response object. Only set if status is STATUS_SUCCESS, or * STATUS_HTTPERROR. * * http_code - HTTP status code, as an int. Only set if Only set if * status is STATUS_SUCCESS, or STATUS_HTTPERROR * * @param string $response * @param resource $curlHandle * @return Response */ protected function parseCurlResult($response, $curlHandle) { list($curlInfo, $curlErrNo, $curlErrMsg) = $this->curlStuff($curlHandle); if ($curlErrNo) { return ['status' => self::STATUS_CURLERROR, 'curl_errno' => $curlErrNo, 'curl_errmsg' => $curlErrMsg]; } $headerBlob = substr($response, 0, $curlInfo['header_size']); // In the case of 204 No Content, strlen($response) == $curlInfo['header_size]. // This will cause substr($response, $curlInfo['header_size']) return FALSE instead of NULL // An exception will be thrown when calling getBodyAsString then $responseBody = substr($response, $curlInfo['header_size']) ?: null; unset($response); // In the case of 100 Continue, or redirects we'll have multiple lists // // of headers for each separate HTTP response. We can easily split this // because they are separated by \r\n\r\n $headerBlob = explode("\r\n\r\n", trim($headerBlob, "\r\n")); // We only care about the last set of headers $headerBlob = $headerBlob[count($headerBlob) - 1]; // Splitting headers $headerBlob = explode("\r\n", $headerBlob); $response = new Response(); $response->setStatus($curlInfo['http_code']); foreach ($headerBlob as $header) { $parts = explode(':', $header, 2); if (count($parts) == 2) { $response->addHeader(trim($parts[0]), trim($parts[1])); } } $response->setBody($responseBody); $httpCode = intval($response->getStatus()); return ['status' => $httpCode >= 400 ? self::STATUS_HTTPERROR : self::STATUS_SUCCESS, 'response' => $response, 'http_code' => $httpCode]; }
/** * */ protected function sendAuthSuccess(Response $response, $accessToken = null) { // mandatory JMAP API endpoints $routes = ['apiUrl' => '!undefined', 'uploadUrl' => '!undefined', 'downloadUrl' => '!undefined', 'eventSourceUrl' => '!undefined']; // collect service endpoint routes for the registered processors foreach ($this->ctrl->processors as $processor) { $routes = array_merge($routes, $processor->getJmapRoutes()); } // send service endpoint URLs $result = []; foreach ($routes as $key => $route) { $result[$key] = $this->ctrl->url($route, true); } if (!empty($accessToken)) { $result['accessToken'] = $accessToken; } if ($this->session && $this->session->get('Auth\\identity')) { $result['username'] = $this->session->get('Auth\\identity')->username; } $status = $accessToken ? 201 : 200; $this->ctrl->emit('jmap:auth:success', [['result' => &$result, 'status' => &$status, 'processor' => $this]]); $response->setBody(json_encode($result)); $response->setStatus($status); }