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