From 09052ec21de6082955f91c076b019d3a3d14f02d Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 22 Sep 2019 22:45:06 +0900 Subject: [PATCH] =?UTF-8?q?git=5Fpull=20request=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + hook/HashKey.orig.php | 7 ++++ hook/git_pull.php | 76 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 hook/HashKey.orig.php create mode 100644 hook/git_pull.php diff --git a/.gitignore b/.gitignore index ce2c1b4..3081f8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /hook/gogs_key.php /hook/logs.txt /hook/list.json +/hook/HashKey.php diff --git a/hook/HashKey.orig.php b/hook/HashKey.orig.php new file mode 100644 index 0000000..8aadd66 --- /dev/null +++ b/hook/HashKey.orig.php @@ -0,0 +1,7 @@ +false, + 'reason'=>'Unknown' +]; + +if(!$req_hash){ + $json_response['reason'] = 'no req'; + die(json_encode($json_response)); +} +if(!$req_time || !is_numeric($req_time)){ + $json_response['reason'] = 'invalid time'; + die(json_encode($json_response)); +} + +$key = HashKey::KEY; +if(strlen($key)<16){ + $json_response['reason'] = 'key is too short'; + die(json_encode($json_response)); +} + +$timestamp = time(); + +if(abs($timestamp - $req_time) > 300){ + $json_response['reason'] = 'time difference'; + die(json_encode($json_response)); +} + +$ans_hash = hashPassword(sprintf("%016x", $req_time), $key); + +if($ans_hash != $req_hash){ + $json_response['reason'] = 'hash mismatch'; + die(json_encode($json_response)); +} + +exec("git pull -q 2>&1", $output); + +exec("git ls-files -z ../icons", $raw_img_list); +$raw_img_list = explode("\x00", $raw_img_list[0]); +$img_list = []; + +foreach ($raw_img_list as $path) { + $pos = strpos($path, '../icons/'); + if($pos === false){ + continue; + } + $path = substr($path, $pos + 9); + + + $pathinfo = pathinfo($path); + $dpath = $pathinfo['dirname']; + $basename = $pathinfo['basename']; + $filename = $pathinfo['filename']; + + if(!\key_exists($dpath, $img_list)){ + $img_list[$dpath] = []; + } + $img_list[$dpath][$filename] = $basename; + +} + +file_put_contents('list.json', json_encode($img_list));