From 64b6f382d35e1fea0172b222277dae0312f274e4 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 25 Feb 2013 09:41:49 -0500 Subject: [PATCH] Merged LDAP user/team pre-fetching and synchronization enhancement from mschaefers --- src/com/gitblit/GitblitUserService.java | 64 ++++++++++++++++++++++++++++---- 1 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/com/gitblit/GitblitUserService.java b/src/com/gitblit/GitblitUserService.java index b4640b5..fe35db9 100644 --- a/src/com/gitblit/GitblitUserService.java +++ b/src/com/gitblit/GitblitUserService.java @@ -18,14 +18,17 @@ import java.io.File; import java.io.IOException; import java.text.MessageFormat; +import java.util.Collection; import java.util.List; 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 @@ -48,6 +51,8 @@ public class GitblitUserService implements IUserService { protected IUserService serviceImpl; + + protected final String ExternalAccount = "#externalAccount"; private final Logger logger = LoggerFactory.getLogger(GitblitUserService.class); @@ -56,7 +61,7 @@ @Override public void setup(IStoredSettings settings) { - File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "users.conf"); + File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "${baseFolder}/users.conf"); serviceImpl = createUserService(realmFile); logger.info("GUS delegating to " + serviceImpl.toString()); } @@ -144,12 +149,16 @@ @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 @@ -159,7 +168,9 @@ @Override public UserModel getUserModel(String username) { - return serviceImpl.getUserModel(username); + UserModel user = serviceImpl.getUserModel(username); + setAccountType(user); + return user; } @Override @@ -168,9 +179,14 @@ } @Override + public boolean updateUserModels(Collection<UserModel> models) { + return serviceImpl.updateUserModels(models); + } + + @Override public boolean updateUserModel(String username, UserModel model) { - if (supportsCredentialChanges()) { - if (!supportsTeamMembershipChanges()) { + if (model.isLocalAccount() || supportsCredentialChanges()) { + if (!model.isLocalAccount() && !supportsTeamMembershipChanges()) { // teams are externally controlled - copy from original model UserModel existingModel = getUserModel(username); @@ -183,7 +199,7 @@ if (model.username.equals(username)) { // passwords are not persisted by the backing user service model.password = null; - if (!supportsTeamMembershipChanges()) { + if (!model.isLocalAccount() && !supportsTeamMembershipChanges()) { // teams are externally controlled- copy from original model UserModel existingModel = getUserModel(username); @@ -213,7 +229,11 @@ @Override public List<UserModel> getAllUsers() { - return serviceImpl.getAllUsers(); + List<UserModel> users = serviceImpl.getAllUsers(); + for (UserModel user : users) { + setAccountType(user); + } + return users; } @Override @@ -232,6 +252,7 @@ } @Override + @Deprecated public boolean setTeamnamesForRepositoryRole(String role, List<String> teamnames) { return serviceImpl.setTeamnamesForRepositoryRole(role, teamnames); } @@ -244,6 +265,11 @@ @Override public boolean updateTeamModel(TeamModel model) { return serviceImpl.updateTeamModel(model); + } + + @Override + public boolean updateTeamModels(Collection<TeamModel> models) { + return serviceImpl.updateTeamModels(models); } @Override @@ -275,6 +301,7 @@ } @Override + @Deprecated public boolean setUsernamesForRepositoryRole(String role, List<String> usernames) { return serviceImpl.setUsernamesForRepositoryRole(role, usernames); } @@ -288,4 +315,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