From 69d89e5ada3b41c395c740799d6410b1c78b0523 Mon Sep 17 00:00:00 2001 From: Kenneth Sills Date: Sun, 24 May 2026 23:04:08 -0400 Subject: [PATCH] fix: use configured Gitlab URI for integration calls by default Previously, all API calls on an OAuth Gitlab integration would still send their API calls to `gitlab.com`. Overriding that URI was only possible for PATs. This retargets the default for all Gitlab operations to the configured URI, which both fixes the integration _and_ has PAT integrations use a sane default. I considered saving the Gitlab URI used in the integration instead, which has the added benefit of preventing existing repository integrations from breaking if the admin retargets the global Gitlab URI setting. But that's a more opinionated approach more suitable for a maintainer to pursue, so left off for now. Easy enough to add later. :) Closes #134 --- .env.example | 5 +++++ .../Actions/BulkCreateRepositoriesAction.php | 2 +- .../Http/Controllers/RepositoryController.php | 2 +- .../Services/GitProviders/GitLabProvider.php | 2 +- .../Settings/UserGitCredentialController.php | 1 + resources/js/components/git-credential-dialog.tsx | 11 ++++++++--- resources/js/pages/settings/git-credentials.tsx | 3 +++ 7 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index 6a37010..2b5e73e 100644 --- a/.env.example +++ b/.env.example @@ -77,6 +77,11 @@ GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GITHUB_REDIRECT_URI="${APP_URL}/auth/github/callback" +GITLAB_CLIENT_ID= +GITLAB_CLIENT_SECRET= +GITLAB_REDIRECT_URI="${APP_URL}/auth/gitlab/callback" +GITLAB_INSTANCE_URI=https://gitlab.com/ + REVERB_APP_ID= REVERB_APP_KEY= REVERB_APP_SECRET= diff --git a/app/Domains/Repository/Actions/BulkCreateRepositoriesAction.php b/app/Domains/Repository/Actions/BulkCreateRepositoriesAction.php index 9d72a3b..70749ab 100644 --- a/app/Domains/Repository/Actions/BulkCreateRepositoriesAction.php +++ b/app/Domains/Repository/Actions/BulkCreateRepositoriesAction.php @@ -86,6 +86,6 @@ private function resolveBaseUrl(GitProvider $provider, string $userUuid): ?strin ->where('provider', $provider) ->first(); - return $credential?->credentials['url'] ?? null; + return $credential?->credentials['url'] ?? config('services.gitlab.instance_uri'); } } diff --git a/app/Domains/Repository/Http/Controllers/RepositoryController.php b/app/Domains/Repository/Http/Controllers/RepositoryController.php index 512ac08..e88f0e2 100644 --- a/app/Domains/Repository/Http/Controllers/RepositoryController.php +++ b/app/Domains/Repository/Http/Controllers/RepositoryController.php @@ -235,6 +235,6 @@ private function resolveBaseUrl(GitProvider $provider, string $userUuid): ?strin ->where('provider', $provider) ->first(); - return $credential?->credentials['url'] ?? null; + return $credential?->credentials['url'] ?? config('services.gitlab.instance_uri'); } } diff --git a/app/Domains/Repository/Services/GitProviders/GitLabProvider.php b/app/Domains/Repository/Services/GitProviders/GitLabProvider.php index 8f6c795..91522e0 100644 --- a/app/Domains/Repository/Services/GitProviders/GitLabProvider.php +++ b/app/Domains/Repository/Services/GitProviders/GitLabProvider.php @@ -57,7 +57,7 @@ protected function configureHttpClient(): PendingRequest public function getBaseUrl(): string { - return rtrim($this->getCredential('url', 'https://gitlab.com'), '/'); + return rtrim($this->getCredential('url', config('services.gitlab.instance_uri')), '/'); } protected function getEncodedProjectPath(): string diff --git a/app/Http/Controllers/Settings/UserGitCredentialController.php b/app/Http/Controllers/Settings/UserGitCredentialController.php index cf445ef..18a62d6 100644 --- a/app/Http/Controllers/Settings/UserGitCredentialController.php +++ b/app/Http/Controllers/Settings/UserGitCredentialController.php @@ -29,6 +29,7 @@ public function index(): Response 'providers' => GitProvider::options(), 'githubConnectUrl' => route('settings.github.connect'), 'gitlabConnectUrl' => route('settings.gitlab.connect'), + 'gitlabInstanceUri' => rtrim(config('services.gitlab.instance_uri'), '/'), ]); } diff --git a/resources/js/components/git-credential-dialog.tsx b/resources/js/components/git-credential-dialog.tsx index de9f16a..57ea4d7 100644 --- a/resources/js/components/git-credential-dialog.tsx +++ b/resources/js/components/git-credential-dialog.tsx @@ -25,6 +25,7 @@ interface GitCredentialDialogProps { providers: Record; githubConnectUrl?: string; gitlabConnectUrl?: string; + gitlabInstanceUri: string; isOpen: boolean; onClose: () => void; } @@ -35,6 +36,7 @@ export default function GitCredentialDialog({ providers, githubConnectUrl, gitlabConnectUrl, + gitlabInstanceUri, isOpen, onClose, }: GitCredentialDialogProps) { @@ -196,11 +198,14 @@ export default function GitCredentialDialog({ id="url" name="credentials[url]" type="url" - placeholder="https://gitlab.com" + placeholder={gitlabInstanceUri} />

- Leave empty for GitLab.com, or enter your - self-hosted GitLab instance URL + Leave empty for{' '} + + {gitlabInstanceUri} + + , or enter another GitLab instance URL.

diff --git a/resources/js/pages/settings/git-credentials.tsx b/resources/js/pages/settings/git-credentials.tsx index 5fd8abf..1122c3c 100644 --- a/resources/js/pages/settings/git-credentials.tsx +++ b/resources/js/pages/settings/git-credentials.tsx @@ -26,6 +26,7 @@ interface GitCredentialsPageProps { providers: Record; githubConnectUrl: string; gitlabConnectUrl: string; + gitlabInstanceUri: string; } const breadcrumbs: BreadcrumbItem[] = [ @@ -44,6 +45,7 @@ export default function GitCredentials({ providers, githubConnectUrl, gitlabConnectUrl, + gitlabInstanceUri, }: GitCredentialsPageProps) { const [dialogOpen, setDialogOpen] = useState(false); const [editingCredential, setEditingCredential] = @@ -255,6 +257,7 @@ export default function GitCredentials({ providers={providers} githubConnectUrl={githubConnectUrl} gitlabConnectUrl={gitlabConnectUrl} + gitlabInstanceUri={gitlabInstanceUri} isOpen={dialogOpen} onClose={() => { setDialogOpen(false);