Skip to content

Commit

Permalink
fix: avoiding flatterning JSON when resolving entire payload with $
Browse files Browse the repository at this point in the history
… (refs #237)
  • Loading branch information
tomasbjerre committed Sep 10, 2022
1 parent fa09741 commit d248803
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 47 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -1864,3 +1864,19 @@ Changelog of generic-webhook-trigger-plugin.
[ec4a3](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/ec4a38b96200c76) Tomas Bjerre *2017-03-09 04:42:06*


## 1.0 (2017-03-09)







### Other changes

**Initial**


[32c89](https://github.com/jenkinsci/generic-webhook-trigger-plugin/commit/32c89bb52ac8a57) Tomas Bjerre *2017-03-08 16:27:37*


4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
<jenkins.version>2.222.4</jenkins.version>
<findbugs.failOnError>false</findbugs.failOnError>
<maven.javadoc.skip>true</maven.javadoc.skip>
<violations.version>1.48</violations.version>
<changelog>1.86</changelog>
<violations.version>1.50.1</violations.version>
<changelog>1.92</changelog>
</properties>

<artifactId>generic-webhook-trigger</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion run.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/sh
mvn versions:update-properties
mvn hpi:run -Djava.util.logging.config.file=logging.properties -Djenkins.version=2.277.4 -Denforcer.skip=true
mvn hpi:run -Djava.util.logging.config.file=logging.properties -Djenkins.version=2.346.3 -Denforcer.skip=true
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,13 @@ private Map<String, String> resolveJsonPath(
final String incomingPostContent, final GenericVariable gv) {
try {
final Object resolved = JsonPath.read(incomingPostContent, gv.getExpression());
final Map<String, String> flatterned =
this.jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved);
if (gv.getExpression().trim().equals("$")) {
final Map<String, String> flatterned = new HashMap<>();
flatterned.put(gv.getVariableName(), incomingPostContent);
return flatterned;
} else {
return this.jsonFlattener.flattenJson(gv.getVariableName(), gv.getRegexpFilter(), resolved);
}
return flatterned;
} catch (final PathNotFoundException e) {
return new HashMap<>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class VariablesResolverJsonPathTest {
@Test
public void testJSONPathGetOneLeaf() throws Exception {
final String resourceName = "one-leaf.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables) //
.containsEntry("variableName_name", "Administrator") //
Expand All @@ -32,7 +32,7 @@ public void testJSONPathGetOneLeaf() throws Exception {
@Test
public void testJSONPathGetTwoLeafs() throws Exception {
final String resourceName = "two-leafs.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables) //
.containsEntry("variableName_name", "Administrator") //
Expand All @@ -46,7 +46,7 @@ public void testJSONPathGetTwoLeafs() throws Exception {
@Test
public void testJSONPathGetOneListItem() throws Exception {
final String resourceName = "one-list-item.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables.keySet()) //
.containsOnly("variableName", "variableName_0_name");
Expand All @@ -60,20 +60,20 @@ public void testJSONPathGetOneListItem() throws Exception {
@Test
public void testJSONPathGetRootItem() throws Exception {
final String resourceName = "one-list-item.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$");

assertThat(variables.keySet()) //
.containsOnly("variableName", "variableName_user_0_name");
.containsOnly("variableName");
assertThat(variables.get("variableName").replaceAll("\\n|\\r\\n|\\s", "")) //
.isEqualToIgnoringWhitespace("{\"user\":[{\"name\":\"Administrator\"}]}");
assertThat(variables.get("variableName_user_0_name")) //
.isEqualTo("Administrator");
.isNull();
}

@Test
public void testJSONPathGetTwoListItems() throws Exception {
final String resourceName = "two-list-items.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables.keySet()) //
.containsOnly("variableName", "variableName_0_name", "variableName_1_username");
Expand All @@ -89,7 +89,7 @@ public void testJSONPathGetTwoListItems() throws Exception {
@Test
public void testJSONPathGetSeveralMixedListItems() throws Exception {
final String resourceName = "several-mixed-list-items.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables) //
.containsEntry("variableName_0_name", "Administrator") //
Expand All @@ -110,7 +110,7 @@ public void testJSONPathGetSeveralMixedListItems() throws Exception {
@Test
public void testJSONPathGetNullValues() throws Exception {
final Map<String, String> variables =
getJsonPathVariablesFromContent("$", "{\"a\": null,\"b\": \"value\"}");
this.getJsonPathVariablesFromContent("$", "{\"a\": null,\"b\": \"value\"}");

assertThat(variables.get("variableName")) //
.isEqualTo("{\"a\": null,\"b\": \"value\"}");
Expand All @@ -119,7 +119,7 @@ public void testJSONPathGetNullValues() throws Exception {
@Test
public void testJSONPathGetAllVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final List<GenericVariable> genericVariables =
newArrayList( //
Expand All @@ -134,12 +134,12 @@ public void testJSONPathGetAllVariable() throws Exception {
genericRequestVariables.add(new GenericRequestVariable("reqp2", ""));
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand Down Expand Up @@ -182,12 +182,12 @@ public void testGenericRequestParameters() throws Exception {

final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand All @@ -203,7 +203,7 @@ public void testGenericRequestParameters() throws Exception {
@Test
public void testJSONPathGetZeroMatchingVariables() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final List<GenericVariable> genericVariables =
newArrayList( //
Expand All @@ -212,12 +212,12 @@ public void testJSONPathGetZeroMatchingVariables() throws Exception {
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand All @@ -230,7 +230,7 @@ public void testJSONPathGetZeroMatchingVariables() throws Exception {
@Test
public void testJSONPathGetOneVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final List<GenericVariable> genericVariables =
newArrayList( //
Expand All @@ -239,12 +239,12 @@ public void testJSONPathGetOneVariable() throws Exception {
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand All @@ -255,7 +255,7 @@ public void testJSONPathGetOneVariable() throws Exception {
@Test
public void testJSONPathGetTwoVariables() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final GenericVariable genericVariable1 = new GenericVariable("user_name", "$.user.name");
genericVariable1.setRegexpFilter("[aA]");
Expand All @@ -267,12 +267,12 @@ public void testJSONPathGetTwoVariables() throws Exception {
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand All @@ -284,7 +284,7 @@ public void testJSONPathGetTwoVariables() throws Exception {
@Test
public void testJSONPathGetNodeVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final Map<String, String> variables = getJsonPathVariables(resourceName, "$.user");
final Map<String, String> variables = this.getJsonPathVariables(resourceName, "$.user");

assertThat(variables) //
.containsEntry("variableName_name", "Administrator");
Expand All @@ -293,7 +293,7 @@ public void testJSONPathGetNodeVariable() throws Exception {
@Test
public void testJSONPathGetPayloadVariable() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final List<GenericVariable> genericVariables =
newArrayList( //
Expand All @@ -302,22 +302,23 @@ public void testJSONPathGetPayloadVariable() throws Exception {
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
.containsEntry("payload_user_name", "Administrator");
.hasSize(1)
.containsEntry("payload", postContent);
}

@Test
public void testJSONPathGetPayloadVariableDefault() throws Exception {
final String resourceName = "gitlab-mergerequest-comment.json";
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

final GenericVariable genericVariable = new GenericVariable("payload", "$.doesnotexist");
genericVariable.setDefaultValue("this is the default");
Expand All @@ -328,12 +329,12 @@ public void testJSONPathGetPayloadVariableDefault() throws Exception {
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();

assertThat(variables) //
Expand All @@ -344,7 +345,7 @@ public void testJSONPathGetPayloadVariableDefault() throws Exception {
public void testStarOperator() throws Exception {
final String resourceName = "github-push-event.json";
final Map<String, String> variables =
getJsonPathVariables(resourceName, "$.commits[*].modified[*]");
this.getJsonPathVariables(resourceName, "$.commits[*].modified[*]");

assertThat(variables.keySet()) //
.containsOnly("variableName", "variableName_0");
Expand All @@ -358,7 +359,7 @@ public void testStarOperator() throws Exception {
public void testCommaOperator() throws Exception {
final String resourceName = "github-push-event.json";
final Map<String, String> variables =
getJsonPathVariables(resourceName, "$.commits[*].['modified','added','removed'][*]");
this.getJsonPathVariables(resourceName, "$.commits[*].['modified','added','removed'][*]");

assertThat(variables.keySet()) //
.containsOnly("variableName", "variableName_0");
Expand All @@ -370,9 +371,9 @@ public void testCommaOperator() throws Exception {

private Map<String, String> getJsonPathVariables(
final String resourceName, final String jsonPath) {
final String postContent = getContent(resourceName);
final String postContent = this.getContent(resourceName);

return getJsonPathVariablesFromContent(jsonPath, postContent);
return this.getJsonPathVariablesFromContent(jsonPath, postContent);
}

private Map<String, String> getJsonPathVariablesFromContent(
Expand All @@ -384,12 +385,12 @@ private Map<String, String> getJsonPathVariablesFromContent(
final List<GenericRequestVariable> genericRequestVariables = new ArrayList<>();
final Map<String, String> variables =
new VariablesResolver(
headers,
this.headers,
parameterMap,
postContent,
genericVariables,
genericRequestVariables,
genericHeaderVariables)
this.genericHeaderVariables)
.getVariables();
return variables;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ Feature: It should be possible to parse JSON post content with JSONPath.
| variable | expression | expressionType | defaultValue | regexpFilter |
| everything | $ | JSONPath | | |

Then variables are resolved to:
| variable | value |
| everything_ref | refs/heads/develop |
| everything_head_commit_committer_name | baxterthehacker |
Then variable everything is resolved to:
"""
{
Expand Down

0 comments on commit d248803

Please sign in to comment.