我正在开发一个带有atlassian-plugin-sdk的预接收钩子,我需要获得推送更改的用户的用户名。所以我想在钩子中得到的是我在本地可以通过'git config user.name‘得到的东西,这是可能的吗?
发布于 2018-09-19 03:54:34
我假设你正在做一个bitbucket插件。您可以通过向PreRepositoryHook注册CommitCallback来获取提交信息。下面的代码是未经测试的,但它应该获取提交的作者。
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;
}
}
}发布于 2018-09-20 04:45:36
使用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();
}
}https://stackoverflow.com/questions/51984065
复制相似问题