From ca10b85c7d40c6fd9d2fbe9334fe7165c60c98d6 Mon Sep 17 00:00:00 2001 From: jean flores Date: Thu, 6 May 2021 11:59:02 -0500 Subject: [PATCH 01/13] Exclude user name push events --- .../gitlabjenkins/GitLabPushTrigger.java | 71 +++++++++++++++++-- .../trigger/filter/AllUserNamesFilter.java | 11 +++ .../trigger/filter/UserNameBasedFilter.java | 58 +++++++++++++++ .../trigger/filter/UserNameFilter.java | 9 +++ .../trigger/filter/UserNameFilterConfig.java | 40 +++++++++++ .../trigger/filter/UserNameFilterFactory.java | 29 ++++++++ .../trigger/filter/UserNameFilterType.java | 9 +++ .../AbstractWebHookTriggerHandler.java | 24 ++++--- .../handler/WebHookTriggerHandler.java | 3 +- .../MergeRequestHookTriggerHandlerImpl.java | 10 ++- .../NopMergeRequestHookTriggerHandler.java | 3 +- .../note/NopNoteHookTriggerHandler.java | 3 +- .../note/NoteHookTriggerHandlerImpl.java | 10 ++- .../NopPipelineHookTriggerHandler.java | 3 +- .../PipelineHookTriggerHandlerImpl.java | 23 ++++-- .../push/NopPushHookTriggerHandler.java | 3 +- ...penMergeRequestPushHookTriggerHandler.java | 7 +- .../push/PushHookTriggerHandlerImpl.java | 12 +++- .../push/PushHookTriggerHandlerList.java | 5 +- .../GitLabPushTrigger/config.jelly | 17 +++++ .../PipelineHookTriggerHandlerImplTest.java | 7 +- 21 files changed, 318 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilter.java create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilter.java create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java create mode 100644 src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index e9c6eb221..180d581b4 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -15,8 +15,11 @@ import com.dabsquared.gitlabjenkins.trigger.TriggerOpenMergeRequest; import com.dabsquared.gitlabjenkins.trigger.branch.ProjectBranchesProvider; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterConfig; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory; @@ -63,6 +66,7 @@ import java.util.Collection; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.handler.merge.MergeRequestHookTriggerHandlerFactory.newMergeRequestHookTriggerHandler; import static com.dabsquared.gitlabjenkins.trigger.handler.note.NoteHookTriggerHandlerFactory.newNoteHookTriggerHandler; import static com.dabsquared.gitlabjenkins.trigger.handler.pipeline.PipelineHookTriggerHandlerFactory.newPipelineHookTriggerHandler; @@ -97,18 +101,23 @@ public class GitLabPushTrigger extends Trigger> implements MergeReques private transient boolean addCiMessage; private transient boolean addVoteOnMergeRequest; private transient boolean allowAllBranches = false; + private transient boolean allowAllUserNames = false; private transient String branchFilterName; private BranchFilterType branchFilterType; + private transient String userNameFilterName; + private UserNameFilterType userNameFilterType; private String includeBranchesSpec; private String excludeBranchesSpec; private String sourceBranchRegex; private String targetBranchRegex; + private String excludeUserNamesSpec; private MergeRequestLabelFilterConfig mergeRequestLabelFilterConfig; private volatile Secret secretToken; private String pendingBuildName; private boolean cancelPendingBuildsOnUpdate; private transient BranchFilter branchFilter; + private transient UserNameFilter userNameFilter; private transient PushHookTriggerHandler pushHookTriggerHandler; private transient MergeRequestHookTriggerHandler mergeRequestHookTriggerHandler; private transient NoteHookTriggerHandler noteHookTriggerHandler; @@ -128,7 +137,9 @@ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerToBranchDeleteReq boolean acceptMergeRequestOnSuccess, BranchFilterType branchFilterType, String includeBranchesSpec, String excludeBranchesSpec, String sourceBranchRegex, String targetBranchRegex, MergeRequestLabelFilterConfig mergeRequestLabelFilterConfig, String secretToken, boolean triggerOnPipelineEvent, - boolean triggerOnApprovedMergeRequest, String pendingBuildName, boolean cancelPendingBuildsOnUpdate) { + boolean triggerOnApprovedMergeRequest, String pendingBuildName, boolean cancelPendingBuildsOnUpdate, UserNameFilterType userNameFilterType, + String excludeUserNamesSpec + ) { this.triggerOnPush = triggerOnPush; this.triggerToBranchDeleteRequest = triggerToBranchDeleteRequest; this.triggerOnMergeRequest = triggerOnMergeRequest; @@ -147,10 +158,12 @@ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerToBranchDeleteReq this.addCiMessage = addCiMessage; this.addVoteOnMergeRequest = addVoteOnMergeRequest; this.branchFilterType = branchFilterType; + this.userNameFilterType = userNameFilterType; this.includeBranchesSpec = includeBranchesSpec; this.excludeBranchesSpec = excludeBranchesSpec; this.sourceBranchRegex = sourceBranchRegex; this.targetBranchRegex = targetBranchRegex; + this.excludeUserNamesSpec = excludeUserNamesSpec; this.acceptMergeRequestOnSuccess = acceptMergeRequestOnSuccess; this.mergeRequestLabelFilterConfig = mergeRequestLabelFilterConfig; this.secretToken = Secret.fromString(secretToken); @@ -160,6 +173,7 @@ public GitLabPushTrigger(boolean triggerOnPush, boolean triggerToBranchDeleteReq initializeTriggerHandler(); initializeBranchFilter(); + initializeUserNameFilter(); initializeMergeRequestLabelFilter(); } @@ -286,6 +300,10 @@ public BranchFilterType getBranchFilterType() { return branchFilterType; } + public UserNameFilterType getUserNameFilterType() { + return userNameFilterType; + } + public String getIncludeBranchesSpec() { return includeBranchesSpec; } @@ -302,6 +320,10 @@ public String getTargetBranchRegex() { return targetBranchRegex; } + public String getExcludeUserNamesSpec() { + return excludeUserNamesSpec; + } + public MergeRequestLabelFilterConfig getMergeRequestLabelFilterConfig() { return mergeRequestLabelFilterConfig; } @@ -409,11 +431,21 @@ public void setBranchFilterName(String branchFilterName) { this.branchFilterName = branchFilterName; } + @DataBoundSetter + public void setUserNameFilterName(String userNameFilterName) { + this.userNameFilterName = userNameFilterName; + } + @DataBoundSetter public void setBranchFilterType(BranchFilterType branchFilterType) { this.branchFilterType = branchFilterType; } + @DataBoundSetter + public void setUserNameFilterType(UserNameFilterType userNameFilterType) { + this.userNameFilterType = userNameFilterType; + } + @DataBoundSetter public void setIncludeBranchesSpec(String includeBranchesSpec) { this.includeBranchesSpec = includeBranchesSpec; @@ -424,6 +456,11 @@ public void setExcludeBranchesSpec(String excludeBranchesSpec) { this.excludeBranchesSpec = excludeBranchesSpec; } + @DataBoundSetter + public void setExcludeUserNamesSpec(String excludeUserNamesSpec) { + this.excludeUserNamesSpec = excludeUserNamesSpec; + } + @DataBoundSetter public void setSourceBranchRegex(String sourceBranchRegex) { this.sourceBranchRegex = sourceBranchRegex; @@ -475,7 +512,10 @@ public void onPost(final PushHook hook) { if (pushHookTriggerHandler == null) { initializeTriggerHandler(); } - pushHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + if (userNameFilter == null) { + initializeUserNameFilter(); + } + pushHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } // executes when the Trigger receives a merge request @@ -489,7 +529,10 @@ public void onPost(final MergeRequestHook hook) { if (mergeRequestHookTriggerHandler == null) { initializeTriggerHandler(); } - mergeRequestHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + if (userNameFilter == null) { + initializeUserNameFilter(); + } + mergeRequestHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } // executes when the Trigger receives a note request @@ -503,7 +546,10 @@ public void onPost(final NoteHook hook) { if (noteHookTriggerHandler == null) { initializeTriggerHandler(); } - noteHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + if (userNameFilter == null) { + initializeUserNameFilter(); + } + noteHookTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } // executes when the Trigger receives a pipeline event @@ -514,7 +560,10 @@ public void onPost(final PipelineHook hook) { if (pipelineTriggerHandler == null) { initializeTriggerHandler(); } - pipelineTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + if (userNameFilter == null) { + initializeUserNameFilter(); + } + pipelineTriggerHandler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } private void initializeTriggerHandler() { @@ -537,13 +586,24 @@ private void initializeMergeRequestLabelFilter() { mergeRequestLabelFilter = MergeRequestLabelFilterFactory.newMergeRequestLabelFilter(mergeRequestLabelFilterConfig); } + private void initializeUserNameFilter() { + userNameFilter = UserNameFilterFactory.newUserNameFilter(userNameFilterConfig() + .withExcludeBranchesSpec(excludeUserNamesSpec) + .build(userNameFilterType) + ); + } + @Override protected Object readResolve() throws ObjectStreamException { if (branchFilterType == null) { branchFilterType = StringUtils.isNotBlank(branchFilterName) ? BranchFilterType.valueOf(branchFilterName) : BranchFilterType.All; } + if (userNameFilterType == null) { + userNameFilterType = StringUtils.isNotBlank(userNameFilterName) ? UserNameFilterType.valueOf(userNameFilterName) : UserNameFilterType.All; + } initializeTriggerHandler(); initializeBranchFilter(); + initializeUserNameFilter(); initializeMergeRequestLabelFilter(); return super.readResolve(); } @@ -642,7 +702,6 @@ public AutoCompletionCandidates doAutoCompleteIncludeBranchesSpec(@AncestorInPat public AutoCompletionCandidates doAutoCompleteExcludeBranchesSpec(@AncestorInPath final Job job, @QueryParameter final String value) { return ProjectBranchesProvider.instance().doAutoCompleteBranchesSpec(job, value); } - public FormValidation doCheckIncludeBranchesSpec(@AncestorInPath final Job project, @QueryParameter final String value) { return ProjectBranchesProvider.instance().doCheckBranchesSpec(project, value); } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilter.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilter.java new file mode 100644 index 000000000..cc2c6d5ad --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilter.java @@ -0,0 +1,11 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +/** + * @author Robin Müller + */ +class AllUserNamesFilter implements UserNameFilter { + @Override + public boolean isUserNameAllowed(String userName) { + return true; + } +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java new file mode 100644 index 000000000..106703fdb --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java @@ -0,0 +1,58 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +import com.google.common.base.Splitter; +import org.springframework.util.AntPathMatcher; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + + + +/** + * @author Robin Müller + */ +class UserNameBasedFilter implements UserNameFilter { + private static final Logger LOGGER = Logger.getLogger(UserNameBasedFilter.class.getName()); + + + private final List excludedUserNames; + + public UserNameBasedFilter(String excludedUserNames) { + this.excludedUserNames = convert(excludedUserNames); + } + @Override + public boolean isUserNameAllowed(String userName) { + return hasNoUserNameSpecs() || isUserNameNotExcluded(userName); + } + + private boolean hasNoUserNameSpecs() { + return excludedUserNames.isEmpty(); + } + + private boolean isUserNameNotExcluded(String userName) { + AntPathMatcher matcher = new AntPathMatcher(); + for (String excludePattern : excludedUserNames) { + LOGGER.log(Level.INFO, "excludedUserNames"); + LOGGER.log(Level.INFO, excludePattern); + LOGGER.log(Level.INFO, userName); + if (matcher.match(excludePattern, userName)) { + return false; + } + } + return true; + } + + private List convert(String commaSeparatedString) { + if (commaSeparatedString == null) + return Collections.EMPTY_LIST; + + ArrayList result = new ArrayList<>(); + for (String s : Splitter.on(',').omitEmptyStrings().trimResults().split(commaSeparatedString)) { + result.add(s); + } + return result; + } +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilter.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilter.java new file mode 100644 index 000000000..0899f3000 --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilter.java @@ -0,0 +1,9 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +/** + * @author Robin Müller + */ +public interface UserNameFilter { + + boolean isUserNameAllowed(String userName); +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java new file mode 100644 index 000000000..4ebd783f9 --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java @@ -0,0 +1,40 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +/** + * @author Robin Müller + */ +public final class UserNameFilterConfig { + + private final UserNameFilterType type; + private final String excludeUserNamesSpec; + + private UserNameFilterConfig(UserNameFilterType type, String excludeUserNamesSpec) { + this.type = type; + this.excludeUserNamesSpec = excludeUserNamesSpec; + } + + public UserNameFilterType getType() { + return type; + } + + String getExcludeUserNamesSpec() { + return excludeUserNamesSpec; + } + + public static class UserNameFilterConfigBuilder { + private String excludeUserNamesSpec; + + public static UserNameFilterConfigBuilder userNameFilterConfig() { + return new UserNameFilterConfigBuilder(); + } + + public UserNameFilterConfigBuilder withExcludeBranchesSpec(String excludeUserNamesSpec) { + this.excludeUserNamesSpec = excludeUserNamesSpec; + return this; + } + + public UserNameFilterConfig build(UserNameFilterType type) { + return new UserNameFilterConfig(type, excludeUserNamesSpec); + } + } +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java new file mode 100644 index 000000000..f1f110b6b --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java @@ -0,0 +1,29 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * @author Robin Müller + */ +public final class UserNameFilterFactory { + + private UserNameFilterFactory() { } + + private static final Logger LOGGER = Logger.getLogger(UserNameFilterFactory.class.getName()); + + public static UserNameFilter newUserNameFilter(UserNameFilterConfig config) { + LOGGER.log(Level.INFO, "========== newUserNameFilter =========="); + LOGGER.log(Level.INFO, config.toString()); + + if(config == null) + return new AllUserNamesFilter(); + + switch (config.getType()) { + case NameBasedFilter: + return new UserNameBasedFilter(config.getExcludeUserNamesSpec()); + default: + return new AllUserNamesFilter(); + } + } +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java new file mode 100644 index 000000000..3b3f203ee --- /dev/null +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java @@ -0,0 +1,9 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +/** + * @author Robin Müller + */ +public enum UserNameFilterType { + All, + NameBasedFilter +} diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/AbstractWebHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/AbstractWebHookTriggerHandler.java index c8a3aa604..db94d7cd9 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/AbstractWebHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/AbstractWebHookTriggerHandler.java @@ -9,6 +9,7 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.util.LoggerUtil; import hudson.model.Action; import hudson.model.CauseAction; @@ -39,7 +40,7 @@ public abstract class AbstractWebHookTriggerHandler implement protected PendingBuildsHandler pendingBuildsHandler = new PendingBuildsHandler(); @Override - public void handle(Job job, H hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, H hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { if (ciSkip && isCiSkip(hook)) { LOGGER.log(Level.INFO, "Skipping due to ci-skip."); return; @@ -47,15 +48,20 @@ public void handle(Job job, H hook, boolean ciSkip, BranchFilter branchFil String sourceBranch = getSourceBranch(hook); String targetBranch = getTargetBranch(hook); - if (branchFilter.isBranchAllowed(sourceBranch, targetBranch)) { - LOGGER.log(Level.INFO, "{0} triggered for {1}.", LoggerUtil.toArray(job.getFullName(), getTriggerType())); - cancelPendingBuildsIfNecessary(job, hook); - setCommitStatusPendingIfNecessary(job, hook); - scheduleBuild(job, createActions(job, hook)); + String userName = getUserName(hook); + if (userNameFilter.isUserNameAllowed(userName)) { + if (branchFilter.isBranchAllowed(sourceBranch, targetBranch) && userNameFilter.isUserNameAllowed(userName)) { + LOGGER.log(Level.INFO, "{0} triggered for {1}.", LoggerUtil.toArray(job.getFullName(), getTriggerType())); + cancelPendingBuildsIfNecessary(job, hook); + setCommitStatusPendingIfNecessary(job, hook); + scheduleBuild(job, createActions(job, hook)); + } else { + LOGGER.log(Level.INFO, "Source branch {0} or target branch {1} is not allowed", new Object[]{sourceBranch, targetBranch}); + } } else { - LOGGER.log(Level.INFO, "Source branch {0} or target branch {1} is not allowed", new Object[]{sourceBranch, targetBranch}); + LOGGER.log(Level.INFO, "UserName {0} is not allowed", new Object[]{userName}); } - } + } protected abstract String getTriggerType(); @@ -103,6 +109,8 @@ protected void cancelPendingBuildsIfNecessary(Job job, H hook) {} protected abstract String getTargetBranch(H hook); + protected abstract String getUserName(H hook); + protected abstract RevisionParameterAction createRevisionParameter(H hook, GitSCM gitSCM) throws NoRevisionToBuildException; protected abstract BuildStatusUpdate retrieveBuildStatusUpdate(H hook); diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/WebHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/WebHookTriggerHandler.java index a87a3e506..2fa94c6c7 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/WebHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/WebHookTriggerHandler.java @@ -3,6 +3,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.WebHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import hudson.model.Job; /** @@ -10,5 +11,5 @@ */ public interface WebHookTriggerHandler { - void handle(Job job, H hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter); + void handle(Job job, H hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter); } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImpl.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImpl.java index 19ce4fcc6..62b19f1d2 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImpl.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImpl.java @@ -6,6 +6,7 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.dabsquared.gitlabjenkins.util.BuildUtil; import com.dabsquared.gitlabjenkins.trigger.handler.PendingBuildsHandler; @@ -70,7 +71,7 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { if (isExecutable(job, hook)) { List labelsNames = new ArrayList<>(); if (hook.getLabels() != null) { @@ -80,7 +81,7 @@ public void handle(Job job, MergeRequestHook hook, boolean ciSkip, BranchF } if (mergeRequestLabelFilter.isMergeRequestAllowed(labelsNames)) { - super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } } } @@ -153,6 +154,11 @@ protected String getTargetBranch(MergeRequestHook hook) { return hook.getObjectAttributes() == null ? null : hook.getObjectAttributes().getTargetBranch(); } + @Override + protected String getUserName(MergeRequestHook hook) { + return hook.getUser() == null ? null : hook.getUser().getUsername(); + } + @Override protected String getTriggerType() { return "merge request"; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/NopMergeRequestHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/NopMergeRequestHookTriggerHandler.java index 1daaf6805..0798dc8c0 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/NopMergeRequestHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/NopMergeRequestHookTriggerHandler.java @@ -3,6 +3,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import hudson.model.Job; /** @@ -10,7 +11,7 @@ */ class NopMergeRequestHookTriggerHandler implements MergeRequestHookTriggerHandler { @Override - public void handle(Job job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { // nothing to do } } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NopNoteHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NopNoteHookTriggerHandler.java index e8d09b35b..0bae7437b 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NopNoteHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NopNoteHookTriggerHandler.java @@ -3,6 +3,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.NoteHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import hudson.model.Job; /** @@ -10,7 +11,7 @@ */ class NopNoteHookTriggerHandler implements NoteHookTriggerHandler { @Override - public void handle(Job job, NoteHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, NoteHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { // nothing to do } } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java index 5c4345415..585fa06df 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java @@ -5,6 +5,7 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import hudson.model.Job; import hudson.plugins.git.GitSCM; @@ -31,9 +32,9 @@ class NoteHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler } @Override - public void handle(Job job, NoteHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, NoteHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { if (isValidTriggerPhrase(hook.getObjectAttributes().getNote())) { - super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } } @@ -54,6 +55,11 @@ protected String getTargetBranch(NoteHook hook) { return hook.getMergeRequest() == null ? null : hook.getMergeRequest().getTargetBranch(); } + @Override + protected String getUserName(NoteHook hook) { + return hook.getMergeRequest() == null ? null : hook.getUser().getUsername(); + } + @Override protected String getTriggerType() { return "note"; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java index f6792f0e4..96aab7747 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/NopPipelineHookTriggerHandler.java @@ -4,6 +4,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.PushHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.handler.push.PushHookTriggerHandler; import hudson.model.Job; @@ -13,7 +14,7 @@ class NopPipelineHookTriggerHandler implements PipelineHookTriggerHandler { @Override - public void handle(Job job, PipelineHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PipelineHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { } } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java index 1da1e053b..e870db4f9 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImpl.java @@ -9,6 +9,7 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.dabsquared.gitlabjenkins.util.BuildUtil; import com.dabsquared.gitlabjenkins.util.LoggerUtil; @@ -40,7 +41,7 @@ class PipelineHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler job, PipelineHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PipelineHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { PipelineEventObjectAttributes objectAttributes = hook.getObjectAttributes(); try { if (job instanceof AbstractProject) { @@ -64,14 +65,19 @@ public void handle(Job job, PipelineHook hook, boolean ciSkip, BranchFilte //in case of pipeline events that could lead to a deadlock String sourceBranch = getSourceBranch(hook); String targetBranch = getTargetBranch(hook); - if (branchFilter.isBranchAllowed(sourceBranch, targetBranch)) { - LOGGER.log(Level.INFO, "{0} triggered for {1}.", LoggerUtil.toArray(job.getFullName(), getTriggerType())); + String userName = getUserName(hook); - super.scheduleBuild(job, createActions(job, hook)); + if (userNameFilter.isUserNameAllowed(userName)) { + if (branchFilter.isBranchAllowed(sourceBranch, targetBranch)) { + LOGGER.log(Level.INFO, "{0} triggered for {1}.", LoggerUtil.toArray(job.getFullName(), getTriggerType())); + + super.scheduleBuild(job, createActions(job, hook)); + } else { + LOGGER.log(Level.INFO, "branch {0} is not allowed", sourceBranch + " or " + targetBranch); + } } else { - LOGGER.log(Level.INFO, "branch {0} is not allowed", sourceBranch + " or " + targetBranch); + LOGGER.log(Level.INFO, "userName {0} is not allowed", userName); } - } } @@ -91,6 +97,11 @@ protected String getTargetBranch(PipelineHook hook) { return hook.getObjectAttributes().getRef() == null ? null : hook.getObjectAttributes().getRef().replaceFirst("^refs/heads/", ""); } + @Override + protected String getUserName(PipelineHook hook) { + return hook.getUser().getUsername(); + } + @Override protected String getTriggerType() { return "pipeline event"; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/NopPushHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/NopPushHookTriggerHandler.java index 9238ba16a..85fb00368 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/NopPushHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/NopPushHookTriggerHandler.java @@ -3,6 +3,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.PushHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import hudson.model.Job; /** @@ -10,7 +11,7 @@ */ class NopPushHookTriggerHandler implements PushHookTriggerHandler { @Override - public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { // nothing to do } } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java index 1d4154272..bfbc76390 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java @@ -14,6 +14,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.State; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.util.LoggerUtil; import com.dabsquared.gitlabjenkins.trigger.handler.PendingBuildsHandler; import hudson.model.Action; @@ -54,7 +55,7 @@ class OpenMergeRequestPushHookTriggerHandler implements PushHookTriggerHandler { } @Override - public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { try { if (job instanceof ParameterizedJobMixIn.ParameterizedJob) { ParameterizedJob project = (ParameterizedJobMixIn.ParameterizedJob) job; @@ -68,7 +69,7 @@ public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter br GitLabClient client = property.getClient(); for (MergeRequest mergeRequest : getOpenMergeRequests(client, projectId.toString())) { if (mergeRequestLabelFilter.isMergeRequestAllowed(mergeRequest.getLabels())) { - handleMergeRequest(job, hook, ciSkip, branchFilter, client, mergeRequest); + handleMergeRequest(job, hook, ciSkip, branchFilter, client, mergeRequest, userNameFilter); } } } @@ -94,7 +95,7 @@ private List getOpenMergeRequests(GitLabClient client, String proj return result; } - private void handleMergeRequest(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, GitLabClient client, MergeRequest mergeRequest) { + private void handleMergeRequest(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, GitLabClient client, MergeRequest mergeRequest, UserNameFilter userNameFilter) { if (ciSkip && mergeRequest.getDescription() != null && mergeRequest.getDescription().contains("[ci-skip]")) { LOGGER.log(Level.INFO, "Skipping MR " + mergeRequest.getTitle() + " due to ci-skip."); return; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java index ddeed0136..e7825315c 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImpl.java @@ -6,6 +6,7 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import hudson.model.Job; import hudson.plugins.git.GitSCM; @@ -24,7 +25,7 @@ class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler private static final String NO_COMMIT = "0000000000000000000000000000000000000000"; private boolean triggerToBranchDeleteRequest = false; - + public PushHookTriggerHandlerImpl(boolean triggerToBranchDeleteRequest) { @@ -32,9 +33,9 @@ public PushHookTriggerHandlerImpl(boolean triggerToBranchDeleteRequest) } @Override - public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { if (isNoRemoveBranchPush(hook) || this.triggerToBranchDeleteRequest ) { - super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + super.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } } @@ -96,6 +97,11 @@ protected String getTargetBranch(PushHook hook) { return hook.getRef() == null ? null : hook.getRef().replaceFirst("^refs/heads/", ""); } + @Override + protected String getUserName(PushHook hook) { + return hook.getUserName(); + } + @Override protected String getTriggerType() { return "push"; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerList.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerList.java index 290daf464..44772b448 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerList.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerList.java @@ -3,6 +3,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.PushHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import hudson.model.Job; import java.util.List; @@ -19,9 +20,9 @@ class PushHookTriggerHandlerList implements PushHookTriggerHandler { } @Override - public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter) { + public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, MergeRequestLabelFilter mergeRequestLabelFilter, UserNameFilter userNameFilter) { for (PushHookTriggerHandler handler : handlers) { - handler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter); + handler.handle(job, hook, ciSkip, branchFilter, mergeRequestLabelFilter, userNameFilter); } } } diff --git a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly index 7360ff473..adf77d60a 100644 --- a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly +++ b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly @@ -118,6 +118,23 @@ + + + + + + + + + + + + + diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImplTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImplTest.java index d7f7ab3ef..cbc946594 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImplTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/pipeline/PipelineHookTriggerHandlerImplTest.java @@ -4,6 +4,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.State; import com.dabsquared.gitlabjenkins.gitlab.hook.model.User; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; @@ -31,6 +32,8 @@ import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory.newBranchFilter; import static com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory.newMergeRequestLabelFilter; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory.newUserNameFilter; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -108,7 +111,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen }); project.setQuietPeriod(0); pipelineHookTriggerHandler.handle(project, pipelineHook , true, newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All))); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); @@ -129,7 +132,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen project.setQuietPeriod(0); pipelineHookTriggerHandler.handle(project, pipelineHook, false, newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All))); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); From ad3a8ddbbb752be96bde828d28ef686af7a94a28 Mon Sep 17 00:00:00 2001 From: jean flores Date: Thu, 6 May 2021 12:38:42 -0500 Subject: [PATCH 02/13] Added allusernamesfiltertest --- .../filter/AllUserNamesFilterTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilterTest.java diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilterTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilterTest.java new file mode 100644 index 000000000..e6b4992f4 --- /dev/null +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/AllUserNamesFilterTest.java @@ -0,0 +1,20 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +import org.apache.commons.lang.RandomStringUtils; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author jean.flores + */ + +public class AllUserNamesFilterTest{ + + @Test + public void isRandomBranchNameAllowed() { + String randomUserName = RandomStringUtils.random(10, true, false); + assertThat(new AllUserNamesFilter().isUserNameAllowed(randomUserName), is(true)); + } +} From ba09140e3c2f455a37e3613f4dbbef05b454eb5a Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 00:17:54 -0500 Subject: [PATCH 03/13] Modified test cases --- .../gitlabjenkins/GitLabPushTrigger.java | 2 +- .../trigger/filter/UserNameFilterConfig.java | 2 +- .../testing/integration/GitLabIT.java | 10 +++++-- .../filter/UserNameBasedFilterTest.java | 28 +++++++++++++++++++ .../filter/UserNameFilterFactoryTest.java | 28 +++++++++++++++++++ .../handler/PendingBuildsHandlerTest.java | 3 ++ ...ergeRequestHookTriggerHandlerImplTest.java | 19 ++++++++++--- .../note/NoteHookTriggerHandlerImplTest.java | 19 ++++++++++--- .../push/PushHookTriggerHandlerImplTest.java | 23 +++++++++++---- .../build/MergeRequestBuildActionTest.java | 2 ++ 10 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilterTest.java create mode 100644 src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index 180d581b4..2e12bf2cd 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -588,7 +588,7 @@ private void initializeMergeRequestLabelFilter() { private void initializeUserNameFilter() { userNameFilter = UserNameFilterFactory.newUserNameFilter(userNameFilterConfig() - .withExcludeBranchesSpec(excludeUserNamesSpec) + .withExcludeUserNamesSpec(excludeUserNamesSpec) .build(userNameFilterType) ); } diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java index 4ebd783f9..e7ebcdd95 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java @@ -28,7 +28,7 @@ public static UserNameFilterConfigBuilder userNameFilterConfig() { return new UserNameFilterConfigBuilder(); } - public UserNameFilterConfigBuilder withExcludeBranchesSpec(String excludeUserNamesSpec) { + public UserNameFilterConfigBuilder withExcludeUserNamesSpec(String excludeUserNamesSpec) { this.excludeUserNamesSpec = excludeUserNamesSpec; return this; } diff --git a/src/test/java/com/dabsquared/gitlabjenkins/testing/integration/GitLabIT.java b/src/test/java/com/dabsquared/gitlabjenkins/testing/integration/GitLabIT.java index f43119968..af5206f16 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/testing/integration/GitLabIT.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/testing/integration/GitLabIT.java @@ -7,6 +7,7 @@ import com.dabsquared.gitlabjenkins.publisher.GitLabCommitStatusPublisher; import com.dabsquared.gitlabjenkins.testing.gitlab.rule.GitLabRule; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; @@ -68,7 +69,7 @@ public class GitLabIT { public void buildOnPush() throws IOException, InterruptedException, GitAPIException { final OneShotEvent buildTriggered = new OneShotEvent(); FreeStyleProject project = jenkins.createFreeStyleProject("test"); - GitLabPushTrigger trigger = gitLabPushTrigger().withTriggerOnPush(true).withBranchFilterType(BranchFilterType.All).build(); + GitLabPushTrigger trigger = gitLabPushTrigger().withTriggerOnPush(true).withBranchFilterType(BranchFilterType.All).withUserNameFilterType(UserNameFilterType.All).build(); project.addTrigger(trigger); trigger.start(project, true); project.getBuildersList().add(new TestBuilder() { @@ -91,7 +92,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen public void buildOnMergeRequest() throws IOException, InterruptedException, GitAPIException { final OneShotEvent buildTriggered = new OneShotEvent(); FreeStyleProject project = jenkins.createFreeStyleProject("test"); - GitLabPushTrigger trigger = gitLabPushTrigger().withTriggerOnMergeRequest(true).withBranchFilterType(BranchFilterType.All).build(); + GitLabPushTrigger trigger = gitLabPushTrigger().withTriggerOnMergeRequest(true).withBranchFilterType(BranchFilterType.All).withUserNameFilterType(UserNameFilterType.All).build(); project.addTrigger(trigger); trigger.start(project, true); project.getBuildersList().add(new TestBuilder() { @@ -118,7 +119,9 @@ public void buildOnNote() throws IOException, InterruptedException, GitAPIExcept GitLabPushTrigger trigger = gitLabPushTrigger() .withTriggerOnNoteRequest(true) .withNoteRegex(".*test.*") - .withBranchFilterType(BranchFilterType.All).build(); + .withBranchFilterType(BranchFilterType.All) + .withUserNameFilterType(UserNameFilterType.All) + .build(); project.getBuildersList().add(new TestBuilder() { @Override public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { @@ -151,6 +154,7 @@ public void reportBuildStatus() throws IOException, InterruptedException, GitAPI GitLabPushTrigger trigger = gitLabPushTrigger() .withTriggerOnPush(true) .withBranchFilterType(BranchFilterType.All) + .withUserNameFilterType(UserNameFilterType.All) .build(); FreeStyleProject project = jenkins.createFreeStyleProject("test"); diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilterTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilterTest.java new file mode 100644 index 000000000..b12cd1bfd --- /dev/null +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilterTest.java @@ -0,0 +1,28 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author Robin Müller + */ +public class UserNameBasedFilterTest { + + @Test + public void excludeBranches() { + UserNameBasedFilter nameBasedFilter = new UserNameBasedFilter("John Doe, John Doe2"); + + assertThat(nameBasedFilter.isUserNameAllowed("John Doe"), is(false)); + assertThat(nameBasedFilter.isUserNameAllowed("John Doe2"), is(false)); + assertThat(nameBasedFilter.isUserNameAllowed("not-excluded-user"), is(true)); + } + + @Test + public void allowExcludeToBeNull() { + UserNameBasedFilter nameBasedFilter = new UserNameBasedFilter(null); + + assertThat(nameBasedFilter.isUserNameAllowed("John Doe"), is(true)); + } +} diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java new file mode 100644 index 000000000..7b2b39cc6 --- /dev/null +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java @@ -0,0 +1,28 @@ +package com.dabsquared.gitlabjenkins.trigger.filter; + +import org.junit.Test; + +import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; + +public class UserNameFilterFactoryTest { + + @Test + public void getAllUserNamesFilter() { + UserNameFilter userNameFilter = UserNameFilterFactory.newUserNameFilter(userNameFilterConfig() + .withExcludeUserNamesSpec("John Doe") + .build(UserNameFilterType.All) + ); + assertThat(userNameFilter, instanceOf(AllBranchesFilter.class)); + } + @Test + public void getUserNameBasedFilterFilter() { + UserNameFilter userNameFilter = UserNameFilterFactory.newUserNameFilter(userNameFilterConfig() + .withExcludeUserNamesSpec("John Doe") + .build(UserNameFilterType.NameBasedFilter)); + + assertThat(userNameFilter, instanceOf(NameBasedFilter.class)); + } +} diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/PendingBuildsHandlerTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/PendingBuildsHandlerTest.java index 58288d35e..7e3251bed 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/PendingBuildsHandlerTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/PendingBuildsHandlerTest.java @@ -8,6 +8,8 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.builder.generated.*; import com.dabsquared.gitlabjenkins.publisher.GitLabCommitStatusPublisher; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.model.FreeStyleProject; import hudson.model.Item; import hudson.model.ItemGroup; @@ -132,6 +134,7 @@ private GitLabPushTrigger gitLabPushTrigger() { gitLabPushTrigger.setTriggerOnMergeRequest(true); gitLabPushTrigger.setPendingBuildName(GITLAB_BUILD_NAME); gitLabPushTrigger.setBranchFilterType(BranchFilterType.NameBasedFilter); + gitLabPushTrigger.setUserNameFilterType(UserNameFilterType.NameBasedFilter); gitLabPushTrigger.setBranchFilterName(""); return gitLabPushTrigger; } diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImplTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImplTest.java index 138eade8d..5ff5944f4 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImplTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/merge/MergeRequestHookTriggerHandlerImplTest.java @@ -6,6 +6,8 @@ import com.dabsquared.gitlabjenkins.trigger.TriggerOpenMergeRequest; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; @@ -41,6 +43,7 @@ import static com.dabsquared.gitlabjenkins.gitlab.hook.model.builder.generated.UserBuilder.user; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory.newMergeRequestLabelFilter; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.handler.merge.MergeRequestHookTriggerHandlerFactory.withConfig; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -369,7 +372,9 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .build() ) .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); @@ -384,7 +389,9 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .build() ) .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); @@ -454,7 +461,9 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .build() ) .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); return buildTriggered; @@ -475,7 +484,9 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen mergeRequestHookTriggerHandler.handle(project, mergeRequestHook() .withObjectAttributes(defaultMergeRequestObjectAttributes().withDescription(MRDescription).withLastCommit(commit().withMessage(lastCommitMsg).withAuthor(user().withName("test").build()).withId("testid").build()).build()) .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); return buildTriggered.isSignaled(); diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImplTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImplTest.java index 90c0a8287..44e54bed0 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImplTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImplTest.java @@ -3,6 +3,8 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.State; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; @@ -34,6 +36,7 @@ import static com.dabsquared.gitlabjenkins.gitlab.hook.model.builder.generated.UserBuilder.user; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory.newMergeRequestLabelFilter; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -79,8 +82,12 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .withUrl("https://gitlab.org/test/merge_requests/1#note_1") .build()) .withMergeRequest(mergeRequestObjectAttributes().withDescription("[ci-skip]").build()) - .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + .build(), + true, + BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(false)); @@ -146,8 +153,12 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .withWebUrl("https://gitlab.org/test.git") .build()) .build()) - .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + .build(), + true, + BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), + newMergeRequestLabelFilter(null), + UserNameFilterFactory.newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImplTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImplTest.java index ca764320d..b51dd34a9 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImplTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/handler/push/PushHookTriggerHandlerImplTest.java @@ -2,6 +2,7 @@ import com.dabsquared.gitlabjenkins.gitlab.hook.model.builder.generated.PushHookBuilder; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; @@ -30,6 +31,8 @@ import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory.newBranchFilter; import static com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory.newMergeRequestLabelFilter; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; +import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory.newUserNameFilter; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -66,8 +69,12 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen pushHookTriggerHandler.handle(project, pushHook() .withCommits(Arrays.asList(commit().withMessage("some message").build(), commit().withMessage("[ci-skip]").build())) - .build(), true, newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + .build(), + true, + newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), + newMergeRequestLabelFilter(null), + newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(false)); @@ -112,8 +119,12 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .build()) .withAfter(commit.name()) .withRef("refs/heads/" + git.nameRev().add(head).call().get(head)) - .build(), true, newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + .build(), + true, + newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), + newMergeRequestLabelFilter(null), + newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All)) + ); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); @@ -164,10 +175,10 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen .withAfter(commit.name()) .withRef("refs/heads/" + git.nameRev().add(head).call().get(head)); pushHookTriggerHandler.handle(project, pushHookBuilder.build(), true, newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), - newMergeRequestLabelFilter(null)); + newMergeRequestLabelFilter(null), newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All))); pushHookTriggerHandler.handle(project, pushHookBuilder .but().withRef("refs/heads/" + git.nameRev().add(head).call().get(head) + "-2").build(), true, - newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), newMergeRequestLabelFilter(null)); + newBranchFilter(branchFilterConfig().build(BranchFilterType.All)), newMergeRequestLabelFilter(null), newUserNameFilter(userNameFilterConfig().build(UserNameFilterType.All))); buildTriggered.block(10000); assertThat(buildTriggered.isSignaled(), is(true)); assertThat(buildCount.intValue(), is(2)); diff --git a/src/test/java/com/dabsquared/gitlabjenkins/webhook/build/MergeRequestBuildActionTest.java b/src/test/java/com/dabsquared/gitlabjenkins/webhook/build/MergeRequestBuildActionTest.java index 2f591b7c5..ecee323e2 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/webhook/build/MergeRequestBuildActionTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/webhook/build/MergeRequestBuildActionTest.java @@ -5,6 +5,7 @@ import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause; import com.dabsquared.gitlabjenkins.gitlab.hook.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import hudson.model.*; import hudson.model.queue.QueueListener; import hudson.model.queue.QueueTaskFuture; @@ -90,6 +91,7 @@ public void setup() throws Exception { // some defaults of the trigger trigger.setBranchFilterType(BranchFilterType.All); + trigger.setUserNameFilterType(UserNameFilterType.All); } From 97a58abae0b71b7a99d0970f9aa0c78beb85e481 Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 00:42:03 -0500 Subject: [PATCH 04/13] Modified helpers --- .../dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly index adf77d60a..0d969249b 100644 --- a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly +++ b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly @@ -124,10 +124,10 @@ + inline="true" help="/plugin/gitlab-plugin/help/help-noUserNameFiltering.html"/> + help="/plugin/gitlab-plugin/help/help-excludedUsers.html"> From ae19f162d83c073a3fe4e223c2ea8bff85fa523c Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 00:49:58 -0500 Subject: [PATCH 05/13] Modified helpers --- .../gitlabjenkins/trigger/filter/UserNameFilterFactory.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java index f1f110b6b..b104d9b67 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java @@ -13,8 +13,6 @@ private UserNameFilterFactory() { } private static final Logger LOGGER = Logger.getLogger(UserNameFilterFactory.class.getName()); public static UserNameFilter newUserNameFilter(UserNameFilterConfig config) { - LOGGER.log(Level.INFO, "========== newUserNameFilter =========="); - LOGGER.log(Level.INFO, config.toString()); if(config == null) return new AllUserNamesFilter(); From 54ccbd1ee9993343416bfebfdde540ed44bd9e8d Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 00:50:11 -0500 Subject: [PATCH 06/13] Modified helpers --- src/main/webapp/help/help-excludedUsers.html | 4 ++++ src/main/webapp/help/help-noUserNameFiltering.html | 3 +++ 2 files changed, 7 insertions(+) create mode 100644 src/main/webapp/help/help-excludedUsers.html create mode 100644 src/main/webapp/help/help-noUserNameFiltering.html diff --git a/src/main/webapp/help/help-excludedUsers.html b/src/main/webapp/help/help-excludedUsers.html new file mode 100644 index 000000000..4fb9eac27 --- /dev/null +++ b/src/main/webapp/help/help-excludedUsers.html @@ -0,0 +1,4 @@ +

+ Comma-separated list of source users which are not allowed to trigger a build from a Push event or a Merge Request event. + If this field is left empty, all users are allowed to trigger this job. +

diff --git a/src/main/webapp/help/help-noUserNameFiltering.html b/src/main/webapp/help/help-noUserNameFiltering.html new file mode 100644 index 000000000..b7e3c9fd6 --- /dev/null +++ b/src/main/webapp/help/help-noUserNameFiltering.html @@ -0,0 +1,3 @@ +
+

All users are allowed to trigger this job.

+
From f8dce8776539479c705f2999abca060762ac8fcd Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 01:12:04 -0500 Subject: [PATCH 07/13] sorted imports --- .../com/dabsquared/gitlabjenkins/GitLabPushTrigger.java | 6 +++--- .../gitlabjenkins/trigger/filter/UserNameBasedFilter.java | 2 +- .../gitlabjenkins/trigger/filter/UserNameFilterConfig.java | 2 +- .../trigger/filter/UserNameFilterFactory.java | 7 +------ .../gitlabjenkins/trigger/filter/UserNameFilterType.java | 2 +- 5 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index 2e12bf2cd..9d207df4c 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -15,14 +15,14 @@ import com.dabsquared.gitlabjenkins.trigger.TriggerOpenMergeRequest; import com.dabsquared.gitlabjenkins.trigger.branch.ProjectBranchesProvider; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; -import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterFactory; -import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterType; -import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilter; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterConfig; import com.dabsquared.gitlabjenkins.trigger.filter.MergeRequestLabelFilterFactory; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilter; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterFactory; +import com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterType; import com.dabsquared.gitlabjenkins.trigger.handler.merge.MergeRequestHookTriggerHandler; import com.dabsquared.gitlabjenkins.trigger.handler.note.NoteHookTriggerHandler; import com.dabsquared.gitlabjenkins.trigger.handler.pipeline.PipelineHookTriggerHandler; diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java index 106703fdb..def89cd9b 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameBasedFilter.java @@ -12,7 +12,7 @@ /** - * @author Robin Müller + * @author jean flores */ class UserNameBasedFilter implements UserNameFilter { private static final Logger LOGGER = Logger.getLogger(UserNameBasedFilter.class.getName()); diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java index e7ebcdd95..d60c44ae7 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterConfig.java @@ -1,7 +1,7 @@ package com.dabsquared.gitlabjenkins.trigger.filter; /** - * @author Robin Müller + * @author jean flores */ public final class UserNameFilterConfig { diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java index b104d9b67..d8e1467b4 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactory.java @@ -1,17 +1,12 @@ package com.dabsquared.gitlabjenkins.trigger.filter; -import java.util.logging.Level; -import java.util.logging.Logger; - /** - * @author Robin Müller + * @author jean flores */ public final class UserNameFilterFactory { private UserNameFilterFactory() { } - private static final Logger LOGGER = Logger.getLogger(UserNameFilterFactory.class.getName()); - public static UserNameFilter newUserNameFilter(UserNameFilterConfig config) { if(config == null) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java index 3b3f203ee..afc989f06 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterType.java @@ -1,7 +1,7 @@ package com.dabsquared.gitlabjenkins.trigger.filter; /** - * @author Robin Müller + * @author jean flores */ public enum UserNameFilterType { All, From 376a614498708a37dba67cd47126887d15a687b2 Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 01:27:59 -0500 Subject: [PATCH 08/13] Modified readme.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 03dd6b281..0a518dc61 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,7 @@ properties([ branchFilterType: "NameBasedFilter", includeBranchesSpec: "release/qat", excludeBranchesSpec: "", + userNameFilterType: "All", ] ]) ]) @@ -472,6 +473,13 @@ Triggers may be filtered based on the branch name, i.e. the build will only be a **Note:** This functionality requires access to GitLab and a git repository url already saved in the project configuration. In other words, when creating a new project, the configuration needs to be saved *once* before being able to add branch filters. For Pipeline jobs, the configuration must be saved *and* the job must be run once before the list is populated. + +## User name filtering +Triggers may be filtered based on the user name, i.e. the build will only be allowed for users not listed in excluded user names. On the project configuration page, when you configure the GitLab trigger, you can choose 'Filter users by name'.' Filter by name takes comma-separated lists of user names to exclude from triggering a build. + +**Note:** This functionality requires access to GitLab and a git repository url already saved in the project configuration. In other words, when creating a new project, the configuration needs to be saved *once* before being able to add branch filters. For Pipeline jobs, the configuration must be saved *and* the job must be run once before the list is populated. + + ## Build when tags are pushed In order to build when a new tag is pushed: 1. In the GitLab webhook configuration, add 'Tag push events' From 97e3d541af132fd859ab67c4c316d837e92c5097 Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 12:13:40 -0500 Subject: [PATCH 09/13] Fixed tests --- .../trigger/handler/note/NoteHookTriggerHandlerImpl.java | 2 +- .../trigger/filter/UserNameFilterFactoryTest.java | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java index 585fa06df..e993c25ad 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/note/NoteHookTriggerHandlerImpl.java @@ -57,7 +57,7 @@ protected String getTargetBranch(NoteHook hook) { @Override protected String getUserName(NoteHook hook) { - return hook.getMergeRequest() == null ? null : hook.getUser().getUsername(); + return hook.getUser() == null ? null : hook.getUser().getUsername(); } @Override diff --git a/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java index 7b2b39cc6..965093a99 100644 --- a/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java +++ b/src/test/java/com/dabsquared/gitlabjenkins/trigger/filter/UserNameFilterFactoryTest.java @@ -2,7 +2,6 @@ import org.junit.Test; -import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.UserNameFilterConfig.UserNameFilterConfigBuilder.userNameFilterConfig; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertThat; @@ -15,7 +14,7 @@ public void getAllUserNamesFilter() { .withExcludeUserNamesSpec("John Doe") .build(UserNameFilterType.All) ); - assertThat(userNameFilter, instanceOf(AllBranchesFilter.class)); + assertThat(userNameFilter, instanceOf(AllUserNamesFilter.class)); } @Test public void getUserNameBasedFilterFilter() { @@ -23,6 +22,6 @@ public void getUserNameBasedFilterFilter() { .withExcludeUserNamesSpec("John Doe") .build(UserNameFilterType.NameBasedFilter)); - assertThat(userNameFilter, instanceOf(NameBasedFilter.class)); + assertThat(userNameFilter, instanceOf(UserNameBasedFilter.class)); } } From 993c514329c4caeed16adbdf94967ac389cae15e Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 14:40:24 -0500 Subject: [PATCH 10/13] Validate userName --- .../handler/push/OpenMergeRequestPushHookTriggerHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java index bfbc76390..26e3c2d56 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java @@ -109,7 +109,8 @@ private void handleMergeRequest(Job job, PushHook hook, boolean ciSkip, Br String sourceBranch = mergeRequest.getSourceBranch(); String targetBranch = mergeRequest.getTargetBranch(); - if (targetBranch != null && branchFilter.isBranchAllowed(sourceBranch, targetBranch) && hook.getRef().equals("refs/heads/"+targetBranch) && sourceBranch != null) { + String userName = mergeRequest.getAuthor().getUsername(); + if (targetBranch != null && branchFilter.isBranchAllowed(sourceBranch, targetBranch) && hook.getRef().equals("refs/heads/"+targetBranch) && sourceBranch != null && userNameFilter.isUserNameAllowed(userName)) { LOGGER.log(Level.INFO, "{0} triggered for push to target branch of open merge request #{1}.", LoggerUtil.toArray(job.getFullName(), mergeRequest.getId())); From 70e68a29615008d4364a4eec5f49d4ca4f0fa633 Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 7 May 2021 15:42:12 -0500 Subject: [PATCH 11/13] Removed redundant nullcheck of t --- .../handler/push/OpenMergeRequestPushHookTriggerHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java index 26e3c2d56..3aa14ff5d 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/push/OpenMergeRequestPushHookTriggerHandler.java @@ -65,7 +65,7 @@ public void handle(Job job, PushHook hook, boolean ciSkip, BranchFilter br if (t instanceof GitLabPushTrigger) { final GitLabPushTrigger trigger = (GitLabPushTrigger) t; Integer projectId = hook.getProjectId(); - if (property != null && property.getClient() != null && projectId != null && trigger != null) { + if (property != null && property.getClient() != null && projectId != null) { GitLabClient client = property.getClient(); for (MergeRequest mergeRequest : getOpenMergeRequests(client, projectId.toString())) { if (mergeRequestLabelFilter.isMergeRequestAllowed(mergeRequest.getLabels())) { From c43799d8f560aff34a53a4913e8bfd8386e51357 Mon Sep 17 00:00:00 2001 From: jean flores Date: Mon, 10 May 2021 11:21:47 -0500 Subject: [PATCH 12/13] Removed unused getters --- .../dabsquared/gitlabjenkins/GitLabPushTrigger.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index 9d207df4c..a3cc23fc7 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -300,9 +300,9 @@ public BranchFilterType getBranchFilterType() { return branchFilterType; } - public UserNameFilterType getUserNameFilterType() { - return userNameFilterType; - } +// UserNameFilterType getUserNameFilterType() { +// return userNameFilterType; +// } public String getIncludeBranchesSpec() { return includeBranchesSpec; @@ -320,9 +320,9 @@ public String getTargetBranchRegex() { return targetBranchRegex; } - public String getExcludeUserNamesSpec() { - return excludeUserNamesSpec; - } +// String getExcludeUserNamesSpec() { +// return excludeUserNamesSpec; +// } public MergeRequestLabelFilterConfig getMergeRequestLabelFilterConfig() { return mergeRequestLabelFilterConfig; From 831d94233c8beca915aecc79287c378f16a2e4d1 Mon Sep 17 00:00:00 2001 From: jean flores Date: Fri, 14 May 2021 17:05:53 -0500 Subject: [PATCH 13/13] Testing visibility properties --- .../gitlabjenkins/GitLabPushTrigger.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index a3cc23fc7..39a755a1b 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -104,13 +104,13 @@ public class GitLabPushTrigger extends Trigger> implements MergeReques private transient boolean allowAllUserNames = false; private transient String branchFilterName; private BranchFilterType branchFilterType; - private transient String userNameFilterName; + protected final String userNameFilterName; private UserNameFilterType userNameFilterType; private String includeBranchesSpec; private String excludeBranchesSpec; private String sourceBranchRegex; private String targetBranchRegex; - private String excludeUserNamesSpec; + protected final String excludeUserNamesSpec; private MergeRequestLabelFilterConfig mergeRequestLabelFilterConfig; private volatile Secret secretToken; private String pendingBuildName; @@ -300,9 +300,9 @@ public BranchFilterType getBranchFilterType() { return branchFilterType; } -// UserNameFilterType getUserNameFilterType() { -// return userNameFilterType; -// } + public UserNameFilterType getUserNameFilterType() { + return userNameFilterType; + } public String getIncludeBranchesSpec() { return includeBranchesSpec; @@ -320,9 +320,9 @@ public String getTargetBranchRegex() { return targetBranchRegex; } -// String getExcludeUserNamesSpec() { -// return excludeUserNamesSpec; -// } + public String getExcludeUserNamesSpec() { + return excludeUserNamesSpec; + } public MergeRequestLabelFilterConfig getMergeRequestLabelFilterConfig() { return mergeRequestLabelFilterConfig;