Skip to content

Commit c11308f

Browse files
committed
fix: address review issues
1 parent deaa07f commit c11308f

File tree

10 files changed

+51
-75
lines changed

10 files changed

+51
-75
lines changed

README.md

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
# validating-yaml-parameter-plugin
22

3-
mvn verify
3+
The validating yaml parameter plugin contributes a new parameter type to Jenkins that allows Yaml
4+
validation of the entered contents.
45

5-
mvn install
6+
Usage
7+
=====
68

7-
mvn hpi:run
9+
This parameter plugin is used in the job configuration page by enabling parameterized builds.
10+
11+
You just need to configure the parameter by entering a name, default value (yaml), failed validation
12+
message and the parameter description:
13+
14+
![](docs/images/validating-yaml-parameter-img1.jpg)
15+
16+
When a build is requested, the user is prompted with the parameters to enter. If the user types bad
17+
yaml contents, then there's a validation error return after the form is submitted.
18+
19+
![](docs/images/validating-yaml-parameter-img2.jpg)
Loading
25.3 KB
Loading

src/main/java/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterDefinition.java

+10-16
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@
3535
import org.jenkinsci.Symbol;
3636
import org.kohsuke.stapler.DataBoundConstructor;
3737
import org.kohsuke.stapler.QueryParameter;
38+
import org.kohsuke.stapler.verb.POST;
3839
import org.kohsuke.stapler.StaplerRequest;
3940
import org.yaml.snakeyaml.Yaml;
41+
import org.yaml.snakeyaml.constructor.SafeConstructor;
4042

