From 7bf6e183ff8abd0c35eeb29f399da12389562ecb Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 29 Nov 2013 11:05:51 -0500 Subject: [PATCH] Moved servlets and services to separate packages --- src/main/java/com/gitblit/GitblitUserService.java | 72 ++++++++++++++--------------------- 1 files changed, 29 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/gitblit/GitblitUserService.java b/src/main/java/com/gitblit/GitblitUserService.java index fe35db9..715aed9 100644 --- a/src/main/java/com/gitblit/GitblitUserService.java +++ b/src/main/java/com/gitblit/GitblitUserService.java @@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory; import com.gitblit.Constants.AccountType; +import com.gitblit.manager.IRuntimeManager; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; import com.gitblit.utils.DeepCopier; @@ -33,26 +34,24 @@ /** * This class wraps the default user service and is recommended as the starting * point for custom user service implementations. - * + * * This does seem a little convoluted, but the idea is to allow IUserService to * evolve with new methods and implementations without breaking custom * authentication implementations. - * + * * The most common implementation of a custom IUserService is to only override * authentication and then delegate all other functionality to one of Gitblit's * user services. This class optimizes that use-case. - * + * * Extending GitblitUserService allows for authentication customization without * having to keep-up-with IUSerService API changes. - * + * * @author James Moger - * + * */ public class GitblitUserService implements IUserService { protected IUserService serviceImpl; - - protected final String ExternalAccount = "#externalAccount"; private final Logger logger = LoggerFactory.getLogger(GitblitUserService.class); @@ -60,19 +59,15 @@ } @Override - public void setup(IStoredSettings settings) { - File realmFile = GitBlit.getFileOrFolder(Keys.realm.userService, "${baseFolder}/users.conf"); + public void setup(IRuntimeManager runtimeManager) { + File realmFile = runtimeManager.getFileOrFolder(Keys.realm.userService, "${baseFolder}/users.conf"); serviceImpl = createUserService(realmFile); logger.info("GUS delegating to " + serviceImpl.toString()); } - @SuppressWarnings("deprecation") protected IUserService createUserService(File realmFile) { IUserService service = null; - if (realmFile.getName().toLowerCase().endsWith(".properties")) { - // v0.5.0 - v0.7.0 properties-based realm file - service = new FileUserService(realmFile); - } else if (realmFile.getName().toLowerCase().endsWith(".conf")) { + if (realmFile.getName().toLowerCase().endsWith(".conf")) { // v0.8.0+ config-based realm file service = new ConfigUserService(realmFile); } @@ -93,25 +88,9 @@ service.updateUserModel(admin); } - if (service instanceof FileUserService) { - // automatically create a users.conf realm file from the original - // users.properties file - File usersConfig = new File(realmFile.getParentFile(), "users.conf"); - if (!usersConfig.exists()) { - logger.info(MessageFormat.format("Automatically creating {0} based on {1}", - usersConfig.getAbsolutePath(), realmFile.getAbsolutePath())); - ConfigUserService configService = new ConfigUserService(usersConfig); - for (String username : service.getAllUsernames()) { - UserModel userModel = service.getUserModel(username); - configService.updateUserModel(userModel); - } - } - // issue suggestion about switching to users.conf - logger.warn("Please consider using \"users.conf\" instead of the deprecated \"users.properties\" file"); - } return service; } - + @Override public String toString() { return getClass().getSimpleName(); @@ -147,6 +126,12 @@ return serviceImpl.getCookie(model); } + /** + * Authenticate a user based on their cookie. + * + * @param cookie + * @return a user object or null + */ @Override public UserModel authenticate(char[] cookie) { UserModel user = serviceImpl.authenticate(cookie); @@ -160,7 +145,7 @@ setAccountType(user); return user; } - + @Override public void logout(UserModel user) { serviceImpl.logout(user); @@ -189,7 +174,7 @@ 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); @@ -202,7 +187,7 @@ 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); @@ -233,7 +218,7 @@ for (UserModel user : users) { setAccountType(user); } - return users; + return users; } @Override @@ -247,8 +232,8 @@ } @Override - public List<String> getTeamnamesForRepositoryRole(String role) { - return serviceImpl.getTeamnamesForRepositoryRole(role); + public List<String> getTeamNamesForRepositoryRole(String role) { + return serviceImpl.getTeamNamesForRepositoryRole(role); } @Override @@ -277,7 +262,7 @@ 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); @@ -315,16 +300,16 @@ 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) + && !Constants.EXTERNAL_ACCOUNT.equalsIgnoreCase(user.password) && !"StoredInLDAP".equalsIgnoreCase(user.password)) { user.accountType = AccountType.LOCAL; } else { @@ -332,8 +317,9 @@ } } } - - protected AccountType getAccountType() { + + @Override + public AccountType getAccountType() { return AccountType.LOCAL; } } -- Gitblit v1.9.1