X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=app%2FController%2FGithub.php;h=7ec309461ef60fd6ac20e59f5a9f7fb43bdaec32;hb=d486fd6294f68a1d74601b28ab10e6fab9853e16;hp=0dfc5b00d0e09ea017a2e536a95219beead41216;hpb=4c462ab66e6c65c15df7bd5fe6d2673884c639a0;p=pharext%2Fpharext.org diff --git a/app/Controller/Github.php b/app/Controller/Github.php index 0dfc5b0..7ec3094 100644 --- a/app/Controller/Github.php +++ b/app/Controller/Github.php @@ -4,11 +4,14 @@ namespace app\Controller; use app\Controller; use app\Github\API; +use app\Model\Account; +use app\Model\Owner; +use app\Model\Token; use app\Session; use app\Web; - +use http\Cookie; +use http\Header; use http\QueryString; -use http\Url; abstract class Github implements Controller { @@ -18,15 +21,15 @@ abstract class Github implements Controller protected $app; /** - * @var \app\Github\API + * @var API */ protected $github; /** - * @var \app\Session + * @var Session */ protected $session; - + function __construct(Web $app, API $github, Session $session) { $this->app = $app; $this->github = $github; @@ -35,7 +38,29 @@ abstract class Github implements Controller "location" => "github", "title" => "Github" ]); - $this->app->getView()->registerFunction("check", [$this, "checkRepoHook"]); + $this->app->getView()->registerFunction("check", [$github, "checkRepoHook"]); + + if (($header = $this->app->getRequest()->getHeader("Cache-Control", Header::class))) { + $params = $header->getParams(); + if (!empty($params["no-cache"])) { + $this->github->setMaxAge(0); + } elseif (!empty($params["max-age"])) { + $this->github->setMaxAge($params["max-age"]["value"]); + } + } + } + + protected function login(Account $account, Token $token, Owner $owner) { + $auth = new Cookie; + $auth->setCookie("account", $account->account->get()); + $auth->setFlags(Cookie::SECURE | Cookie::HTTPONLY); + $auth->setPath($this->app->getBaseUrl()->path); + $auth->setMaxAge(60*60*24); + $this->app->getResponse()->setCookie($auth); + + $this->github->setToken($token->token->get()); + $this->session->account = $account->account->get(); + $this->session->github = (object) $owner->export(); } protected function checkToken() { @@ -43,36 +68,10 @@ abstract class Github implements Controller return true; } $this->app->redirect($this->app->getBaseUrl()->mod([ + "scheme" => null, "path" => "github/signin", "query" => new QueryString(["returnto" => $this->session->current]) ])); return false; } - - function checkRepoHook($repo) { - if ($repo->hooks) { - foreach ($repo->hooks as $hook) { - if ($hook->name === "web" && $hook->config->url === $this->github->getConfig()->hook->url) { - return true; - } - } - } - return false; - } - - function createLinkGenerator($links) { - return function($which) use($links) { - if (!isset($links[$which])) { - if ($which !== "next" || !isset($links["last"])) { - return null; - } else { - $which = "last"; - } - } - $url = new Url($links[$which], null, 0); - $qry = new QueryString($url->query); - return $qry->getInt("page", 1); - }; - } - }