James Moger
2012-08-06 2987f602e112d37ff7db522c3cd9e653847a9865
Restore original team or user object on failure to update (issue-118)
2 files modified
19 ■■■■ changed files
docs/04_releases.mkd 1 ●●●● patch | view | raw | blame | history
src/com/gitblit/ConfigUserService.java 18 ●●●● patch | view | raw | blame | history
docs/04_releases.mkd
@@ -11,6 +11,7 @@
#### fixes
- Restore original user or team object on failure to update (issue 118)
- Repository URL uses `X-Forwarded-Proto` and `X-Forwarded-Port`, if available, for reverse proxy configurations (issue 115)
- Fixes to relative path determination in repository searh algorithm for symlinks (issue 116)
- Output real RAW content, not simulated RAW content (issue 114)
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,10 @@
            write();
            return true;
        } catch (Throwable t) {
            if (originalUser != null) {
                // restore original user
                users.put(originalUser.username, originalUser);
            }
            logger.error(MessageFormat.format("Failed to update user model {0}!", model.username),
                    t);
        }
@@ -499,13 +504,18 @@
     */
    @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, original);
            }
            logger.error(MessageFormat.format("Failed to update team model {0}!", model.name), t);
        }
        return false;