X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=app%2FController%2FGithub%2FCallback.php;h=fefc12c77a2e9c76d628f80bba723f4ea74f42c2;hb=c05a8f703d5a097355b5813154c264c87e3f71fe;hp=e6429fcf7de18f57ef2b313fa2247224b75b7cc4;hpb=9815b77a14832685f90d34f9a348af1cadd63576;p=pharext%2Fpharext.org diff --git a/app/Controller/Github/Callback.php b/app/Controller/Github/Callback.php index e6429fc..fefc12c 100644 --- a/app/Controller/Github/Callback.php +++ b/app/Controller/Github/Callback.php @@ -29,11 +29,33 @@ class Callback extends Github } else { $this->github->fetchToken( $this->app->getRequest()->getQuery("code"), - $this->app->getRequest()->getQuery("state"), - function($token) { - $this->github->setToken($token->access_token); - $this->github->readAuthUser($this->createUserCallback($token)); - })->send(); + $this->app->getRequest()->getQuery("state") + )->then(function($result) { + list($oauth) = $result; + $this->github->setToken($oauth->access_token); + return $this->github->readAuthUser()->then(function($result) use($oauth) { + list($user) = $result; + return [$oauth, $user]; + }); + })->then(function($result) { + list($oauth, $user) = $result; + $tx = $this->accounts->getConnection()->startTransaction(); + + if (($cookie = $this->app->getRequest()->getCookie("account"))) { + $account = $this->accounts->find(["account=" => $cookie])->current(); + } elseif (!($account = $this->accounts->byOAuth("github", $oauth->access_token, $user->login))) { + $account = $this->accounts->createOAuthAccount("github", $oauth->access_token, $user->login); + } + $token = $account->updateToken("github", $oauth->access_token, $oauth); + $owner = $account->updateOwner("github", $user->login, $user); + + $tx->commit(); + + $this->login($account, $token, $owner); + })->done(); + + $this->github->getClient()->send(); + if (isset($this->session->returnto)) { $returnto = $this->session->returnto; unset($this->session->returnto); @@ -46,21 +68,4 @@ class Callback extends Github $this->app->display("github/callback"); } - function createUserCallback($oauth) { - return function($user) use($oauth) { - $tx = $this->accounts->getConnection()->startTransaction(); - - if (($cookie = $this->app->getRequest()->getCookie("account"))) { - $account = $this->accounts->find(["account=" => $cookie])->current(); - } elseif (!($account = $this->accounts->byOAuth("github", $oauth->access_token, $user->login))) { - $account = $this->accounts->createOAuthAccount("github", $oauth->access_token, $user->login); - } - $token = $account->updateToken("github", $oauth->access_token, $oauth); - $owner = $account->updateOwner("github", $user->login, $user); - - $tx->commit(); - - $this->login($account, $token, $owner); - }; - } }