diff --git a/app/Models/Application.php b/app/Models/Application.php index 6bfbb6de7..7f7ce5ea1 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -714,7 +714,7 @@ public function gitCommits(): Attribute ); } - public function gitCommitLink($link): string + public function gitCommitLink($link): ?string { if (! is_null(data_get($this, 'source.html_url')) && ! is_null(data_get($this, 'git_repository')) && ! is_null(data_get($this, 'git_branch'))) { if (str($this->source->html_url)->contains('bitbucket')) { @@ -731,6 +731,10 @@ public function gitCommitLink($link): string $git_repository = 'https://'.parse_url($git_repository, PHP_URL_HOST).parse_url($git_repository, PHP_URL_PATH); } + if (! filter_var($git_repository, FILTER_VALIDATE_URL)) { + return null; + } + $url = Url::fromString(Str::replaceEnd('.git', '', $git_repository)); $url = $url->withUserInfo(''); $commitPath = str($git_repository)->contains('bitbucket') ? 'commits' : 'commit'; diff --git a/tests/Unit/ApplicationGitCommitLinkTest.php b/tests/Unit/ApplicationGitCommitLinkTest.php index e1a15e714..378384fe8 100644 --- a/tests/Unit/ApplicationGitCommitLinkTest.php +++ b/tests/Unit/ApplicationGitCommitLinkTest.php @@ -26,3 +26,14 @@ 'https://bitbucket.org/coollabsio/coolify/commits/1234567890abcdef', ], ]); + +it('does not generate commit links from incomplete repository URLs', function (string $repository) { + $application = new Application; + $application->setRelation('source', null); + $application->git_repository = $repository; + + expect($application->gitCommitLink('1234567890abcdef'))->toBeNull(); +})->with([ + 'missing host' => 'https://', + 'missing scheme' => 'github.com/coollabsio/coolify', +]);