James Moger
2012-09-29 1e1b85270f93b3bca624c99b478f3a9a23be2395
src/com/gitblit/models/UserModel.java
@@ -20,6 +20,8 @@
import java.util.HashSet;
import java.util.Set;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.utils.StringUtils;
/**
@@ -41,12 +43,17 @@
   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>();
   // non-persisted fields
   public boolean isAuthenticated;
   public UserModel(String username) {
      this.username = username;
      this.isAuthenticated = true;
   }
   /**
@@ -65,8 +72,9 @@
   public boolean canAccessRepository(RepositoryModel repository) {
      boolean isOwner = !StringUtils.isEmpty(repository.owner)
            && repository.owner.equals(username);
      boolean allowAuthenticated = isAuthenticated && AuthorizationControl.AUTHENTICATED.equals(repository.authorizationControl);
      return canAdmin || isOwner || repositories.contains(repository.name.toLowerCase())
            || hasTeamAccess(repository.name);
            || hasTeamAccess(repository.name) || allowAuthenticated;
   }
   public boolean hasTeamAccess(String repositoryName) {
@@ -77,6 +85,33 @@
      }
      return false;
   }
   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());