X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=app%2FController%2FGithub%2FSignin.php;h=d753687a3b7928ed739bc4b0bc66dbc54dbbad8b;hb=ece0b746f4bad317322f55a753c21be8deff8362;hp=05f3e3c0f84320cf7e14632effe2f4c85e9bb53e;hpb=ebc0d017c8a24bd16ca1f4347b39b07ba4349135;p=pharext%2Fpharext.org diff --git a/app/Controller/Github/Signin.php b/app/Controller/Github/Signin.php index 05f3e3c..d753687 100644 --- a/app/Controller/Github/Signin.php +++ b/app/Controller/Github/Signin.php @@ -3,14 +3,51 @@ namespace app\Controller\Github; use app\Controller\Github; +use app\Github\API; +use app\Model\Accounts; +use app\Session; +use app\Web; class Signin extends Github { + /** + * @var Accounts + */ + private $accounts; + + function __construct(Web $app, API $github, Session $session, Accounts $accounts) { + parent::__construct($app, $github, $session); + $this->accounts = $accounts; + } + function __invoke(array $args = null) { + if (($cookie = $this->app->getRequest()->getCookie("account"))) { + $accounts = $this->accounts->find(["account=" => $cookie]); + if (count($accounts)) { + $account = $accounts->current(); + $tokens = $account->allOf("tokens")->filter(function($token) { + return $token->authority == "github"; + }); + if (count($tokens)) { + $token = $tokens->current(); + $this->login($account, $token, + $account->allOf("owners")->filter(function($owner) { + return $owner->authority == "github"; + })->current() + ); + if (($returnto = $this->app->getRequest()->getQuery("returnto"))) { + $this->app->redirect($returnto); + } else { + $this->app->redirect($this->app->getBaseUrl()->mod("./github")); + } + return; + } + } + } $callback = $this->app->getBaseUrl()->mod("./github/callback"); $location = $this->github->getAuthUrl($callback); $this->app->redirect($location); - if ($returnto = $this->app->getRequest()->getQuery("returnto")) { + if (($returnto = $this->app->getRequest()->getQuery("returnto"))) { $this->session->returnto = $returnto; } }