James Moger
2012-09-07 13a3f5bc3e2d25fc76850f86070dc34efe60d77a
src/com/gitblit/ConfigUserService.java
@@ -279,9 +279,10 @@
    */
   @Override
   public boolean updateUserModel(String username, UserModel model) {
      UserModel originalUser = null;
      try {
         read();
         UserModel oldUser = users.remove(username.toLowerCase());
         originalUser = users.remove(username.toLowerCase());
         users.put(model.username.toLowerCase(), model);
         // null check on "final" teams because JSON-sourced UserModel
         // can have a null teams object
@@ -301,8 +302,8 @@
            }
            // check for implicit team removal
            if (oldUser != null) {
               for (TeamModel team : oldUser.teams) {
            if (originalUser != null) {
               for (TeamModel team : originalUser.teams) {
                  if (!model.isTeamMember(team.name)) {
                     team.removeUser(username);
                  }
@@ -312,6 +313,13 @@
         write();
         return true;
      } catch (Throwable t) {
         if (originalUser != null) {
            // restore original user
            users.put(originalUser.username.toLowerCase(), originalUser);
         } else {
            // drop attempted add
            users.remove(model.username.toLowerCase());
         }
         logger.error(MessageFormat.format("Failed to update user model {0}!", model.username),
               t);
      }
@@ -499,13 +507,21 @@
    */
   @Override
   public boolean updateTeamModel(String teamname, TeamModel model) {
      TeamModel original = null;
      try {
         read();
         teams.remove(teamname.toLowerCase());
         original = teams.remove(teamname.toLowerCase());
         teams.put(model.name.toLowerCase(), model);
         write();
         return true;
      } catch (Throwable t) {
         if (original != null) {
            // restore original team
            teams.put(original.name.toLowerCase(), original);
         } else {
            // drop attempted add
            teams.remove(model.name.toLowerCase());
         }
         logger.error(MessageFormat.format("Failed to update team model {0}!", model.name), t);
      }
      return false;
@@ -737,6 +753,12 @@
         if (model.excludeFromFederation) {
            roles.add(Constants.NOT_FEDERATED_ROLE);
         }
         if (roles.size() == 0) {
            // we do this to ensure that user record with no password
            // is written.  otherwise, StoredConfig optimizes that account
            // away. :(
            roles.add(Constants.NO_ROLE);
         }
         config.setStringList(USER, model.username, ROLE, roles);
         // repository memberships