Merge branch 'stable-2.15'

* stable-2.15:
  Eliminate usage of ProjectControl
  GerritToGitBlitUserModel#canAccess: Restore return statement

Change-Id: If6466a9cd0ee7f13ddb7438391805b63a3500351
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 5588fab..d33c48b 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
@@ -20,14 +20,12 @@
 import com.gitblit.models.TeamModel;
 import com.gitblit.models.UserModel;
 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.PermissionBackend.ForProject;
 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.gerrit.server.permissions.RefPermission;
 import com.google.inject.Provider;
 import java.util.HashSet;
 import java.util.Set;
@@ -49,7 +47,6 @@
   public final Set<String> repositories = new HashSet<String>();
   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;
 
@@ -57,41 +54,31 @@
   public boolean isAuthenticated;
 
   public GerritToGitBlitUserModel(String username) {
-    this(username, null, null, null);
+    this(username, null, null);
   }
 
   public GerritToGitBlitUserModel(
-      String username,
-      ProjectControl.Factory projectControlFactory,
-      Provider<CurrentUser> userProvider,
-      PermissionBackend persmissionBackend) {
+      String username, Provider<CurrentUser> userProvider, PermissionBackend permissionBackend) {
     super(username);
     this.username = username;
     this.isAuthenticated = true;
-    this.projectControlFactory = projectControlFactory;
     this.userProvider = userProvider;
-    this.permissionBackend = persmissionBackend;
+    this.permissionBackend = permissionBackend;
   }
 
-  public GerritToGitBlitUserModel(ProjectControl.Factory projectControlFactory) {
+  public GerritToGitBlitUserModel() {
     super(ANONYMOUS_USER);
-    this.projectControlFactory = projectControlFactory;
     this.userProvider = null;
     this.permissionBackend = null;
   }
 
-  @Deprecated
-  public boolean canAccessRepository(String repositoryName) {
-    boolean result = false;
-
-    try {
-      ProjectControl control = projectControlFactory.controlFor(new NameKey(repositoryName));
-      result = control != null;
-    } catch (NoSuchProjectException e) {
-      result = false;
-    }
-
-    return result;
+  @Override
+  public boolean canView(RepositoryModel repository, String ref) {
+    return permissionBackend
+        .user(userProvider)
+        .project(new NameKey(StringUtils.stripDotGit(repository.name)))
+        .ref(ref)
+        .testOrFalse(RefPermission.READ);
   }
 
   @Override
@@ -99,59 +86,28 @@
       RepositoryModel repository,
       AccessRestrictionType ifRestriction,
       AccessPermission requirePermission) {
-    boolean result = false;
-
-    try {
-      NameKey project = new NameKey(getRepositoryName(repository.name));
-      ProjectControl control = projectControlFactory.controlFor(project);
-
-      if (control == null) {
-        return false;
-      }
-
-      switch (ifRestriction) {
-        case VIEW:
-          return !control.getProject().getState().equals(ProjectState.HIDDEN);
-        case CLONE:
-          return permissionBackend
-              .user(userProvider)
-              .project(project)
-              .testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
-        case PUSH:
-          permissionBackend
-              .user(userProvider)
-              .project(project)
-              .testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
-        default:
-          return true;
-      }
-    } catch (NoSuchProjectException e) {
-      result = false;
+    ForProject projectPermissions =
+        permissionBackend
+            .user(userProvider)
+            .project(new NameKey(StringUtils.stripDotGit(repository.name)));
+    switch (ifRestriction) {
+      case VIEW:
+        return projectPermissions.testOrFalse(ProjectPermission.ACCESS);
+      case CLONE:
+        return projectPermissions.testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
+      case PUSH:
+        return projectPermissions.testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
+      default:
+        return true;
     }
-
-    return result;
-  }
-
-  public String getRepositoryName(String name) {
-    if (name.endsWith(".git")) {
-      name = name.substring(0, name.length() - 4);
-    }
-    return name;
   }
 
   @Override
   public boolean hasRepositoryPermission(String name) {
-    boolean result = false;
-
-    try {
-      name = getRepositoryName(name);
-      ProjectControl control = projectControlFactory.controlFor(new NameKey(name));
-      result = control != null && !control.getProject().getState().equals(ProjectState.HIDDEN);
-    } catch (NoSuchProjectException e) {
-      result = false;
-    }
-
-    return result;
+    return permissionBackend
+        .user(userProvider)
+        .project(new NameKey(StringUtils.stripDotGit(name)))
+        .testOrFalse(ProjectPermission.ACCESS);
   }
 
   public boolean hasTeamAccess(String repositoryName) {
@@ -218,7 +174,7 @@
     return username.compareTo(o.username);
   }
 
-  public static UserModel getAnonymous(Factory projectControl) {
-    return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl, null, null);
+  public static UserModel getAnonymous() {
+    return new GerritToGitBlitUserModel(ANONYMOUS_USER, 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 21bd512..ed2ac6f 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
@@ -32,7 +32,6 @@
 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;
@@ -50,7 +49,6 @@
 
   private final Provider<CurrentUser> userProvider;
   private final PermissionBackend permissionBackend;
-  private final ProjectControl.Factory projectControl;
   private final AccountManager accountManager;
   private final DynamicItem<WebSession> webSession;
 
@@ -60,12 +58,10 @@
   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;
   }
@@ -75,7 +71,7 @@
     String passwordString = new String(password);
 
     if (username.equals(GerritToGitBlitUserModel.ANONYMOUS_USER)) {
-      return GerritToGitBlitUserModel.getAnonymous(projectControl);
+      return GerritToGitBlitUserModel.getAnonymous();
     } else if (passwordString.startsWith(GerritToGitBlitUserService.SESSIONAUTH)) {
       return authenticateSSO(
           username, passwordString.substring(GerritToGitBlitUserService.SESSIONAUTH.length()));
@@ -102,7 +98,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   public UserModel authenticateBasicAuth(String username, String password) {
@@ -122,7 +118,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   @Override
@@ -142,7 +138,7 @@
     httpRequest.getSession().setAttribute(Constants.ATTRIB_AUTHTYPE, AuthenticationType.CONTAINER);
 
     if (Strings.isNullOrEmpty(gerritUsername) || Strings.isNullOrEmpty(gerritToken)) {
-      return GerritToGitBlitUserModel.getAnonymous(projectControl);
+      return GerritToGitBlitUserModel.getAnonymous();
     } else {
       return authenticateSSO(gerritUsername, gerritToken);
     }
@@ -220,7 +216,7 @@
 
   @Override
   public UserModel getUserModel(String username) {
-    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   @Override