<?php # Powered By EndMove to work with Git-linux and Gitea # Version 1.0.1 # Last Update 7-15-2022 #====================================# # CONFIG # #====================================# $secret_key = file_get_contents('./secret-key.secret'); $debug = true; #====================================# // check HTTP requete method type if ($_SERVER['REQUEST_METHOD'] != 'POST') { if ($debug) echo('FAILED - not POST : '. $_SERVER['REQUEST_METHOD']); exit(); } // get content type $content_type = isset($_SERVER['CONTENT_TYPE']) ? strtolower(trim($_SERVER['CONTENT_TYPE'])) : ''; // check HTTP requete content type if ($content_type != 'application/json') { if ($debug) echo('FAILED - not application/json : '. $content_type); exit(); } // get payload $payload = trim(file_get_contents("php://input")); // check if payload is not empty if (empty($payload)) { if ($debug) echo('FAILED - no payload'); exit(); } // get header signature $header_signature = isset($_SERVER['HTTP_X_GITEA_SIGNATURE']) ? $_SERVER['HTTP_X_GITEA_SIGNATURE'] : ''; // check header signature if (empty($header_signature)) { if ($debug) echo('FAILED - header signature missing'); exit(); } // calculate payload signature $payload_signature = hash_hmac('sha256', $payload, $secret_key, false); // check payload signature against header signature if ($header_signature !== $payload_signature) { if ($debug) echo('FAILED - payload signature'); exit(); } // convert json to array $decoded = json_decode($payload, true); // check for json decode errors if (json_last_error() !== JSON_ERROR_NONE) { if ($debug) echo('FAILED - json decode : '. json_last_error()); exit(); } // verifications succeeded, process the repository updating... $commands = [ 'whoami', 'git reset --hard HEAD', 'git clean -f ../', 'git pull', 'git status', 'git submodule sync', 'git submodule update', 'git submodule status', ]; // run the commands to update and get the result $full_output = ''; foreach($commands AS $command) { // run it $out = exec($command); // beautify output result $full_output .= "CMD [$command] -> RESPONSE (".htmlentities(trim($out)).")\n"; } // display complete output if debug on, else show OK echo($debug ? $full_output : "OK."); ?>