Skip to content

Commit ff504b2

Browse files
authored
Fix NPE when jenkins has a proxy configuration without a password (#937)
1 parent 2d5e733 commit ff504b2

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/main/java/com/cloudbees/jenkins/plugins/bitbucket/internal/api/AbstractBitbucketApi.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.cloudbees.jenkins.plugins.bitbucket.api.BitbucketRequestException;
2727
import edu.umd.cs.findbugs.annotations.CheckForNull;
2828
import hudson.ProxyConfiguration;
29+
import hudson.util.Secret;
2930
import java.io.IOException;
3031
import java.io.InputStream;
3132
import java.net.InetSocketAddress;
@@ -125,7 +126,7 @@ protected void setClientProxyParams(String host, HttpClientBuilder builder) {
125126
HttpHost proxyHttpHost = new HttpHost(proxyAddress.getHostName(), proxyAddress.getPort());
126127
builder.setProxy(proxyHttpHost);
127128
String username = proxyConfig.getUserName();
128-
String password = proxyConfig.getSecretPassword().getPlainText();
129+
String password = Secret.toString(proxyConfig.getSecretPassword());
129130
if (StringUtils.isNotBlank(username)) {
130131
logger.fine("Using proxy authentication (user=" + username + ")");
131132
if (context == null) {

src/test/java/com/cloudbees/jenkins/plugins/bitbucket/client/BitbucketCloudApiClientTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@
3131
import com.cloudbees.jenkins.plugins.bitbucket.client.BitbucketIntegrationClientFactory.IRequestAudit;
3232
import com.cloudbees.jenkins.plugins.bitbucket.client.repository.BitbucketCloudRepository;
3333
import com.cloudbees.jenkins.plugins.bitbucket.endpoints.BitbucketCloudEndpoint;
34+
import hudson.ProxyConfiguration;
3435
import io.jenkins.cli.shaded.org.apache.commons.lang.RandomStringUtils;
3536
import java.io.IOException;
3637
import java.io.InputStream;
38+
import java.net.InetSocketAddress;
39+
import java.net.Proxy;
3740
import java.nio.charset.StandardCharsets;
3841
import java.util.Date;
3942
import java.util.Optional;
@@ -42,12 +45,19 @@
4245
import org.apache.http.client.methods.HttpPut;
4346
import org.apache.http.client.methods.HttpRequestBase;
4447
import org.junit.jupiter.api.Test;
48+
import org.jvnet.hudson.test.JenkinsRule;
49+
import org.jvnet.hudson.test.junit.jupiter.WithJenkins;
4550
import org.mockito.ArgumentCaptor;
4651

4752
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
4853
import static org.assertj.core.api.Assertions.assertThat;
54+
import static org.mockito.ArgumentMatchers.anyString;
55+
import static org.mockito.ArgumentMatchers.eq;
56+
import static org.mockito.Mockito.doReturn;
57+
import static org.mockito.Mockito.mock;
4958
import static org.mockito.Mockito.reset;
5059
import static org.mockito.Mockito.verify;
60+
import static org.mockito.Mockito.when;
5161

5262
class BitbucketCloudApiClientTest {
5363

@@ -57,6 +67,23 @@ private String loadPayload(String api) throws IOException {
5767
}
5868
}
5969

70+
@Test
71+
@WithJenkins
72+
public void test_proxy_configurad_without_password(JenkinsRule r) throws Exception {
73+
Proxy proxy = mock(Proxy.class);
74+
when(proxy.address()).thenReturn(new InetSocketAddress("proxy.lan", 8080));
75+
ProxyConfiguration proxyConfiguration = mock(ProxyConfiguration.class);
76+
doReturn(proxy).when(proxyConfiguration).createProxy(anyString());
77+
doReturn("username").when(proxyConfiguration).getUserName();
78+
79+
r.jenkins.setProxy(proxyConfiguration);
80+
BitbucketIntegrationClientFactory.getApiMockClient(BitbucketCloudEndpoint.SERVER_URL);
81+
82+
verify(proxyConfiguration).createProxy(eq("bitbucket.org"));
83+
verify(proxyConfiguration).getUserName();
84+
verify(proxyConfiguration).getSecretPassword();
85+
}
86+
6087
@Test
6188
void verify_status_notitication_name_max_length() throws Exception {
6289
BitbucketApi client = BitbucketIntegrationClientFactory.getApiMockClient(BitbucketCloudEndpoint.SERVER_URL);

0 commit comments

Comments
 (0)