Skip to content

Commit d7351c8

Browse files
committed
Payload json now in pojo and used in cause
1 parent 99bdb2c commit d7351c8

File tree

7 files changed

+174
-27
lines changed

7 files changed

+174
-27
lines changed

pom.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,6 @@
120120
<version>6.3</version>
121121
<scope>test</scope>
122122
</dependency>
123-
<dependency>
124-
<groupId>com.fasterxml.jackson.core</groupId>
125-
<artifactId>jackson-databind</artifactId>
126-
<version>2.8.3</version>
127-
<scope>compile</scope>
128-
</dependency>
129-
<dependency>
130-
<groupId>com.fasterxml.jackson.core</groupId>
131-
<artifactId>jackson-databind</artifactId>
132-
<version>2.8.3</version>
133-
<scope>compile</scope>
134-
</dependency>
135123
</dependencies>
136124

137125
<build>

src/main/java/org/jenkinsci/plugins/gogs/GogsCause.java

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,76 @@ associated documentation files (the "Software"), to deal in the Software without
2323

2424
package org.jenkinsci.plugins.gogs;
2525

26+
import com.fasterxml.jackson.core.type.TypeReference;
27+
import com.fasterxml.jackson.databind.DeserializationFeature;
28+
import com.fasterxml.jackson.databind.ObjectMapper;
2629
import hudson.model.Cause;
2730

