From b25298c04a4c81cc4203f1aa88a1ae4609ce7337 Mon Sep 17 00:00:00 2001
From: Blazej Owczarczyk <blazeyy@gmail.com>
Date: Wed, 18 Sep 2024 23:12:15 +0200
Subject: [PATCH] Fix gitlab data connector for self-hosted instances (#2315)
 (#2316)

* Fix gitlab data connector for self-hosted instances (#2315)

* Linting fix.
---
 .../RepoLoader/GitlabRepo/RepoLoader/index.js        | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/collector/utils/extensions/RepoLoader/GitlabRepo/RepoLoader/index.js b/collector/utils/extensions/RepoLoader/GitlabRepo/RepoLoader/index.js
index 7d5c8438c..1a3737c38 100644
--- a/collector/utils/extensions/RepoLoader/GitlabRepo/RepoLoader/index.js
+++ b/collector/utils/extensions/RepoLoader/GitlabRepo/RepoLoader/index.js
@@ -44,16 +44,16 @@ class GitLabRepoLoader {
   #validGitlabUrl() {
     const UrlPattern = require("url-pattern");
     const validPatterns = [
-      new UrlPattern("https\\://gitlab.com/(:projectId(*))", {
-        segmentValueCharset: "a-zA-Z0-9-._~%/+",
+      new UrlPattern("https\\://gitlab.com/(:author*)/(:project(*))", {
+        segmentValueCharset: "a-zA-Z0-9-._~%+",
       }),
       // This should even match the regular hosted URL, but we may want to know
       // if this was a hosted GitLab (above) or a self-hosted (below) instance
       // since the API interface could be different.
       new UrlPattern(
-        "(:protocol(http|https))\\://(:hostname*)/(:projectId(*))",
+        "(:protocol(http|https))\\://(:hostname*)/(:author*)/(:project(*))",
         {
-          segmentValueCharset: "a-zA-Z0-9-._~%/+",
+          segmentValueCharset: "a-zA-Z0-9-._~%+",
         }
       ),
     ];
@@ -64,9 +64,9 @@ class GitLabRepoLoader {
       match = pattern.match(this.repo);
     }
     if (!match) return false;
-    const [author, project] = match.projectId.split("/");
+    const { author, project } = match;
 
-    this.projectId = encodeURIComponent(match.projectId);
+    this.projectId = encodeURIComponent(`${author}/${project}`);
     this.apiBase = new URL(this.repo).origin;
     this.author = author;
     this.project = project;
-- 
GitLab