James Moger
2012-06-18 67d4f89b0cddb3de05c20e08c20f1bea714c2a9e
src/com/gitblit/ConfigUserService.java
@@ -60,6 +60,10 @@
   private static final String USER = "user";
   private static final String PASSWORD = "password";
   private static final String DISPLAYNAME = "displayName";
   private static final String EMAILADDRESS = "emailAddress";
   private static final String REPOSITORY = "repository";
@@ -82,6 +86,8 @@
   private final Map<String, TeamModel> teams = new ConcurrentHashMap<String, TeamModel>();
   private volatile long lastModified;
   private volatile boolean forceReload;
   public ConfigUserService(File realmFile) {
      this.realmFile = realmFile;
@@ -97,6 +103,49 @@
   public void setup(IStoredSettings settings) {
   }
   /**
    * Does the user service support changes to credentials?
    *
    * @return true or false
    * @since 1.0.0
    */
   @Override
   public boolean supportsCredentialChanges() {
      return true;
   }
   /**
    * Does the user service support changes to user display name?
    *
    * @return true or false
    * @since 1.0.0
    */
   @Override
   public boolean supportsDisplayNameChanges() {
      return true;
   }
   /**
    * Does the user service support changes to user email address?
    *
    * @return true or false
    * @since 1.0.0
    */
   @Override
   public boolean supportsEmailAddressChanges() {
      return true;
   }
   /**
    * Does the user service support changes to team memberships?
    *
    * @return true or false
    * @since 1.0.0
    */
   public boolean supportsTeamMembershipChanges() {
      return true;
   }
   /**
    * Does the user service support cookie authentication?
    * 
@@ -176,6 +225,15 @@
      return returnedUser;
   }
   /**
    * Logout a user.
    *
    * @param user
    */
   @Override
   public void logout(UserModel user) {
   }
   /**
    * Retrieve the user object for the specified username.
    * 
@@ -654,7 +712,15 @@
      // write users
      for (UserModel model : users.values()) {
         config.setString(USER, model.username, PASSWORD, model.password);
         if (!StringUtils.isEmpty(model.password)) {
            config.setString(USER, model.username, PASSWORD, model.password);
         }
         if (!StringUtils.isEmpty(model.displayName)) {
            config.setString(USER, model.username, DISPLAYNAME, model.displayName);
         }
         if (!StringUtils.isEmpty(model.emailAddress)) {
            config.setString(USER, model.username, EMAILADDRESS, model.emailAddress);
         }
         // user roles
         List<String> roles = new ArrayList<String>();
@@ -711,6 +777,9 @@
      }
      config.save();
      // manually set the forceReload flag because not all JVMs support real
      // millisecond resolution of lastModified. (issue-55)
      forceReload = true;
      // If the write is successful, delete the current file and rename
      // the temporary copy to the original filename.
@@ -735,7 +804,8 @@
    * Reads the realm file and rebuilds the in-memory lookup tables.
    */
   protected synchronized void read() {
      if (realmFile.exists() && (realmFile.lastModified() > lastModified)) {
      if (realmFile.exists() && (forceReload || (realmFile.lastModified() != lastModified))) {
         forceReload = false;
         lastModified = realmFile.lastModified();
         users.clear();
         cookies.clear();
@@ -747,7 +817,9 @@
            Set<String> usernames = config.getSubsections(USER);
            for (String username : usernames) {
               UserModel user = new UserModel(username.toLowerCase());
               user.password = config.getString(USER, username, PASSWORD);
               user.password = config.getString(USER, username, PASSWORD);
               user.displayName = config.getString(USER, username, DISPLAYNAME);
               user.emailAddress = config.getString(USER, username, EMAILADDRESS);
               // user roles
               Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList(