James Moger
2012-10-03 f22a0633d08e38ac4bf92b5165a708e11b4d6598
src/com/gitblit/models/UserModel.java
@@ -20,6 +20,7 @@
import java.util.HashSet;
import java.util.Set;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.utils.StringUtils;
@@ -35,6 +36,8 @@
   private static final long serialVersionUID = 1L;
   public static final UserModel ANONYMOUS = new UserModel();
   // field names are reflectively mapped in EditUser page
   public String username;
   public String password;
@@ -42,6 +45,7 @@
   public String displayName;
   public String emailAddress;
   public boolean canAdmin;
   public boolean canFork;
   public boolean excludeFromFederation;
   public final Set<String> repositories = new HashSet<String>();
   public final Set<TeamModel> teams = new HashSet<TeamModel>();
@@ -52,6 +56,11 @@
   public UserModel(String username) {
      this.username = username;
      this.isAuthenticated = true;
   }
   private UserModel() {
      this.username = "anonymous";
      this.isAuthenticated = false;
   }
   /**
@@ -83,6 +92,43 @@
      }
      return false;
   }
   public boolean canViewRepository(RepositoryModel repository) {
      if (canAdmin) {
         return true;
      }
      if (repository.accessRestriction.atLeast(AccessRestrictionType.VIEW)) {
         return canAccessRepository(repository);
      }
      return true;
   }
   public boolean canForkRepository(RepositoryModel repository) {
      if (canAdmin) {
         return true;
      }
      if (!canFork) {
         // user has been prohibited from forking
         return false;
      }
      if (!isAuthenticated) {
         // unauthenticated user model
         return false;
      }
      if (("~" + username).equalsIgnoreCase(repository.projectPath)) {
         // this repository is already a personal repository
         return false;
      }
      if (!repository.allowForks) {
         // repository prohibits forks
         return false;
      }
      if (repository.accessRestriction.atLeast(AccessRestrictionType.CLONE)) {
         return canAccessRepository(repository);
      }
      // repository is not clone-restricted
      return true;
   }
   public boolean hasRepository(String name) {
      return repositories.contains(name.toLowerCase());