31+
import java.util.HashMap;
32+
import java.util.Map;
33+
import java.util.logging.Logger;
34+
2835
class GogsCause extends Cause {
29-
private final String deliveryID;
36+
private String deliveryID;
37+
private GogsPayloadData gogsPayloadData;
38+
private Map<String, String> envVars = new HashMap<>();
39+
private final static Logger LOGGER = Logger.getLogger(GogsCause.class.getName());
40+
41+
42+
public GogsCause() {
43+
}
3044

3145
public GogsCause(String deliveryID) {
3246
this.deliveryID = deliveryID;
3347
}
3448

49+
public String getDeliveryID() {
50+
return deliveryID;
51+
}
52+
53+
public Map<String, String> getEnvVars() {
54+
return envVars;
55+
}
56+
57+
public void setDeliveryID(String deliveryID) {
58+
this.deliveryID = deliveryID;
59+
}
60+
61+
public void setGogsPayloadData(String json) {
62+
Map<String, Object> map = null;
63+
64+
ObjectMapper objectMapper = new ObjectMapper();
65+
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
66+
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
67+
68+
try {
69+
gogsPayloadData = objectMapper.readValue(json, GogsPayloadData.class);
70+
map = objectMapper.convertValue(gogsPayloadData, new TypeReference<Map<String, Object>>() {
71+
});
72+
} catch (Exception e) {
73+
LOGGER.severe(e.getMessage());
74+
}
75+
if (gogsPayloadData != null) {
76+
iterate(map, null);
77+
}
78+
79+
}
80+
81+
private void iterate(Map<String, Object> map, String prefix) {
82+
for (Map.Entry<String, Object> entry : map.entrySet()) {
83+
StringBuilder env_name = new StringBuilder();
84+
if (prefix != null)
85+
env_name.append(prefix.toUpperCase()).append("_");
86+
87+
if (entry.getValue() instanceof Map) {
88+
iterate((Map<String, Object>) entry.getValue(), env_name + entry.getKey().toUpperCase());
89+
} else if (entry.getValue() instanceof String || entry.getValue() instanceof Long || entry.getValue() instanceof Boolean) {
90+
env_name.append(entry.getKey().toUpperCase());
91+
envVars.put("GOGS_" + env_name.toString(), entry.getValue().toString());
92+
}
93+
}
94+
}
95+
3596
@Override
3697
public String getShortDescription() {
3798
return this.deliveryID;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.jenkinsci.plugins.gogs;
2+
3+
import hudson.EnvVars;
4+
import hudson.Extension;
5+
import hudson.model.Run;
6+
import hudson.model.TaskListener;
7+
import jenkins.model.CoreEnvironmentContributor;
8+
9+
import javax.annotation.Nonnull;
10+
import java.io.IOException;
11+
12+
@Extension
13+
public class GogsEnvironmentContributor extends CoreEnvironmentContributor {
14+
@Override
15+
public void buildEnvironmentFor(@Nonnull Run r, @Nonnull EnvVars envs, @Nonnull TaskListener listener)
16+
throws IOException, InterruptedException {
17+
GogsCause gogsCause;
18+
19+
gogsCause = (GogsCause) r.getCause(GogsCause.class);
20+
if (gogsCause != null) {
21+
envs.putAll(gogsCause.getEnvVars());
22+
}
23+
}
24+
}

src/main/java/org/jenkinsci/plugins/gogs/GogsPayload.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,27 @@
1111
import java.util.logging.Logger;
1212

1313
class GogsPayload extends InvisibleAction implements EnvironmentContributingAction {
14-
private final Map<String, String> payload;
14+
private Map<String, String> payload;
15+
private GogsCause gogsCause;
1516

1617
public GogsPayload(Map<String, String> payload) {
1718
this.payload = payload;
1819
}
1920

21+
public GogsPayload(GogsCause gogsCause) {
22+
this.gogsCause = gogsCause;
23+
}
24+
2025
@Nonnull
21-
private Map<String, String> getPayload() {
26+
public Map<String, String> getPayload() {
2227
return payload;
2328
}
2429

2530
@Override
2631
public void buildEnvVars(AbstractBuild<?, ?> abstractBuild, EnvVars envVars) {
2732
LOGGER.log(Level.FINEST, "Injecting GOGS_PAYLOAD: {0}", getPayload());
28-
payload.forEach((key, value) -> envVars.put("GOGS_" + key.toUpperCase(), value));
33+
// payload.forEach((key, value) -> envVars.put("GOGS_" + key.toUpperCase(), value));
34+
envVars.putAll(gogsCause.getEnvVars());
2935
}
3036

3137
private static final Logger LOGGER = Logger.getLogger(GogsPayload.class.getName());
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.jenkinsci.plugins.gogs;
2+
3+
import java.util.List;
4+
5+
public class GogsPayloadData {
6+
public static class UserDetails {
7+
public String name;
8+
public String email;
9+
public String username;
10+
}
11+
12+
public static class Owner {
13+
public Long id;
14+
public String login;
15+
public String full_name;
16+
public String email;
17+
public String avatar_url;
18+
public String username;
19+
}
20+
21+
public static class Commits {
22+
public String id;
23+
public String message;
24+
public String url;
25+
public UserDetails author;
26+
public UserDetails committer;
27+
public List<String> added;
28+
public List<String> removed;
29+
public List<String> modified;
30+
public String timestamp;
31+
}
32+
33+
public static class Repository {
34+
public Long id;
35+
public Owner owner;
36+
public String name;
37+
public String full_name;
38+
public String description;
39+
public Boolean Private;
40+
public Boolean fork;
41+
public Boolean parent;
42+
public Boolean empty;
43+
public Boolean mirror;
44+
public Long size;
45+
public String html_url;
46+
public String ssh_url;
47+
public String clone_url;
48+
public String website;
49+
public Long stars_count;
50+
public Long forks_count;
51+
public Long watchers_count;
52+
public Long open_issues_count;
53+
public String default_branch;
54+
public String created_at;
55+
public String updated_at;
56+
}
57+
58+
public String ref;
59+
public String before;
60+
public String after;
61+
public String compare_url;
62+
public List<Commits> commits;
63+
public Repository repository;
64+
public Owner pusher;
65+
public Owner sender;
66+
}

src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ associated documentation files (the "Software"), to deal in the Software without
2424
package org.jenkinsci.plugins.gogs;
2525

2626
import hudson.model.BuildableItem;
27-
import hudson.model.Cause;
2827
import hudson.security.ACL;
2928
import jenkins.triggers.SCMTriggerItem;
3029
import org.acegisecurity.context.SecurityContext;
@@ -43,30 +42,31 @@ associated documentation files (the "Software"), to deal in the Software without
4342
class GogsPayloadProcessor {
4443
private static final Logger LOGGER = Logger.getLogger(GogsPayloadProcessor.class.getName());
4544
private final Map<String, String> payload = new HashMap<>();
45+
private GogsCause gogsCause = new GogsCause();
4646

4747
GogsPayloadProcessor() {
4848
}
4949

50-
public void setPayload(String k, String v) {
51-
this.payload.put(k, v);
50+
public void setCause(GogsCause gogsCause) {
51+
this.gogsCause = gogsCause;
5252
}
5353

54-
public GogsResults triggerJobs(String jobName, String deliveryID) {
54+
public GogsResults triggerJobs(String jobName) {
5555
AtomicBoolean jobdone = new AtomicBoolean(false);
5656
SecurityContext saveCtx = ACL.impersonate(ACL.SYSTEM);
5757
GogsResults result = new GogsResults();
5858

5959
try {
6060
BuildableItem project = GogsUtils.find(jobName, BuildableItem.class);
6161
if (project != null) {
62-
Cause cause = new GogsCause(deliveryID);
6362

6463
if (project instanceof ParameterizedJob) {
6564
ParameterizedJob pJob = (ParameterizedJob) project;
6665
pJob.getTriggers().values().stream()
6766
.filter(trigger1 -> trigger1 instanceof GogsTrigger).findFirst()
6867
.ifPresent((g) -> {
69-
GogsPayload gogsPayload = new GogsPayload(this.payload);
68+
// GogsPayload gogsPayload = new GogsPayload(this.payload);
69+
GogsPayload gogsPayload = new GogsPayload(this.gogsCause);
7070
Optional.ofNullable(SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project))
7171
.ifPresent((item) -> {
7272
item.scheduleBuild2(0, gogsPayload);
@@ -75,7 +75,7 @@ public GogsResults triggerJobs(String jobName, String deliveryID) {
7575
});
7676
}
7777
if (!jobdone.get()) {
78-
project.scheduleBuild(0, cause);
78+
project.scheduleBuild(0, gogsCause);
7979
jobdone.set(true);
8080
}
8181
}

src/main/java/org/jenkinsci/plugins/gogs/GogsWebHook.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ private void setGogsSignature(String gogsSignature) {
105105
*/
106106
public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException {
107107
GogsPayloadProcessor payloadProcessor = new GogsPayloadProcessor();
108+
GogsCause gogsCause = new GogsCause();
108109

109110
if (!sanityChecks(req, rsp)) {
110111
return;
@@ -140,8 +141,9 @@ public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException
140141

141142
AtomicReference<String> jSecret = new AtomicReference<>(null);
142143
AtomicBoolean foundJob = new AtomicBoolean(false);
143-
payloadProcessor.setPayload("ref", jsonObject.getString("ref"));
144-
payloadProcessor.setPayload("before", jsonObject.getString("before"));
144+
gogsCause.setGogsPayloadData(jsonObject.toString());
145+
gogsCause.setDeliveryID(getGogsDelivery());
146+
payloadProcessor.setCause(gogsCause);
145147

146148
SecurityContext saveCtx = ACL.impersonate(ACL.SYSTEM);
147149

@@ -183,10 +185,10 @@ public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException
183185
LOGGER.warning(msg);
184186
} else if (isNullOrEmpty(jSecret.get()) && isNullOrEmpty(gSecret)) {
185187
/* No password is set in Jenkins and Gogs, run without secrets */
186-
result = payloadProcessor.triggerJobs(jobName, getGogsDelivery());
188+
result = payloadProcessor.triggerJobs(jobName);
187189
} else if (!isNullOrEmpty(jSecret.get()) && jSecret.get().equals(gSecret)) {
188190
/* Password is set in Jenkins and Gogs, and is correct */
189-
result = payloadProcessor.triggerJobs(jobName, getGogsDelivery());
191+
result = payloadProcessor.triggerJobs(jobName);
190192
} else {
191193
/* Gogs and Jenkins secrets differs */
192194
result.setStatus(403, "Incorrect secret");

0 commit comments

Comments
 (0)