fix(github): sync pending app credentials before slug lookup

This commit is contained in:
Andras Bacsai
2026-06-09 18:32:05 +02:00
parent bc2c6068ea
commit 0d9a39ea23
2 changed files with 21 additions and 4 deletions
+12 -2
View File
@@ -304,7 +304,17 @@ class Change extends Component
try {
$this->authorize('update', $this->github_app);
if (! PrivateKey::ownedByCurrentTeam()->find($this->github_app->private_key_id)) {
$this->github_app->app_id = $this->appId;
$this->github_app->private_key_id = $this->privateKeyId;
$this->github_app->unsetRelation('privateKey');
if (! $this->appId) {
$this->dispatch('error', 'App ID is required before synchronizing the GitHub App name.');
return;
}
if (! PrivateKey::ownedByCurrentTeam()->find($this->privateKeyId)) {
$this->dispatch('error', 'No private key found for this GitHub App.');
return;
@@ -314,7 +324,7 @@ class Change extends Component
if ($appSlug) {
$this->name = str($appSlug)->kebab();
$this->dispatch('success', 'GitHub App name and SSH key name synchronized successfully.');
$this->dispatch('success', 'GitHub App name and private key name synchronized successfully.');
} else {
$this->dispatch('info', 'Could not find App Name (slug) in GitHub response.');
}
+9 -2
View File
@@ -14,9 +14,9 @@ use Lcobucci\JWT\Signer\Key\InMemory;
use Lcobucci\JWT\Signer\Rsa\Sha256;
use Lcobucci\JWT\Token\Builder;
function generateGithubToken(GithubApp $source, string $type)
function assertGithubClockInSync(string $apiUrl): void
{
$response = Http::get("{$source->api_url}/zen");
$response = Http::get("{$apiUrl}/zen");
$serverTime = CarbonImmutable::now()->setTimezone('UTC');
$githubTime = Carbon::parse($response->header('date'));
$timeDiff = abs($serverTime->diffInSeconds($githubTime));
@@ -30,6 +30,11 @@ function generateGithubToken(GithubApp $source, string $type)
'Please synchronize your system clock.'
);
}
}
function generateGithubToken(GithubApp $source, string $type)
{
assertGithubClockInSync($source->api_url);
$signingKey = InMemory::plainText($source->privateKey->private_key);
$algorithm = new Sha256;
@@ -146,6 +151,8 @@ function syncGithubAppName(GithubApp $source, bool $throw = false): ?string
return null;
}
assertGithubClockInSync($source->api_url);
$jwt = generateGithubAppJwt($privateKey->private_key, $source->app_id);
$response = Http::withHeaders([