From f0620d70cb7599903f738abab0da3b048cf66770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damjan=20Be=C4=87irovi=C4=87?= Date: Mon, 26 Jan 2026 11:25:24 +0100 Subject: [PATCH] fix(ee/rbac): Fix GitLab login creating duplicated user accounts (#824) GitLab federated identities are now preserved and propagated into OIDC/Keycloak data, and GitLab is included when creating repo host accounts from OIDC. New tests cover OIDC mapping and user_updater payloads. --- repohub/pkg/gitrekt/update_or_clone.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/repohub/pkg/gitrekt/update_or_clone.go b/repohub/pkg/gitrekt/update_or_clone.go index 9e3e60377..853a88a20 100644 --- a/repohub/pkg/gitrekt/update_or_clone.go +++ b/repohub/pkg/gitrekt/update_or_clone.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "net/url" "os/exec" "strings" "syscall" @@ -66,6 +67,19 @@ func (o *UpdateOrCloneOperation) Update() error { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Minute) defer cancel() + remoteURL, err := url.Parse(o.Repository.HttpURL) + if err != nil { + return fmt.Errorf("failed to parse remote URL %s: %w", o.Repository.HttpURL, err) + } + + // #nosec G204 + updateCmd := exec.CommandContext(ctx, "git", "remote", "set-url", "origin", remoteURL.String()) + updateCmd.Dir = o.Repository.Path() + out, err := updateCmd.CombinedOutput() + if err != nil { + log.Printf("failed to update remote URL for %s, out: %s", o.Repository.HttpURL, string(out)) + } + var cmd *exec.Cmd if o.Reference != "" { log.Printf("fetching from remotes %s with revision %v", o.Repository.Path(), o.Reference) @@ -82,7 +96,7 @@ func (o *UpdateOrCloneOperation) Update() error { cmd.Env = append(cmd.Env, fmt.Sprintf("GIT_USERNAME=%s", o.Repository.Credentials.Username)) cmd.Env = append(cmd.Env, fmt.Sprintf("GIT_PASSWORD=%s", o.Repository.Credentials.Password)) - out, err := cmd.CombinedOutput() + out, err = cmd.CombinedOutput() if err != nil { log.Printf("(err) Fetch repo %s, out: %s", o.Repository.HttpURL, string(out)) return o.parseError(out, err)