refactor(github): enhance API request handling and validation
- Updated validation rules for 'custom_user' and 'custom_port' fields to be nullable in the GithubController. - Refactored API request handling in GithubController, GithubPrivateRepository, and helper functions to use a consistent Http::GitHub method with timeout and retry logic. - Improved error handling for repository and branch loading processes.
This commit is contained in:
@@ -124,8 +124,8 @@ class GithubController extends Controller
|
|||||||
'organization' => 'nullable|string|max:255',
|
'organization' => 'nullable|string|max:255',
|
||||||
'api_url' => 'required|string|url',
|
'api_url' => 'required|string|url',
|
||||||
'html_url' => 'required|string|url',
|
'html_url' => 'required|string|url',
|
||||||
'custom_user' => 'string|max:255',
|
'custom_user' => 'nullable|string|max:255',
|
||||||
'custom_port' => 'integer|min:1|max:65535',
|
'custom_port' => 'nullable|integer|min:1|max:65535',
|
||||||
'app_id' => 'required|integer',
|
'app_id' => 'required|integer',
|
||||||
'installation_id' => 'required|integer',
|
'installation_id' => 'required|integer',
|
||||||
'client_id' => 'required|string|max:255',
|
'client_id' => 'required|string|max:255',
|
||||||
@@ -259,7 +259,10 @@ class GithubController extends Controller
|
|||||||
$maxPages = 100; // Safety limit: max 10,000 repositories
|
$maxPages = 100; // Safety limit: max 10,000 repositories
|
||||||
|
|
||||||
while ($page <= $maxPages) {
|
while ($page <= $maxPages) {
|
||||||
$response = Http::withToken($token)->get("{$githubApp->api_url}/installation/repositories", [
|
$response = Http::GitHub($githubApp->api_url, $token)
|
||||||
|
->timeout(20)
|
||||||
|
->retry(3, 200, throw: false)
|
||||||
|
->get('/installation/repositories', [
|
||||||
'per_page' => 100,
|
'per_page' => 100,
|
||||||
'page' => $page,
|
'page' => $page,
|
||||||
]);
|
]);
|
||||||
@@ -368,7 +371,10 @@ class GithubController extends Controller
|
|||||||
|
|
||||||
$token = generateGithubInstallationToken($githubApp);
|
$token = generateGithubInstallationToken($githubApp);
|
||||||
|
|
||||||
$response = Http::withToken($token)->get("{$githubApp->api_url}/repos/{$owner}/{$repo}/branches");
|
$response = Http::GitHub($githubApp->api_url, $token)
|
||||||
|
->timeout(20)
|
||||||
|
->retry(3, 200, throw: false)
|
||||||
|
->get("/repos/{$owner}/{$repo}/branches");
|
||||||
|
|
||||||
if ($response->status() !== 200) {
|
if ($response->status() !== 200) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
@@ -143,7 +143,13 @@ class GithubPrivateRepository extends Component
|
|||||||
|
|
||||||
protected function loadBranchByPage()
|
protected function loadBranchByPage()
|
||||||
{
|
{
|
||||||
$response = Http::withToken($this->token)->get("{$this->github_app->api_url}/repos/{$this->selected_repository_owner}/{$this->selected_repository_repo}/branches?per_page=100&page={$this->page}");
|
$response = Http::GitHub($this->github_app->api_url, $this->token)
|
||||||
|
->timeout(20)
|
||||||
|
->retry(3, 200, throw: false)
|
||||||
|
->get("/repos/{$this->selected_repository_owner}/{$this->selected_repository_repo}/branches", [
|
||||||
|
'per_page' => 100,
|
||||||
|
'page' => $this->page,
|
||||||
|
]);
|
||||||
$json = $response->json();
|
$json = $response->json();
|
||||||
if ($response->status() !== 200) {
|
if ($response->status() !== 200) {
|
||||||
return $this->dispatch('error', $json['message']);
|
return $this->dispatch('error', $json['message']);
|
||||||
|
@@ -135,7 +135,13 @@ function getPermissionsPath(GithubApp $source)
|
|||||||
|
|
||||||
function loadRepositoryByPage(GithubApp $source, string $token, int $page)
|
function loadRepositoryByPage(GithubApp $source, string $token, int $page)
|
||||||
{
|
{
|
||||||
$response = Http::withToken($token)->get("{$source->api_url}/installation/repositories?per_page=100&page={$page}");
|
$response = Http::GitHub($source->api_url, $token)
|
||||||
|
->timeout(20)
|
||||||
|
->retry(3, 200, throw: false)
|
||||||
|
->get('/installation/repositories', [
|
||||||
|
'per_page' => 100,
|
||||||
|
'page' => $page,
|
||||||
|
]);
|
||||||
$json = $response->json();
|
$json = $response->json();
|
||||||
if ($response->status() !== 200) {
|
if ($response->status() !== 200) {
|
||||||
return [
|
return [
|
||||||
|
Reference in New Issue
Block a user