/** * {@inheritDoc} */ public function discover(User $user) { $client = clone $this->client; $client->setDefaultOption('headers/Authorization', 'token ' . $user->getProviderAccessToken('github')); $request = $client->get('/user/orgs'); $response = $request->send(); $data = $response->json(); $orgRequests = [$client->get('/user/repos')]; foreach ($data as $org) { $this->logger->debug(sprintf('adding "' . $org['repos_url'] . '" for crawl')); $orgRequests[] = $client->get($org['repos_url']); } $orgResponses = $client->send($orgRequests); $composerRequests = []; foreach ($orgResponses as $orgResponse) { $this->fetchRepos($orgResponse); if ($orgResponse->hasHeader('link')) { $link = $orgResponse->getHeader('link'); if (preg_match('/.* <(.+?)\\?page=(\\d+)>; rel="last"$/', $link, $matches)) { $pagesRequests = []; for ($i = 2; $i <= $matches[2]; $i++) { $this->logger->debug(sprintf('adding "' . ($matches[1] . '?page=' . $i) . '" for crawl')); $pagesRequests[] = $client->get($matches[1] . '?page=' . $i); } $pagesResponses = $client->send($pagesRequests); foreach ($pagesResponses as $pagesResponse) { $this->fetchRepos($pagesResponse); } } } } return $this->getImportableProjects(); }
/** * @param User $user * * @return Client */ public function configureClientForUser(User $user) { $accessToken = $user->getProviderAccessToken($this->getName()); return $this->configureClientForAccessToken($accessToken); }
/** * {@inheritDoc} */ public function setUser(User $user) { $this->user = $user; $providerName = $this->getProvider()->getName(); if (strlen($user->hasProviderAccessToken($providerName))) { $this->setAccessToken($user->getProviderAccessToken($providerName)); } return $this; }