27f3c61697454b87c354aea9db7ba90e7b96423f
7 $request = new Request
;
8 $response = new Response
;
9 $response->setResponseCode(500);
12 $owners = explode(",", getenv("owners") ?
: "m6w6");
13 $mirror = getenv("mirror") ?
: "/var/github";
14 $secret = getenv("secret") ?
: trim(file_get_contents("$mirror/.secret"));
16 $sig = $request->getHeader("X-Hub-Signature");
17 $evt = $request->getHeader("X-Github-Event");
20 $response->setResponseCode(400);
21 $response->setContentType("message/http");
22 $response->getBody()->append($request);
23 return $response->send();
26 foreach ((new Params($sig))->params
as $algo => $mac) {
27 if ($mac["value"] !== hash_hmac($algo, $request->getBody(), $secret)) {
28 $response->setResponseCode(403);
29 $response->getBody()->append("Invalid signature");
30 return $response->send();
36 $response->setResponseCode(202);
37 $response->getBody()->append("Not a configured event");
41 if (!($json = json_decode($request->getBody()))) {
42 $response->setResponseCode(415);
43 $response->setContentType($request->getHeader("Content-Type"));
44 $response->getBody()->append($request->getBody());
45 } elseif (!in_array(isset($json->repository
->owner
->name
)?
$json->repository
->owner
->name
:$json->repository
->owner
->login
, $owners, true)) {
46 $response->setResponseCode(403);
47 $response->getBody()->append("Invalid owner");
49 $repo = $json->repository
->full_name
;
50 $path = $mirror . "/" . $repo;
51 if (is_dir($path) && chdir($path)) {
52 passthru("git fetch -vp 2>&1", $rv);
54 $response->setResponseCode(200);
56 } elseif (mkdir($path, 0755, true) && chdir($path)) {
57 $source = escapeshellarg($json->repository
->clone_url
);
58 $description = escapeshellarg($json->repository
->description
);
59 passthru("git clone --mirror $source . 2>&1", $rv);
60 passthru("git config gitweb.description $description 2>&1");
61 unlink("description");
63 $response->setResponseCode(200);