Adapt code to permission backend
Bug: Issue 8756
Change-Id: I85be123b204358855fec887b0b377f8fc4f857e9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
index 7cd83ac..5588fab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
@@ -22,9 +22,13 @@
import com.gitblit.utils.StringUtils;
import com.google.gerrit.extensions.client.ProjectState;
import com.google.gerrit.reviewdb.client.Project.NameKey;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.gerrit.server.project.NoSuchProjectException;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.project.ProjectControl.Factory;
+import com.google.inject.Provider;
import java.util.HashSet;
import java.util.Set;
@@ -46,24 +50,34 @@
public final Set<TeamModel> teams = new HashSet<TeamModel>();
private final transient ProjectControl.Factory projectControlFactory;
+ private final transient Provider<CurrentUser> userProvider;
+ private final transient PermissionBackend permissionBackend;
// non-persisted fields
public boolean isAuthenticated;
public GerritToGitBlitUserModel(String username) {
- this(username, null);
+ this(username, null, null, null);
}
- public GerritToGitBlitUserModel(String username, ProjectControl.Factory projectControlFactory) {
+ public GerritToGitBlitUserModel(
+ String username,
+ ProjectControl.Factory projectControlFactory,
+ Provider<CurrentUser> userProvider,
+ PermissionBackend persmissionBackend) {
super(username);
this.username = username;
this.isAuthenticated = true;
this.projectControlFactory = projectControlFactory;
+ this.userProvider = userProvider;
+ this.permissionBackend = persmissionBackend;
}
public GerritToGitBlitUserModel(ProjectControl.Factory projectControlFactory) {
super(ANONYMOUS_USER);
this.projectControlFactory = projectControlFactory;
+ this.userProvider = null;
+ this.permissionBackend = null;
}
@Deprecated
@@ -88,8 +102,8 @@
boolean result = false;
try {
- ProjectControl control =
- projectControlFactory.controlFor(new NameKey(getRepositoryName(repository.name)));
+ NameKey project = new NameKey(getRepositoryName(repository.name));
+ ProjectControl control = projectControlFactory.controlFor(project);
if (control == null) {
return false;
@@ -99,9 +113,15 @@
case VIEW:
return !control.getProject().getState().equals(ProjectState.HIDDEN);
case CLONE:
- return control.canRunUploadPack();
+ return permissionBackend
+ .user(userProvider)
+ .project(project)
+ .testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
case PUSH:
- return control.canRunReceivePack();
+ permissionBackend
+ .user(userProvider)
+ .project(project)
+ .testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
default:
return true;
}
@@ -199,6 +219,6 @@
}
public static UserModel getAnonymous(Factory projectControl) {
- return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl);
+ return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl, null, null);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
index 5cc3afa..21bd512 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
@@ -27,11 +27,14 @@
import com.google.common.base.Strings;
import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.gerrit.httpd.WebSession;
+import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.account.AccountManager;
import com.google.gerrit.server.account.AuthRequest;
import com.google.gerrit.server.account.AuthResult;
+import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.project.ProjectControl;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.google.inject.Singleton;
import java.util.Collection;
import java.util.Collections;
@@ -45,6 +48,8 @@
public class GerritToGitBlitUserService implements IAuthenticationManager, IUserManager {
private static final Logger log = LoggerFactory.getLogger(GerritToGitBlitUserService.class);
+ private final Provider<CurrentUser> userProvider;
+ private final PermissionBackend permissionBackend;
private final ProjectControl.Factory projectControl;
private final AccountManager accountManager;
private final DynamicItem<WebSession> webSession;
@@ -53,9 +58,13 @@
@Inject
public GerritToGitBlitUserService(
+ Provider<CurrentUser> userProvider,
+ PermissionBackend permissionBackend,
ProjectControl.Factory projectControl,
AccountManager accountManager,
DynamicItem<WebSession> webSession) {
+ this.userProvider = userProvider;
+ this.permissionBackend = permissionBackend;
this.projectControl = projectControl;
this.accountManager = accountManager;
this.webSession = webSession;
@@ -93,7 +102,7 @@
return null;
}
- return new GerritToGitBlitUserModel(username, projectControl);
+ return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
}
public UserModel authenticateBasicAuth(String username, String password) {
@@ -113,7 +122,7 @@
return null;
}
- return new GerritToGitBlitUserModel(username, projectControl);
+ return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
}
@Override
@@ -211,7 +220,7 @@
@Override
public UserModel getUserModel(String username) {
- return new GerritToGitBlitUserModel(username, projectControl);
+ return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
}
@Override