diff --git a/pom.xml b/pom.xml index 47c077f20d..ee16e3488d 100644 --- a/pom.xml +++ b/pom.xml @@ -172,6 +172,10 @@ org.jenkins-ci.plugins credentials + + org.jenkins-ci.plugins + plain-credentials + org.jenkins-ci.plugins script-security diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java index 6461fecf60..d2794cc01c 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java @@ -71,6 +71,7 @@ import org.eclipse.jgit.transport.RemoteConfig; import org.eclipse.jgit.transport.URIish; import org.jenkinsci.plugins.gitclient.cgit.GitCommandsExecutor; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted; import org.kohsuke.stapler.framework.io.WriterOutputStream; @@ -2154,6 +2155,15 @@ private String launchCommandWithCredentials( env = new EnvVars(env); env.put("GIT_ASKPASS", askpass.toAbsolutePath().toString()); env.put("SSH_ASKPASS", askpass.toAbsolutePath().toString()); + + } else if (credentials instanceof StringCredentials) { + var stringCred = (StringCredentials) credentials; + listener.getLogger().println("using GIT_CONFIG to set token header " + stringCred.getDescription()); + + env = new EnvVars(env); + env.put("GIT_CONFIG_COUNT", "1"); + env.put("GIT_CONFIG_KEY_0", "http.extraHeader"); + env.put("GIT_CONFIG_VALUE_0", "Authorization: Bearer " + stringCred.getSecret()); } if ("http".equalsIgnoreCase(url.getScheme()) || "https".equalsIgnoreCase(url.getScheme())) { diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java index 97db99d055..f9eda86837 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java @@ -23,6 +23,7 @@ import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.transport.RemoteConfig; import org.eclipse.jgit.transport.URIish; +import org.jenkinsci.plugins.plaincredentials.StringCredentials; /** * Interface to Git functionality. @@ -47,7 +48,8 @@ public interface GitClient { */ CredentialsMatcher CREDENTIALS_MATCHER = CredentialsMatchers.anyOf( CredentialsMatchers.instanceOf(StandardUsernamePasswordCredentials.class), - CredentialsMatchers.instanceOf(SSHUserPrivateKey.class)); + CredentialsMatchers.instanceOf(SSHUserPrivateKey.class), + CredentialsMatchers.instanceOf(StringCredentials.class)); /** * Remove all credentials from the client.