James Moger
2012-09-29 1e1b85270f93b3bca624c99b478f3a9a23be2395
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;
@@ -734,6 +750,9 @@
         if (model.canAdmin) {
            roles.add(Constants.ADMIN_ROLE);
         }
         if (model.canFork) {
            roles.add(Constants.FORK_ROLE);
         }
         if (model.excludeFromFederation) {
            roles.add(Constants.NOT_FEDERATED_ROLE);
         }
@@ -842,6 +861,7 @@
               Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList(
                     USER, username, ROLE)));
               user.canAdmin = roles.contains(Constants.ADMIN_ROLE);
               user.canFork = roles.contains(Constants.FORK_ROLE);
               user.excludeFromFederation = roles.contains(Constants.NOT_FEDERATED_ROLE);
               // repository memberships