$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) {
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"));
}
$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) {
}
$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();
+ );
}
}
"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) {
}
/**
- * 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;
}
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")));
}