James Moger
2014-07-02 f9980ea7a6615f8bfef89fae7e6569c54bc749c3
src/main/java/com/gitblit/manager/GitblitManager.java
@@ -27,6 +27,7 @@
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
@@ -48,12 +49,10 @@
import com.gitblit.Constants;
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.FederationRequest;
import com.gitblit.Constants.FederationToken;
import com.gitblit.GitBlitException;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
import com.gitblit.models.FederationSet;
@@ -67,7 +66,6 @@
import com.gitblit.models.ProjectModel;
import com.gitblit.models.RegistrantAccessPermission;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.RepositoryUrl;
import com.gitblit.models.SearchResult;
import com.gitblit.models.ServerSettings;
import com.gitblit.models.ServerStatus;
@@ -78,7 +76,6 @@
import com.gitblit.transport.ssh.IPublicKeyManager;
import com.gitblit.transport.ssh.SshKey;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.JsonUtils;
import com.gitblit.utils.ObjectCache;
import com.gitblit.utils.StringUtils;
@@ -86,6 +83,9 @@
import com.google.gson.JsonIOException;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
/**
 * GitblitManager is an aggregate interface delegate.  It implements all the manager
@@ -99,6 +99,7 @@
 * @author James Moger
 *
 */
@Singleton
public class GitblitManager implements IGitblit {
   protected final Logger logger = LoggerFactory.getLogger(getClass());
@@ -125,6 +126,7 @@
   protected final IFederationManager federationManager;
   @Inject
   public GitblitManager(
         IRuntimeManager runtimeManager,
         IPluginManager pluginManager,
@@ -349,66 +351,6 @@
   }
   /**
    * Returns a list of repository URLs and the user access permission.
    *
    * @param request
    * @param user
    * @param repository
    * @return a list of repository urls
    */
   @Override
   public List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository) {
      if (user == null) {
         user = UserModel.ANONYMOUS;
      }
      String username = StringUtils.encodeUsername(UserModel.ANONYMOUS.equals(user) ? "" : user.username);
      List<RepositoryUrl> list = new ArrayList<RepositoryUrl>();
      // http/https url
      if (settings.getBoolean(Keys.git.enableGitServlet, true)) {
         AccessPermission permission = user.getRepositoryPermission(repository).permission;
         if (permission.exceeds(AccessPermission.NONE)) {
            list.add(new RepositoryUrl(getRepositoryUrl(request, username, repository), permission));
         }
      }
      // add all other urls
      // {0} = repository
      // {1} = username
      for (String url : settings.getStrings(Keys.web.otherUrls)) {
         if (url.contains("{1}")) {
            // external url requires username, only add url IF we have one
            if (!StringUtils.isEmpty(username)) {
               list.add(new RepositoryUrl(MessageFormat.format(url, repository.name, username), null));
            }
         } else {
            // external url does not require username
            list.add(new RepositoryUrl(MessageFormat.format(url, repository.name), null));
         }
      }
      return list;
   }
   protected String getRepositoryUrl(HttpServletRequest request, String username, RepositoryModel repository) {
      String gitblitUrl = settings.getString(Keys.web.canonicalUrl, null);
      if (StringUtils.isEmpty(gitblitUrl)) {
         gitblitUrl = HttpUtils.getGitblitURL(request);
      }
      StringBuilder sb = new StringBuilder();
      sb.append(gitblitUrl);
      sb.append(Constants.R_PATH);
      sb.append(repository.name);
      // inject username into repository url if authentication is required
      if (repository.accessRestriction.exceeds(AccessRestrictionType.NONE)
            && !StringUtils.isEmpty(username)) {
         sb.insert(sb.indexOf("://") + 3, username + "@");
      }
      return sb.toString();
   }
   /**
    * Returns the list of custom client applications to be used for the
    * repository url panel;
    *
@@ -596,13 +538,13 @@
   }
   @Override
   public boolean isServingRepositories() {
      return runtimeManager.isServingRepositories();
   public TimeZone getTimezone() {
      return runtimeManager.getTimezone();
   }
   @Override
   public TimeZone getTimezone() {
      return runtimeManager.getTimezone();
   public Locale getLocale() {
      return runtimeManager.getLocale();
   }
   @Override
@@ -635,9 +577,19 @@
      return runtimeManager.getStatus();
   }
   @Override
   public Injector getInjector() {
      return runtimeManager.getInjector();
   }
   /*
    * NOTIFICATION MANAGER
    */
   @Override
   public boolean isSendingMail() {
      return notificationManager.isSendingMail();
   }
   @Override
   public void sendMailToAdministrators(String subject, String message) {
@@ -923,6 +875,11 @@
   }
   @Override
   public void resetRepositoryCache(String repositoryName) {
      repositoryManager.resetRepositoryCache(repositoryName);
   }
   @Override
   public List<String> getRepositoryList() {
      return repositoryManager.getRepositoryList();
   }
@@ -1004,6 +961,11 @@
   }
   @Override
   public boolean canDelete(RepositoryModel model) {
      return repositoryManager.canDelete(model);
   }
   @Override
   public boolean deleteRepositoryModel(RepositoryModel model) {
      return repositoryManager.deleteRepositoryModel(model);
   }