mirror of
https://github.com/jenkinsci/jenkins.git
synced 2026-11-13 12:02:20 +00:00
Null out ProxyConfiguration.userName on save (#8990)
* Null out `ProxyConfiguration.userName` on save * Since we already have a `readResolve`, may as well use it to clean up historical `userName` of `""` https://github.com/jenkinsci/jenkins/pull/8990#discussion_r1502295510 * Linking to new JDK-8326949
This commit is contained in:
1 parent
20263d06d4
commit
d42e0786a4
2 files changed
+78
-5
No files matched your search
@@ -248,7 +248,7 @@ public final class ProxyConfiguration extends AbstractDescribableImpl<ProxyConfi
|
||||
|
||||
@DataBoundSetter
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
this.userName = Util.fixEmptyAndTrim(userName);
|
||||
}
|
||||
|
||||
@DataBoundSetter
|
||||
@@ -290,6 +290,7 @@ public final class ProxyConfiguration extends AbstractDescribableImpl<ProxyConfi
|
||||
secretPassword = Secret.fromString(Scrambler.descramble(password));
|
||||
password = null;
|
||||
authenticator = newAuthenticator();
|
||||
userName = Util.fixEmptyAndTrim(userName);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -363,12 +364,9 @@ public final class ProxyConfiguration extends AbstractDescribableImpl<ProxyConfi
|
||||
*
|
||||
* <p>Equivalent to {@code newHttpClientBuilder().followRedirects(HttpClient.Redirect.NORMAL).build()}.
|
||||
*
|
||||
* <p>The Jenkins-specific default settings include a proxy server and proxy authentication (as
|
||||
* configured by {@link ProxyConfiguration}) and a connection timeout (as configured by {@link
|
||||
* ProxyConfiguration#DEFAULT_CONNECT_TIMEOUT_MILLIS}).
|
||||
*
|
||||
* @return a new {@link HttpClient}
|
||||
* @since 2.379
|
||||
* @see #newHttpClientBuilder
|
||||
*/
|
||||
public static HttpClient newHttpClient() {
|
||||
return newHttpClientBuilder().followRedirects(HttpClient.Redirect.NORMAL).build();
|
||||
@@ -383,6 +381,12 @@ public final class ProxyConfiguration extends AbstractDescribableImpl<ProxyConfi
|
||||
* configured by {@link ProxyConfiguration}) and a connection timeout (as configured by {@link
|
||||
* ProxyConfiguration#DEFAULT_CONNECT_TIMEOUT_MILLIS}).
|
||||
*
|
||||
* <p><strong>Warning:</strong> if both {@link #getName} and {@link #getUserName} are set
|
||||
* (meaning that an authenticated proxy is defined),
|
||||
* you will not be able to pass an {@code Authorization} header to the real server
|
||||
* when running on Java 17 and later
|
||||
* (pending <a href="https://bugs.openjdk.org/browse/JDK-8326949">JDK-8326949</a>.
|
||||
*
|
||||
* @return an {@link HttpClient.Builder}
|
||||
* @since 2.379
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* The MIT License
|
||||
*
|
||||
* Copyright 2024 CloudBees, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package hudson;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import hudson.util.Secret;
|
||||
import java.io.File;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.jvnet.hudson.test.JenkinsSessionRule;
|
||||
|
||||
public final class ProxyConfigurationManagerGUITest {
|
||||
|
||||
@Rule public JenkinsSessionRule rr = new JenkinsSessionRule();
|
||||
|
||||
@Test public void configRoundtrip() throws Throwable {
|
||||
rr.then(r -> {
|
||||
assertNull(r.jenkins.proxy);
|
||||
r.jenkins.proxy = new ProxyConfiguration("proxy.mycorp", 80);
|
||||
r.configRoundtrip();
|
||||
FileUtils.copyFile(new File(r.jenkins.root, "proxy.xml"), System.out);
|
||||
});
|
||||
rr.then(r -> {
|
||||
ProxyConfiguration pc = r.jenkins.proxy;
|
||||
assertNotNull(pc);
|
||||
assertEquals("proxy.mycorp", pc.getName());
|
||||
assertEquals(80, pc.getPort());
|
||||
assertNull(pc.getUserName());
|
||||
pc.setUserName("proxyuser");
|
||||
pc.setSecretPassword(Secret.fromString("proxypass"));
|
||||
r.configRoundtrip();
|
||||
FileUtils.copyFile(new File(r.jenkins.root, "proxy.xml"), System.out);
|
||||
});
|
||||
rr.then(r -> {
|
||||
ProxyConfiguration pc = r.jenkins.proxy;
|
||||
assertEquals("proxy.mycorp", pc.getName());
|
||||
assertEquals(80, pc.getPort());
|
||||
assertEquals("proxyuser", pc.getUserName());
|
||||
assertEquals("proxypass", pc.getSecretPassword().getPlainText());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user