4143
import java.io.IOException;
4244
import java.util.regex.Pattern;
@@ -55,24 +57,18 @@ public class ValidatingYamlParameterDefinition extends ParameterDefinition{
5557

5658
private static final Logger LOGGER = Logger.getLogger(ValidatingYamlParameterDefinition.class.getName());
5759
private String defaultValue;
58-
private boolean syntaxHighlighting;
5960
private String failedValidationMessage;
6061
private static boolean result;
6162

6263
private String value;
6364

6465
@DataBoundConstructor
65-
public ValidatingYamlParameterDefinition(String name, String defaultValue, boolean syntaxHighlighting, String failedValidationMessage, String description) {
66+
public ValidatingYamlParameterDefinition(String name, String defaultValue, String failedValidationMessage, String description) {
6667
super(name, description);
6768
this.defaultValue = defaultValue;
68-
this.syntaxHighlighting = syntaxHighlighting;
6969
this.failedValidationMessage = failedValidationMessage;
7070
}
7171

72-
public boolean getSyntaxHighlighting() {
73-
return this.syntaxHighlighting;
74-
}
75-
7672
public String getDefaultValue() {
7773
return this.defaultValue;
7874
}
@@ -97,14 +93,13 @@ public String getFailedValidationMessage() {
9793

9894
@Override
9995
public ValidatingYamlParameterValue getDefaultParameterValue() {
100-
// LOGGER.info(String.format(getName(), defaultValue, getSyntaxHighlighting()));
101-
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue(getName(), defaultValue, getSyntaxHighlighting());
96+
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue(getName(), defaultValue);
10297
return v;
10398
}
10499

105100
private static ValidationResult doCheckYaml(String value) {
106101
ValidationResult vres = new ValidationResult();
107-
Yaml yaml = new Yaml();
102+
Yaml yaml = new Yaml(new SafeConstructor());
108103
try {
109104
yaml.load(value);
110105
vres.setResult(true);
@@ -115,7 +110,7 @@ private static ValidationResult doCheckYaml(String value) {
115110
return vres;
116111
}
117112

118-
@Extension
113+
@Extension @Symbol("validatingYamlParameter")
119114
public static class DescriptorImpl extends ParameterDescriptor {
120115

121116
@Override
@@ -126,6 +121,7 @@ public String getDisplayName() {
126121
/**
127122
* Check yaml syntax
128123
*/
124+
@POST
129125
public FormValidation doValidate(
130126
@QueryParameter("value") final String value,
131127
@QueryParameter("failedValidationMessage") final String failedValidationMessage
@@ -153,8 +149,6 @@ public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
153149
throw new Failure("Req: Invalid YAML syntax for parameter [" + getName() + "] specified: " + req_value);
154150
}
155151

156-
value.setSyntaxHighlighting(getSyntaxHighlighting());
157-
158152
return value;
159153
}
160154

@@ -169,7 +163,7 @@ public ParameterValue createValue(StaplerRequest req) {
169163
if (!vres.result) {
170164
throw new Failure("Req: Invalid value for parameter [" + getName() + "] specified: " + value[0]);
171165
}
172-
return new ValidatingYamlParameterValue(getName(), value[0], getSyntaxHighlighting());
166+
return new ValidatingYamlParameterValue(getName(), value[0]);
173167
}
174168
}
175169

@@ -182,15 +176,15 @@ public ParameterValue createValue(CLICommand command, String value) throws IOExc
182176
if (!vres.result) {
183177
throw new AbortException("Invalid value for parameter [" + getName() + "] specified: " + value);
184178
}
185-
return new ValidatingYamlParameterValue(getName(), value, syntaxHighlighting, failedValidationMessage);
179+
return new ValidatingYamlParameterValue(getName(), value, failedValidationMessage);
186180
}
187181
}
188182

189183
@Override
190184
public ParameterDefinition copyWithDefaultValue(ParameterValue defaultValue) {
191185
if (defaultValue instanceof ValidatingYamlParameterValue) {
192186
ValidatingYamlParameterValue value = (ValidatingYamlParameterValue) defaultValue;
193-
return new ValidatingYamlParameterDefinition(getName(), value.value, getSyntaxHighlighting(), getFailedValidationMessage(), getDescription());
187+
return new ValidatingYamlParameterDefinition(getName(), value.value, getFailedValidationMessage(), getDescription());
194188
} else {
195189
return this;
196190
}

src/main/java/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterValue.java

+7-22
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
import hudson.tasks.BuildWrapper;
3333
import java.io.IOException;
3434
import org.kohsuke.stapler.DataBoundConstructor;
35+
import org.kohsuke.stapler.DataBoundSetter;
3536
import org.yaml.snakeyaml.Yaml;
37+
import org.yaml.snakeyaml.constructor.SafeConstructor;
3638

3739
/**
3840
*
@@ -48,43 +50,26 @@ public ValidatingYamlParameterValue(String name, String value) {
4850
super(name, value);
4951
}
5052

51-
public ValidatingYamlParameterValue(String name, String value, boolean syntaxHighlighting) {
53+
public ValidatingYamlParameterValue(String name, String value, String failedValidationMessage) {
5254
super(name, value);
53-
this.syntaxHighlighting = syntaxHighlighting;
54-
}
55-
public ValidatingYamlParameterValue(String name, String value, boolean syntaxHighlighting, String failedValidationMessage) {
56-
super(name, value);
57-
this.syntaxHighlighting = syntaxHighlighting;
5855
this.failedValidationMessage = failedValidationMessage;
5956
}
60-
public ValidatingYamlParameterValue(String name, String value, boolean syntaxHighlighting, String failedValidationMessage, String description) {
57+
public ValidatingYamlParameterValue(String name, String value, String failedValidationMessage, String description) {
6158
super(name, value, description);
62-
this.syntaxHighlighting = syntaxHighlighting;
6359
this.failedValidationMessage = failedValidationMessage;
6460
}
6561

6662
public String getFailedValidationMessage() {
6763
return failedValidationMessage;
6864
}
6965

66+
@DataBoundSetter
7067
public void setFailedValidationMessage(String failedValidationMessage) {
7168
this.failedValidationMessage = failedValidationMessage;
7269
}
7370

74-
public void setSyntaxHighlighting(boolean syntaxHighlighting) {
75-
this.syntaxHighlighting = syntaxHighlighting;
76-
}
77-
78-
public boolean getSyntaxHighlighting() {
79-
return syntaxHighlighting;
80-
}
81-
82-
/* public String getValue() {
83-
return value;
84-
}
85-
*/
86-
public boolean doCheckYaml(String value) {
87-
Yaml yaml = new Yaml();
71+
private boolean doCheckYaml(String value) {
72+
Yaml yaml = new Yaml(new SafeConstructor());
8873
try {
8974
yaml.load(value);
9075
return true;

src/main/resources/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterDefinition/config.jelly

+1-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@ THE SOFTWARE.
3030
<f:textbox />
3131
</f:entry>
3232
<f:entry title="${%Default Value}" field="defaultValue">
33-
<f:textbox />
34-
</f:entry>
35-
<f:entry title="${%SyntaxHighlighting}" field="syntaxHighlighting">
36-
<f:checkbox />
33+
<f:textarea codemirror-mode="yaml" />
3734
</f:entry>
3835
<f:entry title="${%Failed Validation Message}" field="failedValidationMessage">
3936
<f:textbox />

src/main/resources/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterDefinition/index.jelly

+2-8
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,11 @@ THE SOFTWARE.
2828
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
2929
<j:set var="escapeEntryTitleAndDescription" value="false"/>
3030

31-
<f:entry title="${h.xmlEscape(it.name)}" description="${it.formattedDescription}">
31+
<f:entry title="${h.xmlEscape(it.name)}" description="${it.formattedDescription}" >
3232
<div name="parameter" description="${it.formattedDescription}">
3333
<input type="hidden" name="name" value="${it.name}" />
34-
<j:if test="${!it.syntaxHighlighting}">
35-
<f:textarea name="value" value="${it.defaultValue}"
36-
checkUrl="'${rootURL}/descriptorByName/io.jenkins.plugins.validating_yaml_parameter.ValidatingYamlParameterDefinition/validate?value='+encodeURIComponent(this.value)"/>
37-
</j:if>
38-
<j:if test="${it.syntaxHighlighting}">
3934
<f:textarea codemirror-mode="yaml" name="value" value="${it.defaultValue}"
40-
checkUrl="'${rootURL}/descriptorByName/io.jenkins.plugins.validating_yaml_parameter.ValidatingYamlParameterDefinition/validate?value='+encodeURIComponent(this.value)"/>
41-
</j:if>
35+
checkUrl="'${rootURL}/descriptorByName/io.jenkins.plugins.validating_yaml_parameter.ValidatingYamlParameterDefinition/validate?value='+encodeURIComponent(this.value)" checkMethod="post" />
4236
</div>
4337
</f:entry>
4438
</j:jelly>

src/main/resources/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterValue/value.jelly

+2-7
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,7 @@ THE SOFTWARE.
2828
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
2929
<j:set var="escapeEntryTitleAndDescription" value="false"/>
3030

31-
<f:entry title="${h.xmlEscape(it.name)}" description="${it.formattedDescription}">
32-
<j:if test="${!it.syntaxHighlighting}">
33-
<f:textarea name="value" value="${it.value}" />
34-
</j:if>
35-
<j:if test="${it.syntaxHighlighting}">
36-
<f:textarea codemirror-mode="yaml" name="value" value="${it.value}" />
37-
</j:if>
31+
<f:entry title="${h.xmlEscape(it.name)}" description="${it.formattedDescription}" >
32+
<f:textarea codemirror-mode="yaml" name="value" value="${it.value}" checkMethod="post" />
3833
</f:entry>
3934
</j:jelly>

src/test/java/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterDefinitionTest.java

+13-14
Original file line numberDiff line numberDiff line change
@@ -43,43 +43,42 @@
4343
*/
4444
@RunWith(MockitoJUnitRunner.class)
4545
public class ValidatingYamlParameterDefinitionTest {
46-
46+
4747
@Mock
4848
private StaplerRequest req;
49-
49+
5050
@Mock
5151
private CLICommand cliCommand;
52-
52+
5353
@Test
5454
public void simpleConfiguration() throws Exception {
55-
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1\nkey2: value2\n", true, "msg", "yaml validation");
55+
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1\nkey2: value2\n", "msg", "yaml validation");
5656
assertEquals("DUMMY", d.getName());
5757
assertEquals("---\nkey1: value1\nkey2: value2\n", d.getDefaultValue());
58-
assertEquals(true, d.getSyntaxHighlighting());
5958
assertEquals("msg", d.getFailedValidationMessage());
6059
assertEquals("yaml validation", d.getDescription());
6160
Mockito.when(req.getParameterValues("DUMMY")).thenReturn(new String[]{"---\nkey1: value1\nkey2: value2\n"});
62-
assertEquals(new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1\nkey2: value2\n", true), d.createValue(req));
61+
assertEquals(new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1\nkey2: value2\n"), d.createValue(req));
6362
JSONObject jo = new JSONObject();
64-
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1\nkey2: value2\n", true);
63+
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1\nkey2: value2\n");
6564
Mockito.when(req.bindJSON(ValidatingYamlParameterValue.class, jo)).thenReturn(v);
66-
assertEquals(v, d.createValue(req, jo));
65+
assertEquals(v, d.createValue(req, jo));
6766
}
68-
67+
6968
@Test(expected = Failure.class)
7069
public void failedCreateValueStapler() {
71-
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1: value2", true, "yaml syntax error", "description");
70+
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1: value2", "yaml syntax error", "description");
7271
Mockito.when(req.getParameterValues("DUMMY")).thenReturn(new String[]{"---\nkey1: value1: value2\n"});
7372
d.createValue(req);
7473
}
75-
74+
7675
@Test(expected = Failure.class)
7776
public void failedCreateValueJSONObject() {
78-
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1: value2\n", true, "yaml syntax error", "Description");
79-
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1: value2", true);
77+
ValidatingYamlParameterDefinition d = new ValidatingYamlParameterDefinition("DUMMY", "---\nkey1: value1: value2\n", "yaml syntax error", "Description");
78+
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\nkey1: value1: value2");
8079
JSONObject jo = new JSONObject();
8180
Mockito.when(req.bindJSON(ValidatingYamlParameterValue.class, jo)).thenReturn(v);
8281
d.createValue(req, jo);
8382
}
84-
83+
8584
}

src/test/java/io/jenkins/plugins/validating_yaml_parameter/ValidatingYamlParameterValueTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class ValidatingYamlParameterValueTest {
3535

3636
@Test
3737
public void equals() {
38-
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\ntest1: value1\n", true);
38+
ValidatingYamlParameterValue v = new ValidatingYamlParameterValue("DUMMY", "---\ntest1: value1\n", "error validating yaml");
3939
assertEquals(v, v);
4040
}
4141
}

0 commit comments

Comments
 (0)