package com.atlassian.labs.speakeasy.git; import com.atlassian.labs.speakeasy.external.SpeakeasyService; import com.atlassian.labs.speakeasy.model.UserExtension; import com.atlassian.sal.api.user.UserManager; import com.atlassian.sal.api.user.UserProfile; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.ReceivePack; import org.eclipse.jgit.transport.resolver.ReceivePackFactory; import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * */ @Component public class Receive implements ReceivePackFactory<HttpServletRequest> { private final UserManager userManager; private final SpeakeasyService speakeasyService; private final GitRepositoryManager gitRepositoryManager; @Autowired public Receive(UserManager userManager, SpeakeasyService speakeasyService, GitRepositoryManager gitRepositoryManager) { this.userManager = userManager; this.speakeasyService = speakeasyService; this.gitRepositoryManager = gitRepositoryManager; } public ReceivePack create(HttpServletRequest req, Repository repo) throws ServiceNotEnabledException, ServiceNotAuthorizedException { String user = userManager.getRemoteUsername(req); String pluginKey = repo.getWorkTree().getName(); UserProfile userProfile = userManager.getUserProfile(user); final UserExtension userExtension = speakeasyService.getRemotePlugin(pluginKey, user); if (userExtension != null && !userExtension.isCanEdit()) { throw new ServiceNotAuthorizedException(); } ReceiveCommits rc = new ReceiveCommits(userProfile, userExtension, repo, speakeasyService, gitRepositoryManager); return rc.getReceivePack(); } }