diff --git a/pom.xml b/pom.xml index bbd67ad66..3dfb127fd 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.plugins plugin - 5.2 + 5.9 @@ -39,7 +39,7 @@ scm:git:https://github.com/${gitHubRepo}.git scm:git:git@github.com:${gitHubRepo}.git https://github.com/${gitHubRepo} - v1.42.0 + ${scmTag} JIRA @@ -52,7 +52,7 @@ jenkinsci/${project.artifactId}-plugin 2.479 - ${jenkins.baseline}.1 + ${jenkins.baseline}.3 false v@{project.version} true @@ -206,7 +206,7 @@ io.jenkins.tools.bom bom-${jenkins.baseline}.x - 3559.vb_5b_81183b_d23 + 4488.v7fe26526366e import pom diff --git a/src/main/java/org/jenkinsci/plugins/github/internal/GitHubClientCacheOps.java b/src/main/java/org/jenkinsci/plugins/github/internal/GitHubClientCacheOps.java index 6fcaf6913..7ea4b69a3 100644 --- a/src/main/java/org/jenkinsci/plugins/github/internal/GitHubClientCacheOps.java +++ b/src/main/java/org/jenkinsci/plugins/github/internal/GitHubClientCacheOps.java @@ -5,7 +5,6 @@ import com.google.common.base.Predicate; import com.google.common.hash.Hashing; import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import okhttp3.Cache; import org.apache.commons.io.FileUtils; import org.jenkinsci.plugins.github.GitHubPlugin; @@ -96,7 +95,6 @@ public static Path getBaseCacheDir() { * * @param configs active server configs to exclude caches from cleanup */ - @SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE") public static void clearRedundantCaches(List configs) { Path baseCacheDir = getBaseCacheDir(); diff --git a/src/test/java/org/jenkinsci/plugins/github/config/GitHubServerConfigIntegrationTest.java b/src/test/java/org/jenkinsci/plugins/github/config/GitHubServerConfigIntegrationTest.java index 0f04a2aa8..7c78beb30 100644 --- a/src/test/java/org/jenkinsci/plugins/github/config/GitHubServerConfigIntegrationTest.java +++ b/src/test/java/org/jenkinsci/plugins/github/config/GitHubServerConfigIntegrationTest.java @@ -5,18 +5,16 @@ import com.cloudbees.plugins.credentials.CredentialsScope; import com.cloudbees.plugins.credentials.CredentialsStore; import com.cloudbees.plugins.credentials.domains.Domain; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import net.sf.json.JSONObject; import org.htmlunit.HttpMethod; import org.htmlunit.Page; import org.htmlunit.WebRequest; import hudson.security.GlobalMatrixAuthorizationStrategy; import hudson.util.Secret; import jenkins.model.Jenkins; -import net.sf.json.JSONObject; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.ee9.servlet.DefaultServlet; -import org.eclipse.jetty.ee9.servlet.ServletContextHandler; -import org.eclipse.jetty.ee9.servlet.ServletHolder; import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl; import org.junit.After; import org.junit.Before; @@ -26,10 +24,13 @@ import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import static org.hamcrest.MatcherAssert.assertThat; @@ -46,7 +47,7 @@ public class GitHubServerConfigIntegrationTest { @Rule public JenkinsRule j = new JenkinsRule(); - private Server server; + private HttpServer server; private AttackerServlet attackerServlet; private String attackerUrl; @@ -57,35 +58,16 @@ public void setupServer() throws Exception { @After public void stopServer() { - try { - server.stop(); - } catch (Exception e) { - e.printStackTrace(); - } + server.stop(1); } private void setupAttackerServer() throws Exception { - this.server = new Server(); - ServerConnector serverConnector = new ServerConnector(this.server); - server.addConnector(serverConnector); - - ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); - context.setContextPath("/*"); - + this.server = HttpServer.create(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0); this.attackerServlet = new AttackerServlet(); - ServletHolder servletHolder = new ServletHolder(attackerServlet); - context.addServlet(servletHolder, "/*"); - - server.setHandler(context); - - server.start(); - - String host = serverConnector.getHost(); - if (host == null) { - host = "localhost"; - } - - this.attackerUrl = "http://" + host + ":" + serverConnector.getLocalPort(); + this.server.createContext("/user", this.attackerServlet); + this.server.start(); + InetSocketAddress addr = this.server.getAddress(); + this.attackerUrl = String.format("http://%s:%d", addr.getHostString(), addr.getPort()); } @Test @@ -153,25 +135,30 @@ private void setupCredentials(String credentialId, String secret) throws Excepti store.addCredentials(domain, credentials); } - private static class AttackerServlet extends DefaultServlet { + private static class AttackerServlet implements HttpHandler { public String secretCreds; @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - switch (request.getRequestURI()) { - case "/user": - this.onUser(request, response); - break; + public void handle(HttpExchange he) throws IOException { + if ("GET".equals(he.getRequestMethod())) { + this.onUser(he); + } else { + he.sendResponseHeaders(HttpURLConnection.HTTP_BAD_METHOD, -1); } } - private void onUser(HttpServletRequest request, HttpServletResponse response) throws IOException { - secretCreds = request.getHeader("Authorization"); - response.getWriter().write(JSONObject.fromObject( + private void onUser(HttpExchange he) throws IOException { + secretCreds = he.getRequestHeaders().getFirst("Authorization"); + String response = JSONObject.fromObject( new HashMap() {{ put("login", "alice"); }} - ).toString()); + ).toString(); + byte[] body = response.getBytes(StandardCharsets.UTF_8); + he.sendResponseHeaders(HttpURLConnection.HTTP_OK, body.length); + try (OutputStream os = he.getResponseBody()) { + os.write(body); + } } } }