From bce718b86b50f44a2c1d2d1cb0fb5b13ccdff504 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 10 Jun 2015 09:52:59 +0200 Subject: [PATCH] 2nd round --- app/Controller/Github/Callback.php | 14 ++-- app/Controller/Github/Hook/Receive.php | 25 +++---- app/Controller/Github/Index.php | 1 + app/Controller/Github/Release.php | 1 + app/Controller/Github/Repo.php | 1 + app/Controller/Github/RepoHook.php | 98 ++++++++++++-------------- app/Github/API.php | 22 ++++-- 7 files changed, 81 insertions(+), 81 deletions(-) diff --git a/app/Controller/Github/Callback.php b/app/Controller/Github/Callback.php index baa6c4d..fcd814f 100644 --- a/app/Controller/Github/Callback.php +++ b/app/Controller/Github/Callback.php @@ -45,18 +45,16 @@ class Callback extends Github $this->github->fetchToken( $this->app->getRequest()->getQuery("code"), $this->app->getRequest()->getQuery("state") - )->then(function($result) { + )->then(function($result) use (&$oauth) { list($oauth) = $result; $this->github->setToken($oauth->access_token); - return $this->github->readAuthUser()->then(function($result) use($oauth) { - list($user) = $result; - return $this->persistUser($oauth, $user); - }); - })->done(function($result) { - $this->login(...$result); + return $this->github->readAuthUser(); + })->done(function($result) use(&$oauth) { + list($user) = $result; + $this->login(...$this->persistUser($oauth, $user)); }); - $this->github->getClient()->send(); + $this->github->drain(); } private function persistUser($oauth, $user) { diff --git a/app/Controller/Github/Hook/Receive.php b/app/Controller/Github/Hook/Receive.php index 3dc519a..9bc1323 100644 --- a/app/Controller/Github/Hook/Receive.php +++ b/app/Controller/Github/Hook/Receive.php @@ -51,7 +51,12 @@ class Receive implements Controller case "create": case "release": if (($json = json_decode($request->getBody()))) { - $this->$evt($json); + $this->$evt($json)->done(function($result) use($response) { + list($created) = $result; + $response->setResponseCode(201); + $response->setHeader("Location", $created->url); + }); + $this->github->drain(); } else { $response->setResponseCode(415); $response->setContentType($request->getHeader("Content-Type")); @@ -94,15 +99,10 @@ class Receive implements Controller } $this->setTokenForUser($release->repository->owner->login); - $this->github->uploadAssetForRelease( + return $this->github->uploadAssetForRelease( $release->release, $release->repository - )->done(function($result) use($response) { - list($created) = $result; - $response->setResponseCode(201); - $response->setHeader("Location", $created->url); - }); - $this->github->drain(); + ); } private function create($create) { @@ -115,14 +115,9 @@ class Receive implements Controller } $this->setTokenForUser($create->repository->owner->login); - $this->github->createReleaseFromTag( + return $this->github->createReleaseFromTag( $create->repository, $create->ref - )->done(function($result) use($response) { - list($created) = $result; - $response->setResponseCode(201); - $response->setHeader("Location", $created->url); - }); - $this->github->drain(); + ); } } diff --git a/app/Controller/Github/Index.php b/app/Controller/Github/Index.php index 7918e2d..8b6da03 100644 --- a/app/Controller/Github/Index.php +++ b/app/Controller/Github/Index.php @@ -17,6 +17,7 @@ class Index extends Github list(list($repos, $links)) = $results; $this->app->display("github/index", compact("repos", "links")); }); + $this->github->drain(); } } diff --git a/app/Controller/Github/Release.php b/app/Controller/Github/Release.php index 32da9b5..e94e4ee 100644 --- a/app/Controller/Github/Release.php +++ b/app/Controller/Github/Release.php @@ -28,6 +28,7 @@ class Release extends Github }); $this->github->drain(); + $hook = $this->github->checkRepoHook($repo); $this->app->getView()->addData(compact("owner", "name", "repo", "hook")); diff --git a/app/Controller/Github/Repo.php b/app/Controller/Github/Repo.php index 64fbb9d..bf61387 100644 --- a/app/Controller/Github/Repo.php +++ b/app/Controller/Github/Repo.php @@ -18,6 +18,7 @@ class Repo extends Github $this->app->getView()->addData(compact("owner", "name", "repo", "hook")); }); + $this->github->drain(); } diff --git a/app/Controller/Github/RepoHook.php b/app/Controller/Github/RepoHook.php index 14d3d69..6bef009 100644 --- a/app/Controller/Github/RepoHook.php +++ b/app/Controller/Github/RepoHook.php @@ -16,71 +16,63 @@ class RepoHook extends Github "query" => "modal=hook&hook=" . $args["action"] ])); } else { - switch ($args["action"]) { - case "upd": - $this->updateHook($args["owner"], $args["name"]); - break; - - case "add": - $this->addHook($args["owner"], $args["name"]); - break; - - case "del": - $this->delHook($args["owner"], $args["name"]); - break; - } + $this->changeHook($args)->done(function() use($args) { + $this->redirectBack($args["owner"]."/".$args["repo"]); + }); + $this->github->drain(); } } } + + function changeHook($args) { + switch ($args["action"]) { + case "upd": + return $this->updateHook($args["owner"] ."/". $args["name"]); + case "add": + return $this->addHook($args["owner"] ."/". $args["name"]); + case "del": + return $this->delHook($args["owner"] ."/". $args["name"]); + default: + throw new \Exception("Unknown action ".$args["action"]); + } + } - function addHook($owner, $repo) { + function addHook($repo_name) { $hook_conf = $this->app->getRequest()->getForm(); - $this->github->createRepoHook("$owner/$repo", $hook_conf)->then(function($hook) use($owner, $repo) { - $call = new ListHooks($this->github, ["repo" => "$owner/$repo", "fresh" => true]); - $this->github->queue($call)->then(function() use($owner, $repo) { - $this->redirectBack("$owner/$repo"); - }); + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->createRepoHook($repo_name, $hook_conf)->then(function() use($listhooks) { + $listhooks->dropFromCache(); }); - $this->github->drain(); } - function updateHook($owner, $repo) { - $this->github->readRepo("$owner/$repo")->then(function($result) { - list($repo) = $result; - $call = new ListHooks($this->github, ["repo" => $repo->full_name]); - $this->github->queue($call)->then(function($result) use($repo, $call) { - list($repo->hooks) = $result; - if (($hook = $this->github->checkRepoHook($repo))) { - $hook_conf = $this->app->getRequest()->getForm(); - $this->github->updateRepoHook($repo->full_name, $hook->id, $hook_conf)->then(function($hook_result) use($repo, $hook, $result, $call) { - list($changed_hook) = $hook_result; - foreach ($changed_hook as $key => $val) { - $hook->$key = $val; - } - $call->saveToCache($result); - $this->redirectBack($repo->full_name); - }); - } - }); + function updateHook($repo_name) { + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->queue($listhooks)->then(function($result) use($repo_name) { + list($hooks) = $result; + + if (!($hook = $this->github->checkHook($hooks))) { + throw new \Exception("Hook is not set"); + } + + return $this->github->updateRepoHook($repo_name, $hook->id, $this->app->getRequest()->getForm()); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); }); - $this->github->drain(); } - function delHook($owner, $repo) { - $this->github->readRepo("$owner/$repo")->then(function($result) { - list($repo) = $result; - $call = new ListHooks($this->github, ["repo" => $repo->full_name]); - $this->github->queue($call)->then(function($result) use($repo, $call) { - list($repo->hooks) = $result; - if (($hook = $this->github->checkRepoHook($repo))) { - $this->github->deleteRepoHook($repo->full_name, $hook->id)->then(function() use($repo, $call) { - $call->dropFromCache(); - $this->redirectBack($repo->full_name); - }); - } - }); + function delHook($repo_name) { + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->queue($listhooks)->then(function($result) use($repo_name) { + list($hooks) = $result; + + if (!($hook = $this->github->checkHook($hooks))) { + throw new \Exception("Hook is not set"); + } + + return $this->github->deleteRepoHook($repo_name, $hook->id); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); }); - $this->github->drain(); } function redirectBack($repo) { diff --git a/app/Github/API.php b/app/Github/API.php index 0ae7655..493984d 100644 --- a/app/Github/API.php +++ b/app/Github/API.php @@ -184,13 +184,13 @@ class API } /** - * Check if the pharext webhook is set for the repo and return it - * @param object $repo + * Check if the pharext webhook is set and return it + * @param array $hooks * @return stdClass hook */ - function checkRepoHook($repo) { - if (!empty($repo->hooks)) { - foreach ($repo->hooks as $hook) { + function checkHook($hooks) { + if (!empty($hooks)) { + foreach ($hooks as $hook) { if ($hook->name === "web" && $hook->config->url === $this->config->hook->url) { return $hook; } @@ -199,6 +199,18 @@ class API return null; } + /** + * Check if the pharext webhook is set for the repo and return it + * @param object $repo + * @return stdClass hook + */ + function checkRepoHook($repo) { + if (!empty($repo->hooks)) { + return $this->checkHook($repo->hooks); + } + return null; + } + function listHooks($repo) { return $this->queue(new API\Hooks\ListHooks($this, compact("repo"))); } -- 2.30.2