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:
Andras Bacsai
2025-09-22 15:41:56 +02:00
parent 5e6946c33a
commit 36dfd1bc6e
3 changed files with 27 additions and 9 deletions

View File

@@ -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([

View File

@@ -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']);

View File

@@ -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 [