update composer
[pharext/pharext.org] / app / Controller / Github / Callback.php
index fefc12c77a2e9c76d628f80bba723f4ea74f42c2..2347d0e67069ca946dbea6c924af10e59b312f06 100644 (file)
@@ -23,38 +23,9 @@ class Callback extends Github
        
        function __invoke(array $args = null) {
                if ($this->app->getRequest()->getQuery("error")) {
-                       $this->app->getView()->addData([
-                               "error" => $this->app->getRequest()->getQuery("error_description")
-                       ]);
+                       $this->app->getView()->addData($this->app->getRequest()->getQuery()->toArray());
                } else {
-                       $this->github->fetchToken(
-                               $this->app->getRequest()->getQuery("code"),
-                               $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();
+                       $this->validateUser();
                        
                        if (isset($this->session->returnto)) {
                                $returnto = $this->session->returnto;
@@ -62,10 +33,41 @@ class Callback extends Github
                                $this->app->redirect($returnto);
                        } else {
                                $this->app->redirect(
-                                       $this->app->getBaseUrl()->mod("./github"));
+                                       $this->app->getBaseUrl()->mod(":./github"));
                        }
                }
                $this->app->display("github/callback");
        }
        
+       private function validateUser() {
+               $this->github->fetchToken(
+                       $this->app->getRequest()->getQuery("code"),
+                       $this->app->getRequest()->getQuery("state")
+               )->then(function($result) use (&$oauth) {
+                       list($oauth) = $result;
+                       $this->github->setToken($oauth->access_token);
+                       return $this->github->readAuthUser();
+               })->done(function($result) use(&$oauth) {
+                       list($user) = $result;
+                       $this->login(...$this->persistUser($oauth, $user));
+               });
+
+               $this->github->drain();
+       }
+       
+       private function persistUser($oauth, $user) {
+               $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();
+
+               return [$account, $token, $owner];
+       }
 }