From fe1801ee3f8af9775b1147e0789d3302c74c418e Mon Sep 17 00:00:00 2001 From: Sridhar Date: Thu, 15 Feb 2024 12:10:23 +0530 Subject: [PATCH] Resolved incorrect badge examples for some jobs when opened directly from URL --- .../plugins/badge/actions/JobBadgeAction.java | 10 ++++++---- .../plugins/badge/actions/RunBadgeAction.java | 14 ++++++++++++-- .../badge/actions/RunBadgeActionTest.java | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/badge/actions/JobBadgeAction.java b/src/main/java/org/jenkinsci/plugins/badge/actions/JobBadgeAction.java index 00ed8e990..f6d1cfc2b 100644 --- a/src/main/java/org/jenkinsci/plugins/badge/actions/JobBadgeAction.java +++ b/src/main/java/org/jenkinsci/plugins/badge/actions/JobBadgeAction.java @@ -53,10 +53,12 @@ public String getUrl() { /* Needed for the jelly syntax hints page */ String url = ""; StaplerRequest req = Stapler.getCurrentRequest(); - if (req != null) { - url = req.getReferer(); - if (url == null) { - url = "null-referer"; + if (req != null && req.getRequestURL() != null) { + url = req.getRequestURL().toString(); + int badgeIndex = url.lastIndexOf("badge/"); + + if (badgeIndex != -1) { + url = url.substring(0, badgeIndex); } } return url; diff --git a/src/main/java/org/jenkinsci/plugins/badge/actions/RunBadgeAction.java b/src/main/java/org/jenkinsci/plugins/badge/actions/RunBadgeAction.java index e633f0115..e12c12df7 100644 --- a/src/main/java/org/jenkinsci/plugins/badge/actions/RunBadgeAction.java +++ b/src/main/java/org/jenkinsci/plugins/badge/actions/RunBadgeAction.java @@ -14,6 +14,7 @@ import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.Stapler; +import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.WebMethod; public class RunBadgeAction implements Action, IconSpec { @@ -48,8 +49,17 @@ public String getUrlName() { public String getUrl() { /* TODO: Is a permission check needed here? */ /* Needed for the jelly syntax hints page */ - String url = Stapler.getCurrentRequest().getReferer(); - return url == null ? "null-referer" : url; + String url = ""; + StaplerRequest req = Stapler.getCurrentRequest(); + if (req != null && req.getRequestURL() != null) { + url = req.getRequestURL().toString(); + int badgeIndex = url.lastIndexOf("badge/"); + + if (badgeIndex != -1) { + url = url.substring(0, badgeIndex); + } + } + return url; } public String getUrlEncodedFullName() { diff --git a/src/test/java/org/jenkinsci/plugins/badge/actions/RunBadgeActionTest.java b/src/test/java/org/jenkinsci/plugins/badge/actions/RunBadgeActionTest.java index 2d5917c5b..00f3302b7 100644 --- a/src/test/java/org/jenkinsci/plugins/badge/actions/RunBadgeActionTest.java +++ b/src/test/java/org/jenkinsci/plugins/badge/actions/RunBadgeActionTest.java @@ -37,13 +37,24 @@ void getUrlEncodedFullNameWithProjectNull() { } @Test - void getUrl() { + void getUrlWithoutBadge() { try (MockedStatic mockedStatic = Mockito.mockStatic(Stapler.class)) { StaplerRequest staplerRequest = Mockito.mock(StaplerRequest.class); - Mockito.when(staplerRequest.getReferer()).thenReturn("referer"); + Mockito.when(staplerRequest.getRequestURL()).thenReturn(new StringBuffer("http://jenkins.io/")); mockedStatic.when(() -> Stapler.getCurrentRequest()).thenReturn(staplerRequest); - assertThat(runBadgeAction.getUrl(), is("referer")); + assertThat(runBadgeAction.getUrl(), is("http://jenkins.io/")); + } + } + + @Test + void getUrlWithBadge() { + try (MockedStatic mockedStatic = Mockito.mockStatic(Stapler.class)) { + StaplerRequest staplerRequest = Mockito.mock(StaplerRequest.class); + Mockito.when(staplerRequest.getRequestURL()).thenReturn(new StringBuffer("http://jenkins.io/badge/")); + mockedStatic.when(() -> Stapler.getCurrentRequest()).thenReturn(staplerRequest); + + assertThat(runBadgeAction.getUrl(), is("http://jenkins.io/")); } }