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