| | |
| | | import com.gitblit.IStoredSettings; |
| | | import com.gitblit.IUserService; |
| | | import com.gitblit.Keys; |
| | | import com.gitblit.extensions.UserTeamLifeCycleListener; |
| | | import com.gitblit.models.TeamModel; |
| | | import com.gitblit.models.UserModel; |
| | | import com.gitblit.utils.StringUtils; |
| | | import com.google.inject.Inject; |
| | | import com.google.inject.Singleton; |
| | | |
| | | /** |
| | | * The user manager manages persistence and retrieval of users and teams. |
| | |
| | | * @author James Moger |
| | | * |
| | | */ |
| | | @Singleton |
| | | public class UserManager implements IUserManager { |
| | | |
| | | private final Logger logger = LoggerFactory.getLogger(getClass()); |
| | |
| | | |
| | | private final IRuntimeManager runtimeManager; |
| | | |
| | | private final IPluginManager pluginManager; |
| | | |
| | | private final Map<String, String> legacyBackingServices; |
| | | |
| | | private IUserService userService; |
| | | |
| | | public UserManager(IRuntimeManager runtimeManager) { |
| | | @Inject |
| | | public UserManager(IRuntimeManager runtimeManager, IPluginManager pluginManager) { |
| | | this.settings = runtimeManager.getSettings(); |
| | | this.runtimeManager = runtimeManager; |
| | | this.pluginManager = pluginManager; |
| | | |
| | | // map of legacy realm backing user services |
| | | legacyBackingServices = new HashMap<String, String>(); |
| | |
| | | * @param userService |
| | | */ |
| | | public void setUserService(IUserService userService) { |
| | | logger.info(userService.toString()); |
| | | this.userService = userService; |
| | | this.userService.setup(runtimeManager); |
| | | logger.info(userService.toString()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | // check to see if this "file" is a custom user service class |
| | | Class<?> realmClass = Class.forName(realm); |
| | | service = (IUserService) realmClass.newInstance(); |
| | | } catch (Throwable t) { |
| | | } catch (ClassNotFoundException t) { |
| | | // typical file path configuration |
| | | File realmFile = runtimeManager.getFileOrFolder(Keys.realm.userService, "${baseFolder}/users.conf"); |
| | | service = createUserService(realmFile); |
| | | } catch (InstantiationException | IllegalAccessException e) { |
| | | logger.error("failed to instantiate user service {}: {}", realm, e.getMessage()); |
| | | } |
| | | } |
| | | setUserService(service); |
| | |
| | | */ |
| | | @Override |
| | | public boolean updateUserModel(UserModel model) { |
| | | return userService.updateUserModel(model); |
| | | final boolean isCreate = null == userService.getUserModel(model.username); |
| | | if (userService.updateUserModel(model)) { |
| | | if (isCreate) { |
| | | callCreateUserListeners(model); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean updateUserModel(String username, UserModel model) { |
| | | return userService.updateUserModel(username, model); |
| | | final boolean isCreate = null == userService.getUserModel(username); |
| | | if (userService.updateUserModel(username, model)) { |
| | | if (isCreate) { |
| | | callCreateUserListeners(model); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean deleteUserModel(UserModel model) { |
| | | return userService.deleteUserModel(model); |
| | | if (userService.deleteUserModel(model)) { |
| | | callDeleteUserListeners(model); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | return false; |
| | | } |
| | | String usernameDecoded = StringUtils.decodeUsername(username); |
| | | return userService.deleteUser(usernameDecoded); |
| | | UserModel user = getUserModel(usernameDecoded); |
| | | if (userService.deleteUser(usernameDecoded)) { |
| | | callDeleteUserListeners(user); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean updateTeamModel(TeamModel model) { |
| | | return userService.updateTeamModel(model); |
| | | final boolean isCreate = null == userService.getTeamModel(model.name); |
| | | if (userService.updateTeamModel(model)) { |
| | | if (isCreate) { |
| | | callCreateTeamListeners(model); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean updateTeamModel(String teamname, TeamModel model) { |
| | | return userService.updateTeamModel(teamname, model); |
| | | final boolean isCreate = null == userService.getTeamModel(teamname); |
| | | if (userService.updateTeamModel(teamname, model)) { |
| | | if (isCreate) { |
| | | callCreateTeamListeners(model); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean deleteTeamModel(TeamModel model) { |
| | | return userService.deleteTeamModel(model); |
| | | if (userService.deleteTeamModel(model)) { |
| | | callDeleteTeamListeners(model); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public boolean deleteTeam(String teamname) { |
| | | return userService.deleteTeam(teamname); |
| | | TeamModel team = userService.getTeamModel(teamname); |
| | | if (userService.deleteTeam(teamname)) { |
| | | callDeleteTeamListeners(team); |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | |
| | | public boolean deleteRepositoryRole(String role) { |
| | | return userService.deleteRepositoryRole(role); |
| | | } |
| | | |
| | | protected void callCreateUserListeners(UserModel user) { |
| | | if (pluginManager == null || user == null) { |
| | | return; |
| | | } |
| | | |
| | | for (UserTeamLifeCycleListener listener : pluginManager.getExtensions(UserTeamLifeCycleListener.class)) { |
| | | try { |
| | | listener.onCreation(user); |
| | | } catch (Throwable t) { |
| | | logger.error(String.format("failed to call plugin.onCreation%s", user.username), t); |
| | | } |
| | | } |
| | | } |
| | | |
| | | protected void callCreateTeamListeners(TeamModel team) { |
| | | if (pluginManager == null || team == null) { |
| | | return; |
| | | } |
| | | |
| | | for (UserTeamLifeCycleListener listener : pluginManager.getExtensions(UserTeamLifeCycleListener.class)) { |
| | | try { |
| | | listener.onCreation(team); |
| | | } catch (Throwable t) { |
| | | logger.error(String.format("failed to call plugin.onCreation %s", team.name), t); |
| | | } |
| | | } |
| | | } |
| | | |
| | | protected void callDeleteUserListeners(UserModel user) { |
| | | if (pluginManager == null || user == null) { |
| | | return; |
| | | } |
| | | |
| | | for (UserTeamLifeCycleListener listener : pluginManager.getExtensions(UserTeamLifeCycleListener.class)) { |
| | | try { |
| | | listener.onDeletion(user); |
| | | } catch (Throwable t) { |
| | | logger.error(String.format("failed to call plugin.onDeletion %s", user.username), t); |
| | | } |
| | | } |
| | | } |
| | | |
| | | protected void callDeleteTeamListeners(TeamModel team) { |
| | | if (pluginManager == null || team == null) { |
| | | return; |
| | | } |
| | | |
| | | for (UserTeamLifeCycleListener listener : pluginManager.getExtensions(UserTeamLifeCycleListener.class)) { |
| | | try { |
| | | listener.onDeletion(team); |
| | | } catch (Throwable t) { |
| | | logger.error(String.format("failed to call plugin.onDeletion %s", team.name), t); |
| | | } |
| | | } |
| | | } |
| | | } |