From 97b50e81e119dfe5641417dd0de08093531d329d Mon Sep 17 00:00:00 2001 From: Greg Messner Date: Sat, 18 Aug 2018 22:16:16 -0700 Subject: [PATCH] Mods to support requestUrl and requestQuesyString properties (#238). --- .../systemhooks/AbstractSystemHookEvent.java | 31 +++++++++++++++++++ .../GroupMemberSystemHookEvent.java | 6 ++-- .../api/systemhooks/GroupSystemHookEvent.java | 3 +- .../api/systemhooks/KeySystemHookEvent.java | 2 +- .../systemhooks/ProjectSystemHookEvent.java | 2 +- .../RepositorySystemHookEvent.java | 3 +- .../api/systemhooks/SystemHookEvent.java | 10 +++++- .../api/systemhooks/SystemHookManager.java | 2 ++ .../TeamMemberSystemHookEvent.java | 2 +- .../api/systemhooks/UserSystemHookEvent.java | 2 +- .../gitlab4j/api/webhook/AbstractEvent.java | 31 +++++++++++++++++++ .../api/webhook/AbstractPushEvent.java | 21 +++++++++++++ .../org/gitlab4j/api/webhook/BuildEvent.java | 2 +- .../java/org/gitlab4j/api/webhook/Event.java | 13 +++++++- .../org/gitlab4j/api/webhook/IssueEvent.java | 2 +- .../api/webhook/MergeRequestEvent.java | 2 +- .../org/gitlab4j/api/webhook/NoteEvent.java | 2 +- .../gitlab4j/api/webhook/PipelineEvent.java | 2 +- .../org/gitlab4j/api/webhook/PushEvent.java | 3 +- .../gitlab4j/api/webhook/WebHookManager.java | 3 ++ .../gitlab4j/api/webhook/WikiPageEvent.java | 2 +- 21 files changed, 126 insertions(+), 20 deletions(-) create mode 100644 src/main/java/org/gitlab4j/api/systemhooks/AbstractSystemHookEvent.java create mode 100644 src/main/java/org/gitlab4j/api/webhook/AbstractEvent.java diff --git a/src/main/java/org/gitlab4j/api/systemhooks/AbstractSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/AbstractSystemHookEvent.java new file mode 100644 index 00000000..d72c8751 --- /dev/null +++ b/src/main/java/org/gitlab4j/api/systemhooks/AbstractSystemHookEvent.java @@ -0,0 +1,31 @@ +package org.gitlab4j.api.systemhooks; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public abstract class AbstractSystemHookEvent implements SystemHookEvent { + + private String requestUrl; + private String requestQuesryString; + + @Override + public void setRequestUrl(String requestUrl) { + this.requestUrl = requestUrl; + } + + @Override + @JsonIgnore + public String getRequestUrl() { + return (requestUrl); + } + + @Override + public void setRequestQueryString(String requestQuesryString) { + this.requestQuesryString = requestQuesryString; + } + + @Override + @JsonIgnore + public String getRequestQueryString() { + return (requestQuesryString); + } +} diff --git a/src/main/java/org/gitlab4j/api/systemhooks/GroupMemberSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/GroupMemberSystemHookEvent.java index da6dcc38..916cab2d 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/GroupMemberSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/GroupMemberSystemHookEvent.java @@ -8,11 +8,11 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class GroupMemberSystemHookEvent implements SystemHookEvent { - +public class GroupMemberSystemHookEvent extends AbstractSystemHookEvent { + public static final String NEW_GROUP_MEMBER_EVENT = "user_add_to_group"; public static final String GROUP_MEMBER_REMOVED_EVENT = "user_remove_from_group"; - + private Date createdAt; private Date updatedAt; private String eventName; diff --git a/src/main/java/org/gitlab4j/api/systemhooks/GroupSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/GroupSystemHookEvent.java index 546178f6..bc425786 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/GroupSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/GroupSystemHookEvent.java @@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class GroupSystemHookEvent implements SystemHookEvent { +public class GroupSystemHookEvent extends AbstractSystemHookEvent { public static final String GROUP_CREATE_EVENT = "group_create"; public static final String GROUP_DESTROY_EVENT = "group_destroy"; @@ -26,7 +26,6 @@ public class GroupSystemHookEvent implements SystemHookEvent { private String oldPath; private String oldFullPath; - public Date getCreatedAt() { return createdAt; } diff --git a/src/main/java/org/gitlab4j/api/systemhooks/KeySystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/KeySystemHookEvent.java index 91cb019f..30a37343 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/KeySystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/KeySystemHookEvent.java @@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class KeySystemHookEvent implements SystemHookEvent { +public class KeySystemHookEvent extends AbstractSystemHookEvent { public static final String KEY_CREATE_EVENT = "key_create"; public static final String KEY_DESTROY_EVENT = "key_destroy"; diff --git a/src/main/java/org/gitlab4j/api/systemhooks/ProjectSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/ProjectSystemHookEvent.java index 39ba57f2..85ebf90f 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/ProjectSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/ProjectSystemHookEvent.java @@ -10,7 +10,7 @@ import org.gitlab4j.api.models.Visibility; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class ProjectSystemHookEvent implements SystemHookEvent { +public class ProjectSystemHookEvent extends AbstractSystemHookEvent { public static final String PROJECT_CREATE_EVENT = "project_create"; public static final String PROJECT_DESTROY_EVENT = "project_destroy"; diff --git a/src/main/java/org/gitlab4j/api/systemhooks/RepositorySystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/RepositorySystemHookEvent.java index bef380a1..e50a3faf 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/RepositorySystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/RepositorySystemHookEvent.java @@ -10,7 +10,7 @@ import org.gitlab4j.api.webhook.EventProject; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class RepositorySystemHookEvent implements SystemHookEvent { +public class RepositorySystemHookEvent extends AbstractSystemHookEvent { public static final String REPOSITORY_UPDATE_EVENT = "repository_update"; @@ -26,7 +26,6 @@ public class RepositorySystemHookEvent implements SystemHookEvent { private List changes; private List refs; - public String getEventName() { return (eventName); } diff --git a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java index 3dc84588..5ea17981 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java @@ -1,5 +1,6 @@ package org.gitlab4j.api.systemhooks; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -28,7 +29,14 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonSubTypes.Type(value = RepositorySystemHookEvent.class, name = RepositorySystemHookEvent.REPOSITORY_UPDATE_EVENT) }) public interface SystemHookEvent { - public String getEventName(); + + String getEventName(); + + void setRequestUrl(String requestUrl); + @JsonIgnore String getRequestUrl(); + + void setRequestQueryString(String requestQuesryString); + @JsonIgnore String getRequestQueryString(); } // All of the following class definitions are needed to make the above work. diff --git a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java index 73d00af9..15f2c577 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java @@ -82,6 +82,8 @@ public class SystemHookManager extends HookManager { event = jacksonJson.unmarshal(SystemHookEvent.class, reader); } + event.setRequestUrl(request.getRequestURL().toString()); + event.setRequestQueryString(request.getQueryString()); fireEvent(event); } catch (Exception e) { diff --git a/src/main/java/org/gitlab4j/api/systemhooks/TeamMemberSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/TeamMemberSystemHookEvent.java index b75c04d1..efbd0ddc 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/TeamMemberSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/TeamMemberSystemHookEvent.java @@ -10,7 +10,7 @@ import org.gitlab4j.api.models.Visibility; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class TeamMemberSystemHookEvent implements SystemHookEvent { +public class TeamMemberSystemHookEvent extends AbstractSystemHookEvent { public static final String NEW_TEAM_MEMBER_EVENT = "user_add_to_team"; public static final String TEAM_MEMBER_REMOVED_EVENT = "user_remove_from_team"; diff --git a/src/main/java/org/gitlab4j/api/systemhooks/UserSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/UserSystemHookEvent.java index cc6c5689..07c61918 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/UserSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/UserSystemHookEvent.java @@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class UserSystemHookEvent implements SystemHookEvent { +public class UserSystemHookEvent extends AbstractSystemHookEvent { public static final String USER_CREATE_EVENT = "user_create"; public static final String USER_DESTROY_EVENT = "user_destroy"; diff --git a/src/main/java/org/gitlab4j/api/webhook/AbstractEvent.java b/src/main/java/org/gitlab4j/api/webhook/AbstractEvent.java new file mode 100644 index 00000000..d670ded3 --- /dev/null +++ b/src/main/java/org/gitlab4j/api/webhook/AbstractEvent.java @@ -0,0 +1,31 @@ +package org.gitlab4j.api.webhook; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public abstract class AbstractEvent implements Event { + + private String requestUrl; + private String requestQuesryString; + + @Override + public void setRequestUrl(String requestUrl) { + this.requestUrl = requestUrl; + } + + @Override + @JsonIgnore + public String getRequestUrl() { + return (requestUrl); + } + + @Override + public void setRequestQueryString(String requestQuesryString) { + this.requestQuesryString = requestQuesryString; + } + + @Override + @JsonIgnore + public String getRequestQueryString() { + return (requestQuesryString); + } +} diff --git a/src/main/java/org/gitlab4j/api/webhook/AbstractPushEvent.java b/src/main/java/org/gitlab4j/api/webhook/AbstractPushEvent.java index e4e09209..bbcf1796 100644 --- a/src/main/java/org/gitlab4j/api/webhook/AbstractPushEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/AbstractPushEvent.java @@ -28,6 +28,9 @@ public abstract class AbstractPushEvent { private List commits; private Integer totalCommitsCount; + private String requestUrl; + private String requestQuesryString; + public String getEventName() { return (eventName); } @@ -140,6 +143,24 @@ public abstract class AbstractPushEvent { this.totalCommitsCount = totalCommitsCount; } + public void setRequestUrl(String requestUrl) { + this.requestUrl = requestUrl; + } + + @JsonIgnore + public String getRequestUrl() { + return (requestUrl); + } + + public void setRequestQueryString(String requestQuesryString) { + this.requestQuesryString = requestQuesryString; + } + + @JsonIgnore + public String getRequestQueryString() { + return (requestQuesryString); + } + /** * Gets the branch name from the ref. Will return null if the ref does not start with "refs/heads/". * diff --git a/src/main/java/org/gitlab4j/api/webhook/BuildEvent.java b/src/main/java/org/gitlab4j/api/webhook/BuildEvent.java index 5bb94515..9dc9be8f 100644 --- a/src/main/java/org/gitlab4j/api/webhook/BuildEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/BuildEvent.java @@ -8,7 +8,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import org.gitlab4j.api.models.User; @XmlAccessorType(XmlAccessType.FIELD) -public class BuildEvent implements Event { +public class BuildEvent extends AbstractEvent { /** X-Gitlab-Event header value pre GitLab v9.3.0 */ public static final String BUILD_HOOK_X_GITLAB_EVENT = "Build Hook"; diff --git a/src/main/java/org/gitlab4j/api/webhook/Event.java b/src/main/java/org/gitlab4j/api/webhook/Event.java index e86b37dc..1308b715 100644 --- a/src/main/java/org/gitlab4j/api/webhook/Event.java +++ b/src/main/java/org/gitlab4j/api/webhook/Event.java @@ -1,5 +1,6 @@ package org.gitlab4j.api.webhook; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -17,5 +18,15 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonSubTypes.Type(value = WikiPageEvent.class, name = WikiPageEvent.OBJECT_KIND) }) public interface Event { - public String getObjectKind(); + String getObjectKind(); + + void setRequestUrl(String url); + + @JsonIgnore + String getRequestUrl(); + + void setRequestQueryString(String queryString); + + @JsonIgnore + String getRequestQueryString(); } diff --git a/src/main/java/org/gitlab4j/api/webhook/IssueEvent.java b/src/main/java/org/gitlab4j/api/webhook/IssueEvent.java index f75fdf7a..78cb8e29 100644 --- a/src/main/java/org/gitlab4j/api/webhook/IssueEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/IssueEvent.java @@ -7,7 +7,7 @@ import org.gitlab4j.api.models.Assignee; import org.gitlab4j.api.models.User; @XmlAccessorType(XmlAccessType.FIELD) -public class IssueEvent implements Event { +public class IssueEvent extends AbstractEvent { public static final String X_GITLAB_EVENT = "Issue Hook"; public static final String OBJECT_KIND = "issue"; diff --git a/src/main/java/org/gitlab4j/api/webhook/MergeRequestEvent.java b/src/main/java/org/gitlab4j/api/webhook/MergeRequestEvent.java index 1ba9a32e..9f865826 100644 --- a/src/main/java/org/gitlab4j/api/webhook/MergeRequestEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/MergeRequestEvent.java @@ -6,7 +6,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import org.gitlab4j.api.models.User; @XmlAccessorType(XmlAccessType.FIELD) -public class MergeRequestEvent implements Event { +public class MergeRequestEvent extends AbstractEvent { public static final String X_GITLAB_EVENT = "Merge Request Hook"; public static final String OBJECT_KIND = "merge_request"; diff --git a/src/main/java/org/gitlab4j/api/webhook/NoteEvent.java b/src/main/java/org/gitlab4j/api/webhook/NoteEvent.java index 45027d4f..88f2a239 100644 --- a/src/main/java/org/gitlab4j/api/webhook/NoteEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/NoteEvent.java @@ -13,7 +13,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; @XmlAccessorType(XmlAccessType.FIELD) -public class NoteEvent implements Event { +public class NoteEvent extends AbstractEvent { public static final String X_GITLAB_EVENT = "Note Hook"; public static final String OBJECT_KIND = "note"; diff --git a/src/main/java/org/gitlab4j/api/webhook/PipelineEvent.java b/src/main/java/org/gitlab4j/api/webhook/PipelineEvent.java index 52dfa030..eb73432e 100644 --- a/src/main/java/org/gitlab4j/api/webhook/PipelineEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/PipelineEvent.java @@ -10,7 +10,7 @@ import org.gitlab4j.api.models.ArtifactsFile; import org.gitlab4j.api.models.User; @XmlAccessorType(XmlAccessType.FIELD) -public class PipelineEvent implements Event { +public class PipelineEvent extends AbstractEvent { public static final String X_GITLAB_EVENT = "Pipeline Hook"; public static final String OBJECT_KIND = "pipeline"; diff --git a/src/main/java/org/gitlab4j/api/webhook/PushEvent.java b/src/main/java/org/gitlab4j/api/webhook/PushEvent.java index cc3725be..80bf5d43 100644 --- a/src/main/java/org/gitlab4j/api/webhook/PushEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/PushEvent.java @@ -16,7 +16,8 @@ public class PushEvent extends AbstractPushEvent implements Event { } public void setObjectKind(String objectKind) { - if (!OBJECT_KIND.equals(objectKind)) + if (!OBJECT_KIND.equals(objectKind)) { throw new RuntimeException("Invalid object_kind (" + objectKind + "), must be '" + OBJECT_KIND + "'"); + } } } diff --git a/src/main/java/org/gitlab4j/api/webhook/WebHookManager.java b/src/main/java/org/gitlab4j/api/webhook/WebHookManager.java index 174be3c9..fb3616d1 100644 --- a/src/main/java/org/gitlab4j/api/webhook/WebHookManager.java +++ b/src/main/java/org/gitlab4j/api/webhook/WebHookManager.java @@ -8,6 +8,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpUtils; import org.gitlab4j.api.GitLabApi; import org.gitlab4j.api.GitLabApiException; @@ -93,6 +94,8 @@ public class WebHookManager extends HookManager { event = jacksonJson.unmarshal(Event.class, reader); } + event.setRequestUrl(request.getRequestURL().toString()); + event.setRequestQueryString(request.getQueryString()); fireEvent(event); } catch (Exception e) { diff --git a/src/main/java/org/gitlab4j/api/webhook/WikiPageEvent.java b/src/main/java/org/gitlab4j/api/webhook/WikiPageEvent.java index d43294ad..b737f31c 100644 --- a/src/main/java/org/gitlab4j/api/webhook/WikiPageEvent.java +++ b/src/main/java/org/gitlab4j/api/webhook/WikiPageEvent.java @@ -6,7 +6,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import org.gitlab4j.api.models.User; @XmlAccessorType(XmlAccessType.FIELD) -public class WikiPageEvent implements Event { +public class WikiPageEvent extends AbstractEvent { public static final String X_GITLAB_EVENT = "Wiki Page Hook"; public static final String OBJECT_KIND = "wiki_page"; -- GitLab