From c2fcae61b974ef784a91f577fc2c3f9fc818dbe7 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Tue, 7 Apr 2015 23:04:07 +0200 Subject: [PATCH] Sample of work done so far [Git Proxy] --- .htaccess | 3 ++ index.php | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100755 .htaccess create mode 100755 index.php diff --git a/.htaccess b/.htaccess new file mode 100755 index 0000000..e381d58 --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +FallbackResource /index.php +ErrorDocument 404 /index.php +RemoveHandler .php \ No newline at end of file diff --git a/index.php b/index.php new file mode 100755 index 0000000..d49f80b --- /dev/null +++ b/index.php @@ -0,0 +1,95 @@ + $value) { + if (substr($name, 0, 5) == 'HTTP_') { + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + } + } + return $headers; + } +} + +// Target determination +$metd = $_SERVER['REQUEST_METHOD']; +$reqp = $_SERVER['REQUEST_URI']; +// $reqp = str_replace_once($localRoot, '', $reqp); + +// Preparing request headers +$reqHeds = "$metd $root$reqp HTTP/1.1\r\n"; +$reqHeds .= "Host: $serv:$port\r\n"; + +// Converting client request headers to server request headers +$reqsHedsC = getallheaders(); +foreach ($reqsHedsC as $name => $content) { + if ($name != 'Host') { + $reqHeds .= "$name: $content\r\n"; + } +} + +if ($metd == 'POST') { // TODO Waaaay too long + $postinfo = ''; + foreach ($_POST as $key => $value) { + $postinfo .= $key . '=' . urlencode($value) . '&'; + } + $postinfo = rtrim($postinfo, '&'); + $reqHeds .= "\r\n" . $postinfo; +} else { + $reqHeds .= "Connection: Close\r\n\r\n"; +} + + +$fp = fsockopen($serv, $port, $errno, $errstr, 30); +if (!$fp) { + echo "Impossible de se connecter au serveur git :-(\n
$errstr ($errno)
\n"; +} else { + // Sending request + fwrite($fp, $reqHeds); + $resBuf = ''; + while (!feof($fp)) { + // Getting response + if ($resBuf === True) { // If headers sent + $get = fgets($fp, 128); + echo $get; + } else { + $resBuf .= fgets($fp, 128); + if ($sepPos = strrpos($resBuf, "\r\n\r\n")) { // Headers have been retrieved + $resHeds = explode("\r\n", substr($resBuf, 0, $sepPos)); + foreach ($resHeds as $resHed) { // Setting headers + header($resHed); + if (substr($resHed, 0, 4) == 'HTTP') { // FastCGI fix when using ErrorDocument + header('Status: ' . substr($resHed, 9)); + } + } + echo substr($resBuf, $sepPos + 4); // Sending the rest (usually empty) + $resBuf = True; // Setting mode to automatically redirect + } + } + } + fclose($fp); +} + +?> \ No newline at end of file