From 9e186eedf1a09ca7ac4fbdea32b00e7e5331f7eb Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 05 Jan 2013 17:52:36 -0500 Subject: [PATCH] Updated documentation --- src/com/gitblit/GitblitUserService.java | 131 +++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 123 insertions(+), 8 deletions(-) diff --git a/src/com/gitblit/GitblitUserService.java b/src/com/gitblit/GitblitUserService.java index 122c21b..db450cf 100644 --- a/src/com/gitblit/GitblitUserService.java +++ b/src/com/gitblit/GitblitUserService.java @@ -23,8 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gitblit.Constants.AccountType; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; +import com.gitblit.utils.DeepCopier; +import com.gitblit.utils.StringUtils; /** * This class wraps the default user service and is recommended as the starting @@ -47,6 +50,8 @@ public class GitblitUserService implements IUserService { protected IUserService serviceImpl; + + protected final String ExternalAccount = "#externalAccount"; private final Logger logger = LoggerFactory.getLogger(GitblitUserService.class); @@ -95,8 +100,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); } } @@ -112,28 +117,59 @@ } @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 public boolean supportsCookies() { return serviceImpl.supportsCookies(); } @Override - public char[] getCookie(UserModel model) { + public String getCookie(UserModel model) { return serviceImpl.getCookie(model); } @Override public UserModel authenticate(char[] cookie) { - return serviceImpl.authenticate(cookie); + UserModel user = serviceImpl.authenticate(cookie); + setAccountType(user); + return user; } @Override public UserModel authenticate(String username, char[] password) { - return serviceImpl.authenticate(username, password); + UserModel user = serviceImpl.authenticate(username, password); + setAccountType(user); + return user; + } + + @Override + public void logout(UserModel user) { + serviceImpl.logout(user); } @Override public UserModel getUserModel(String username) { - return serviceImpl.getUserModel(username); + UserModel user = serviceImpl.getUserModel(username); + setAccountType(user); + return user; } @Override @@ -142,10 +178,39 @@ } @Override - public boolean updateUserModel(String username, UserModel model) { - return serviceImpl.updateUserModel(username, model); + public boolean updateUserModels(List<UserModel> models) { + return serviceImpl.updateUserModels(models); } + @Override + public boolean updateUserModel(String username, UserModel model) { + if (model.isLocalAccount() || supportsCredentialChanges()) { + if (!model.isLocalAccount() && !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 (!model.isLocalAccount() && !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); @@ -162,8 +227,22 @@ } @Override + public List<UserModel> getAllUsers() { + List<UserModel> users = serviceImpl.getAllUsers(); + for (UserModel user : users) { + setAccountType(user); + } + return users; + } + + @Override public List<String> getAllTeamNames() { return serviceImpl.getAllTeamNames(); + } + + @Override + public List<TeamModel> getAllTeams() { + return serviceImpl.getAllTeams(); } @Override @@ -172,6 +251,7 @@ } @Override + @Deprecated public boolean setTeamnamesForRepositoryRole(String role, List<String> teamnames) { return serviceImpl.setTeamnamesForRepositoryRole(role, teamnames); } @@ -187,7 +267,20 @@ } @Override + public boolean updateTeamModels(List<TeamModel> models) { + return serviceImpl.updateTeamModels(models); + } + + @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); } @@ -207,6 +300,7 @@ } @Override + @Deprecated public boolean setUsernamesForRepositoryRole(String role, List<String> usernames) { return serviceImpl.setUsernamesForRepositoryRole(role, usernames); } @@ -220,4 +314,25 @@ public boolean deleteRepositoryRole(String role) { return serviceImpl.deleteRepositoryRole(role); } + + protected boolean isLocalAccount(String username) { + UserModel user = getUserModel(username); + return user != null && user.isLocalAccount(); + } + + protected void setAccountType(UserModel user) { + if (user != null) { + if (!StringUtils.isEmpty(user.password) + && !ExternalAccount.equalsIgnoreCase(user.password) + && !"StoredInLDAP".equalsIgnoreCase(user.password)) { + user.accountType = AccountType.LOCAL; + } else { + user.accountType = getAccountType(); + } + } + } + + protected AccountType getAccountType() { + return AccountType.LOCAL; + } } -- Gitblit v1.9.1