$userId = getmyuid(); $groupId = getmygid(); require SABRE_KATANA_PREFIX . '/resource/view/install_permissions.html'; 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 {
/** * 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]; }