From e09fed775d1fcecb41ce12e84b185dacd3ac6ab3 Mon Sep 17 00:00:00 2001 From: Radek Antoniuk Date: Wed, 15 Jan 2025 16:38:49 +0100 Subject: [PATCH] bearer auth not set on readResolve() (fixes #608) --- .../java/hudson/plugins/jira/JiraSite.java | 80 ++++++++++--------- .../hudson/plugins/jira/JiraSiteTest.java | 29 ++++--- 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/src/main/java/hudson/plugins/jira/JiraSite.java b/src/main/java/hudson/plugins/jira/JiraSite.java index 9b6b96e2..a50077f7 100644 --- a/src/main/java/hudson/plugins/jira/JiraSite.java +++ b/src/main/java/hudson/plugins/jira/JiraSite.java @@ -3,6 +3,45 @@ import static org.apache.commons.lang.StringUtils.isEmpty; import static org.apache.commons.lang.StringUtils.isNotEmpty; +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Pattern; + +import javax.annotation.PreDestroy; +import javax.servlet.ServletException; + +import org.kohsuke.stapler.AncestorInPath; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.DataBoundSetter; +import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.interceptor.RequirePOST; + import com.atlassian.event.api.EventPublisher; import com.atlassian.httpclient.apache.httpcomponents.DefaultHttpClientFactory; import com.atlassian.httpclient.api.HttpClient; @@ -26,6 +65,7 @@ import com.cloudbees.plugins.credentials.domains.URIRequirementBuilder; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; + import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; @@ -34,10 +74,10 @@ import hudson.Util; import hudson.model.AbstractDescribableImpl; import hudson.model.Descriptor; -import hudson.model.Descriptor.FormException; import hudson.model.Item; import hudson.model.ItemGroup; import hudson.model.Job; +import hudson.model.Descriptor.FormException; import hudson.plugins.jira.extension.ExtendedAsynchronousJiraRestClient; import hudson.plugins.jira.extension.ExtendedJiraRestClient; import hudson.plugins.jira.extension.ExtendedVersion; @@ -46,43 +86,7 @@ import hudson.util.FormValidation; import hudson.util.ListBoxModel; import hudson.util.Secret; -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Pattern; -import javax.annotation.PreDestroy; -import javax.servlet.ServletException; import jenkins.model.Jenkins; -import org.kohsuke.stapler.AncestorInPath; -import org.kohsuke.stapler.DataBoundConstructor; -import org.kohsuke.stapler.DataBoundSetter; -import org.kohsuke.stapler.QueryParameter; -import org.kohsuke.stapler.interceptor.RequirePOST; /** * You must get instance of this only by using the static {@link #get} or {@link #getSitesFromFolders(ItemGroup)} methods @@ -684,6 +688,8 @@ protected Object readResolve() throws FormException { jiraSite.setAppendChangeTimestamp(appendChangeTimestamp); jiraSite.setDisableChangelogAnnotations(disableChangelogAnnotations); jiraSite.setDateTimePattern(dateTimePattern); + jiraSite.setUseBearerAuth(useBearerAuth); + return jiraSite; } diff --git a/src/test/java/hudson/plugins/jira/JiraSiteTest.java b/src/test/java/hudson/plugins/jira/JiraSiteTest.java index 10bca2c2..6576b855 100644 --- a/src/test/java/hudson/plugins/jira/JiraSiteTest.java +++ b/src/test/java/hudson/plugins/jira/JiraSiteTest.java @@ -13,6 +13,19 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.WithoutJenkins; + import com.cloudbees.hudson.plugins.folder.AbstractFolderProperty; import com.cloudbees.hudson.plugins.folder.AbstractFolderPropertyDescriptor; import com.cloudbees.hudson.plugins.folder.Folder; @@ -24,25 +37,15 @@ import com.cloudbees.plugins.credentials.domains.DomainSpecification; import com.cloudbees.plugins.credentials.domains.HostnameSpecification; import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl; -import hudson.model.Descriptor.FormException; + import hudson.model.FreeStyleProject; import hudson.model.Job; +import hudson.model.Descriptor.FormException; import hudson.plugins.jira.model.JiraIssue; import hudson.util.DescribableList; import hudson.util.Secret; import hudson.util.XStream2; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Arrays; -import java.util.Collections; import jenkins.model.Jenkins; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.jvnet.hudson.test.Issue; -import org.jvnet.hudson.test.JenkinsRule; -import org.jvnet.hudson.test.WithoutJenkins; public class JiraSiteTest { @@ -164,6 +167,7 @@ public void deserializeNormal() throws IOException, FormException { CredentialsProvider.lookupStores(j.jenkins).iterator().next().addDomain(domain, c); JiraSite site = new JiraSite(exampleOrg, null, c.getId(), false, false, null, false, null, null, true); + site.setUseBearerAuth(true); XStream2 xStream2 = new XStream2(); String xml = xStream2.toXML(site); @@ -174,6 +178,7 @@ public void deserializeNormal() throws IOException, FormException { JiraSite site1 = (JiraSite) xStream2.fromXML(xml); assertNotNull(site1.credentialsId); + assertTrue(site1.useBearerAuth); } @WithoutJenkins