From 67d4f89b0cddb3de05c20e08c20f1bea714c2a9e Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 18 Jun 2012 16:09:44 -0400 Subject: [PATCH] Added setting to control Groovy Grape folder (issue 91) --- src/com/gitblit/GitblitUserService.java | 84 +++++++++++++++++++++++++++++++++++++++-- 1 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/com/gitblit/GitblitUserService.java b/src/com/gitblit/GitblitUserService.java index 97e1a40..bb52bef 100644 --- a/src/com/gitblit/GitblitUserService.java +++ b/src/com/gitblit/GitblitUserService.java @@ -25,6 +25,7 @@ import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.DeepCopier; /** * This class wraps the default user service and is recommended as the starting @@ -57,6 +58,7 @@ public void setup(IStoredSettings settings) { File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "users.conf"); serviceImpl = createUserService(realmFile); + logger.info("GUS delegating to " + serviceImpl.toString()); } @SuppressWarnings("deprecation") @@ -72,7 +74,7 @@ assert service != null; - if (realmFile.exists()) { + if (!realmFile.exists()) { // Create the Administrator account for a new realm file try { realmFile.createNewFile(); @@ -94,8 +96,8 @@ logger.info(MessageFormat.format("Automatically creating {0} based on {1}", usersConfig.getAbsolutePath(), realmFile.getAbsolutePath())); ConfigUserService configService = new ConfigUserService(usersConfig); - for (String username : serviceImpl.getAllUsernames()) { - UserModel userModel = serviceImpl.getUserModel(username); + for (String username : service.getAllUsernames()) { + UserModel userModel = service.getUserModel(username); configService.updateUserModel(userModel); } } @@ -103,6 +105,31 @@ logger.warn("Please consider using \"users.conf\" instead of the deprecated \"users.properties\" file"); } return service; + } + + @Override + public String toString() { + return getClass().getSimpleName(); + } + + @Override + public boolean supportsCredentialChanges() { + return serviceImpl.supportsCredentialChanges(); + } + + @Override + public boolean supportsDisplayNameChanges() { + return serviceImpl.supportsDisplayNameChanges(); + } + + @Override + public boolean supportsEmailAddressChanges() { + return serviceImpl.supportsEmailAddressChanges(); + } + + @Override + public boolean supportsTeamMembershipChanges() { + return serviceImpl.supportsTeamMembershipChanges(); } @Override @@ -124,6 +151,11 @@ public UserModel authenticate(String username, char[] password) { return serviceImpl.authenticate(username, password); } + + @Override + public void logout(UserModel user) { + serviceImpl.logout(user); + } @Override public UserModel getUserModel(String username) { @@ -137,9 +169,33 @@ @Override public boolean updateUserModel(String username, UserModel model) { - return serviceImpl.updateUserModel(username, model); + if (supportsCredentialChanges()) { + if (!supportsTeamMembershipChanges()) { + // teams are externally controlled - copy from original model + UserModel existingModel = getUserModel(username); + + model = DeepCopier.copy(model); + model.teams.clear(); + model.teams.addAll(existingModel.teams); + } + return serviceImpl.updateUserModel(username, model); + } + if (model.username.equals(username)) { + // passwords are not persisted by the backing user service + model.password = null; + if (!supportsTeamMembershipChanges()) { + // teams are externally controlled- copy from original model + UserModel existingModel = getUserModel(username); + + model = DeepCopier.copy(model); + model.teams.clear(); + model.teams.addAll(existingModel.teams); + } + return serviceImpl.updateUserModel(username, model); + } + logger.error("Users can not be renamed!"); + return false; } - @Override public boolean deleteUserModel(UserModel model) { return serviceImpl.deleteUserModel(model); @@ -156,8 +212,18 @@ } @Override + public List<UserModel> getAllUsers() { + return serviceImpl.getAllUsers(); + } + + @Override public List<String> getAllTeamNames() { return serviceImpl.getAllTeamNames(); + } + + @Override + public List<TeamModel> getAllTeams() { + return serviceImpl.getAllTeams(); } @Override @@ -182,6 +248,14 @@ @Override public boolean updateTeamModel(String teamname, TeamModel model) { + if (!supportsTeamMembershipChanges()) { + // teams are externally controlled - copy from original model + TeamModel existingModel = getTeamModel(teamname); + + model = DeepCopier.copy(model); + model.users.clear(); + model.users.addAll(existingModel.users); + } return serviceImpl.updateTeamModel(teamname, model); } -- Gitblit v1.9.1