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
{
protected $app;
/**
- * @var \app\Github\API
+ * @var API
*/
protected $github;
/**
- * @var \app\Session
+ * @var Session
*/
protected $session;
"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() {
return true;
}
$this->app->redirect($this->app->getBaseUrl()->mod([
+ "scheme" => null,
"path" => "github/signin",
"query" => new QueryString(["returnto" => $this->session->current])
]));
return false;
}
-
- /**
- * Check if the pharext webhook is set for the repo and return its id
- * @param object $repo
- * @return int hook id
- */
- function checkRepoHook($repo) {
- if ($repo->hooks) {
- foreach ($repo->hooks as $hook) {
- if ($hook->name === "web" && $hook->config->url === $this->github->getConfig()->hook->url) {
- return $hook->id;
- }
- }
- }
- return null;
- }
-
- 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);
- };
- }
-
}