获取启动推送到预接收钩的用户

时间:2018-08-23 10:49:55

标签: atlassian-plugin-sdk

我正在使用atlassian-plugin-sdk开发一个预接收钩子,我需要获取推送更改的用户的用户名。因此,我想了解的是我在本地可以通过'git config user.name'获得的信息,这有可能吗?

2 个答案:

答案 0 :(得分:0)

I assume you are making a bitbucket plugin. You can get commit information by registering a CommitCallback to the PreRepositoryHook. Below code is untested, but it should fetch the author of a commit.

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;
        }
    }
}

答案 1 :(得分:0)

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

@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();
    }
}