James Moger
2013-07-03 abab3a4e2bc221eb358f846f171cb24fc0f687ad
src/main/java/com/gitblit/GitBlit.java
@@ -278,6 +278,15 @@
   }
   
   /**
    * Returns the active settings.
    *
    * @return the active settings
    */
   public static IStoredSettings getSettings() {
      return self().settings;
   }
   /**
    * Returns the user-defined blob encodings.
    * 
    * @return an array of encodings, may be empty
@@ -725,6 +734,18 @@
   }
   /**
    * Returns true if the username represents an internal account
    *
    * @param username
    * @return true if the specified username represents an internal account
    */
   protected boolean isInternalAccount(String username) {
      return !StringUtils.isEmpty(username)
            && (username.equalsIgnoreCase(Constants.FEDERATION_USER)
                  || username.equalsIgnoreCase(UserModel.ANONYMOUS.username));
   }
   /**
    * Authenticate a user based on a username and password.
    * 
    * @see IUserService.authenticate(String, char[])
@@ -836,6 +857,7 @@
      if (principal != null) {
         String username = principal.getName();
         if (!StringUtils.isEmpty(username)) {
            boolean internalAccount = isInternalAccount(username);
            UserModel user = getUserModel(username);
            if (user != null) {
               // existing user
@@ -844,7 +866,7 @@
                     user.username, httpRequest.getRemoteAddr()));
               return user;
            } else if (settings.getBoolean(Keys.realm.container.autoCreateAccounts, false)
                  && !username.equalsIgnoreCase(Constants.FEDERATION_USER)) {
                  && !internalAccount) {
               // auto-create user from an authenticated container principal
               user = new UserModel(username.toLowerCase());
               user.displayName = username;
@@ -854,7 +876,7 @@
               logger.debug(MessageFormat.format("{0} authenticated and created by servlet container principal from {1}",
                     user.username, httpRequest.getRemoteAddr()));
               return user;
            } else {
            } else if (!internalAccount) {
               logger.warn(MessageFormat.format("Failed to find UserModel for {0}, attempted servlet container authentication from {1}",
                     principal.getName(), httpRequest.getRemoteAddr()));
            }
@@ -1675,6 +1697,30 @@
      return count;
   }
   
   private void reloadProjectMarkdown(ProjectModel project) {
      // project markdown
      File pmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : project.name) + "/project.mkd");
      if (pmkd.exists()) {
         Date lm = new Date(pmkd.lastModified());
         if (!projectMarkdownCache.hasCurrent(project.name, lm)) {
            String mkd = com.gitblit.utils.FileUtils.readContent(pmkd,  "\n");
            projectMarkdownCache.updateObject(project.name, lm, mkd);
         }
         project.projectMarkdown = projectMarkdownCache.getObject(project.name);
      }
      // project repositories markdown
      File rmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : project.name) + "/repositories.mkd");
      if (rmkd.exists()) {
         Date lm = new Date(rmkd.lastModified());
         if (!projectRepositoriesMarkdownCache.hasCurrent(project.name, lm)) {
            String mkd = com.gitblit.utils.FileUtils.readContent(rmkd,  "\n");
            projectRepositoriesMarkdownCache.updateObject(project.name, lm, mkd);
         }
         project.repositoriesMarkdown = projectRepositoriesMarkdownCache.getObject(project.name);
      }
   }
   
   /**
    * Returns the map of project config.  This map is cached and reloaded if
@@ -1709,27 +1755,7 @@
            project.title = projectConfigs.getString("project", name, "title");
            project.description = projectConfigs.getString("project", name, "description");
            
            // project markdown
            File pmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : name) + "/project.mkd");
            if (pmkd.exists()) {
               Date lm = new Date(pmkd.lastModified());
               if (!projectMarkdownCache.hasCurrent(name, lm)) {
                  String mkd = com.gitblit.utils.FileUtils.readContent(pmkd,  "\n");
                  projectMarkdownCache.updateObject(name, lm, mkd);
               }
               project.projectMarkdown = projectMarkdownCache.getObject(name);
            }
            // project repositories markdown
            File rmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : name) + "/repositories.mkd");
            if (rmkd.exists()) {
               Date lm = new Date(rmkd.lastModified());
               if (!projectRepositoriesMarkdownCache.hasCurrent(name, lm)) {
                  String mkd = com.gitblit.utils.FileUtils.readContent(rmkd,  "\n");
                  projectRepositoriesMarkdownCache.updateObject(name, lm, mkd);
               }
               project.repositoriesMarkdown = projectRepositoriesMarkdownCache.getObject(name);
            }
            reloadProjectMarkdown(project);
            
            configs.put(name.toLowerCase(), project);
         }
@@ -1851,6 +1877,8 @@
         // no repositories == no project
         return null;
      }
      reloadProjectMarkdown(project);
      return project;
   }
   
@@ -2933,8 +2961,7 @@
      String cloneUrl = sb.toString();
      // Retrieve all available repositories
      UserModel user = new UserModel(Constants.FEDERATION_USER);
      user.canAdmin = true;
      UserModel user = getFederationUser();
      List<RepositoryModel> list = getRepositoryModels(user);
      // create the [cloneurl, repositoryModel] map