Skip to content

Commit 1fb0e12

Browse files
authored
Do not submit an empty pre/post-send script for approval (#518)
* Do not submit an empty pre/post-send script for approval * Fixing `ContentBuilderTest`
1 parent 45d1eca commit 1fb0e12

File tree

3 files changed

+47
-24
lines changed

3 files changed

+47
-24
lines changed

src/main/java/hudson/plugins/emailext/ExtendedEmailPublisherDescriptor.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials;
55
import com.cloudbees.plugins.credentials.domains.DomainRequirement;
66
import com.cloudbees.plugins.credentials.domains.HostnamePortRequirement;
7+
import edu.umd.cs.findbugs.annotations.CheckForNull;
78
import edu.umd.cs.findbugs.annotations.NonNull;
89
import hudson.Extension;
910
import hudson.Util;
@@ -89,12 +90,12 @@ public final class ExtendedEmailPublisherDescriptor extends BuildStepDescriptor<
8990
/**
9091
* This is the global default pre-send script.
9192
*/
92-
private String defaultPresendScript = "";
93+
private String defaultPresendScript;
9394

9495
/**
9596
* This is the global default post-send script.
9697
*/
97-
private String defaultPostsendScript = "";
98+
private String defaultPostsendScript;
9899

99100
private List<GroovyScriptPath> defaultClasspath = new ArrayList<>();
100101

@@ -689,34 +690,38 @@ public boolean isApplicable(Class<? extends AbstractProject> jobType) {
689690
return true;
690691
}
691692

692-
public String getDefaultPresendScript() {
693+
public @CheckForNull String getDefaultPresendScript() {
693694
return defaultPresendScript;
694695
}
695696

696697
@SuppressWarnings("unused")
697698
@DataBoundSetter
698-
public void setDefaultPresendScript(String script) {
699-
script = StringUtils.trim(script);
700-
this.defaultPresendScript = ScriptApproval.get()
701-
.configuring(
702-
script == null ? "" : script,
703-
GroovyLanguage.get(),
704-
ApprovalContext.create().withCurrentUser());
705-
}
706-
707-
public String getDefaultPostsendScript() {
699+
public void setDefaultPresendScript(@CheckForNull String script) {
700+
script = StringUtils.trimToNull(script);
701+
this.defaultPresendScript = script == null
702+
? null
703+
: ScriptApproval.get()
704+
.configuring(
705+
script,
706+
GroovyLanguage.get(),
707+
ApprovalContext.create().withCurrentUser());
708+
}
709+
710+
public @CheckForNull String getDefaultPostsendScript() {
708711
return defaultPostsendScript;
709712
}
710713

711714
@SuppressWarnings("unused")
712715
@DataBoundSetter
713-
public void setDefaultPostsendScript(String script) {
714-
script = StringUtils.trim(script);
715-
this.defaultPostsendScript = ScriptApproval.get()
716-
.configuring(
717-
script == null ? "" : script,
718-
GroovyLanguage.get(),
719-
ApprovalContext.create().withCurrentUser());
716+
public void setDefaultPostsendScript(@CheckForNull String script) {
717+
script = StringUtils.trimToNull(script);
718+
this.defaultPostsendScript = script == null
719+
? null
720+
: ScriptApproval.get()
721+
.configuring(
722+
script,
723+
GroovyLanguage.get(),
724+
ApprovalContext.create().withCurrentUser());
720725
}
721726

722727
public List<GroovyScriptPath> getDefaultClasspath() {

src/test/java/hudson/plugins/emailext/ExtendedEmailPublisherDescriptorTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.containsInAnyOrder;
5+
import static org.hamcrest.Matchers.empty;
56
import static org.hamcrest.Matchers.is;
67
import static org.hamcrest.Matchers.oneOf;
78
import static org.junit.Assert.assertArrayEquals;
@@ -66,6 +67,7 @@
6667
import org.htmlunit.html.HtmlSelect;
6768
import org.htmlunit.html.HtmlTextArea;
6869
import org.htmlunit.html.HtmlTextInput;
70+
import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval;
6971
import org.junit.Rule;
7072
import org.junit.Test;
7173
import org.jvnet.hudson.test.Issue;
@@ -1198,4 +1200,15 @@ public void persistedConfigurationWithCredentialId() {
11981200
UnstableTrigger.class.getName(),
11991201
XNthFailureTrigger.class.getName()));
12001202
}
1203+
1204+
@Test
1205+
public void emptyScriptApproval() throws Exception {
1206+
j.jenkins.setSecurityRealm(j.createDummySecurityRealm());
1207+
j.jenkins.setAuthorizationStrategy(new MockAuthorizationStrategy()
1208+
.grant(Jenkins.ADMINISTER)
1209+
.everywhere()
1210+
.to("admin"));
1211+
j.submit(j.createWebClient().login("admin").goTo("configure").getFormByName("config"));
1212+
assertThat(ScriptApproval.get().getPendingScripts(), is(empty()));
1213+
}
12011214
}

src/test/java/hudson/plugins/emailext/plugins/ContentBuilderTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Collections;
2020
import java.util.List;
2121
import java.util.Map;
22+
import org.apache.commons.lang.StringUtils;
2223
import org.jenkinsci.plugins.tokenmacro.TokenMacro;
2324
import org.junit.Rule;
2425
import org.junit.Test;
@@ -115,20 +116,24 @@ public void before() throws Throwable {
115116
public void testTransformText_shouldExpand_$DEFAULT_PRESEND_SCRIPT() {
116117
assertEquals(
117118
publisher.getDescriptor().getDefaultPresendScript(),
118-
ContentBuilder.transformText("$DEFAULT_PRESEND_SCRIPT", publisher, build, listener));
119+
StringUtils.trimToNull(
120+
ContentBuilder.transformText("$DEFAULT_PRESEND_SCRIPT", publisher, build, listener)));
119121
assertEquals(
120122
publisher.getDescriptor().getDefaultPresendScript(),
121-
ContentBuilder.transformText("${DEFAULT_PRESEND_SCRIPT}", publisher, build, listener));
123+
StringUtils.trimToNull(
124+
ContentBuilder.transformText("${DEFAULT_PRESEND_SCRIPT}", publisher, build, listener)));
122125
}
123126

124127
@Test
125128
public void testTransformText_shouldExpand_$DEFAULT_POSTSEND_SCRIPT() {
126129
assertEquals(
127130
publisher.getDescriptor().getDefaultPostsendScript(),
128-
ContentBuilder.transformText("$DEFAULT_POSTSEND_SCRIPT", publisher, build, listener));
131+
StringUtils.trimToNull(
132+
ContentBuilder.transformText("$DEFAULT_POSTSEND_SCRIPT", publisher, build, listener)));
129133
assertEquals(
130134
publisher.getDescriptor().getDefaultPostsendScript(),
131-
ContentBuilder.transformText("${DEFAULT_POSTSEND_SCRIPT}", publisher, build, listener));
135+
StringUtils.trimToNull(
136+
ContentBuilder.transformText("${DEFAULT_POSTSEND_SCRIPT}", publisher, build, listener)));
132137
}
133138

134139
@Test

0 commit comments

Comments
 (0)