首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在将启动推送的用户获取到pre-receve挂钩

正在将启动推送的用户获取到pre-receve挂钩
EN

Stack Overflow用户
提问于 2018-08-23 18:49:55
回答 2查看 87关注 0票数 0

我正在开发一个带有atlassian-plugin-sdk的预接收钩子,我需要获得推送更改的用户的用户名。所以我想在钩子中得到的是我在本地可以通过'git config user.name‘得到的东西,这是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2018-09-19 03:54:34

我假设你正在做一个bitbucket插件。您可以通过向PreRepositoryHook注册CommitCallback来获取提交信息。下面的代码是未经测试的,但它应该获取提交的作者。

代码语言:javascript
复制
public class CommitMessageHook implements PreRepositoryHook<RepositoryHookRequest> {
    @Nonnull
    @Override
    public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext context, @Nonnull RepositoryHookRequest request) {

        // hook only when a commit is added to the repository
        context.registerCommitCallback(
                new CommitCallback(),
                RepositoryHookCommitFilter.ADDED_TO_REPOSITORY);

        return RepositoryHookResult.accepted();
    }

    private static class CommitCallback implements PreRepositoryHookCommitCallback {

        private RepositoryHookResult result = RepositoryHookResult.accepted();

        @Nonnull
        @Override
        public RepositoryHookResult getResult() {
            return result;
        }

        @Override
        public boolean onCommitAdded(@Nonnull CommitAddedDetails commitDetails) {
            Commit commit = commitDetails.getCommit();
            Person author = commit.getAuthor();
            String authorName = author.getName();
            return true;
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-09-20 04:45:36

使用AuthenticationContext获取当前经过身份验证的用户。请参见示例:

代码语言:javascript
复制
@Component
public class BlockInvalidRefPreReceiveRepositoryHook extends TaboolaBaseHook implements PreRepositoryHook<RepositoryHookRequest> {

    private final AuthenticationContext authenticationContext;

    @Autowired
    public BlockInvalidRefPreReceiveRepositoryHook(@ComponentImport AuthenticationContext authenticationContext) {
        this.authenticationContext = authenticationContext;
    }

    @Nonnull
    @Override
    public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext preRepositoryHookContext,
                                          @Nonnull RepositoryHookRequest repositoryHookRequest) {
        if (!isValidTrigger(repositoryHookRequest.getTrigger())){
            return RepositoryHookResult.accepted();
        }

        ApplicationUser currUser = this.authenticationContext.getCurrentUser();

        for (RefChange refChange : repositoryHookRequest.getRefChanges()) {
            if (refChange.getType() == RefChangeType.ADD && refChange.getRef().getType() == StandardRefType.TAG) {
                // Allow only specific user to push tags
                if (currUser.getType() == UserType.NORMAL && !currUser.getName().equals("validUserToPushTags")) {
                    return RepositoryHookResult.rejected("Only user validUserToPushTags is able to push tags",
                            "Only user validUserToPushTags is able to push tags");
                }
            }
        }
        return RepositoryHookResult.accepted();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51984065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档