diff options
Diffstat (limited to 'subsonic-main/src/main/java/net/sourceforge/subsonic/controller/UserSettingsController.java')
-rw-r--r-- | subsonic-main/src/main/java/net/sourceforge/subsonic/controller/UserSettingsController.java | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/UserSettingsController.java b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/UserSettingsController.java new file mode 100644 index 00000000..58848840 --- /dev/null +++ b/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/UserSettingsController.java @@ -0,0 +1,159 @@ +/* + This file is part of Subsonic. + + Subsonic is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Subsonic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Subsonic. If not, see <http://www.gnu.org/licenses/>. + + Copyright 2009 (C) Sindre Mehus + */ +package net.sourceforge.subsonic.controller; + +import java.util.List; +import java.util.Date; + +import net.sourceforge.subsonic.service.*; +import net.sourceforge.subsonic.domain.*; +import net.sourceforge.subsonic.command.*; +import org.springframework.web.servlet.mvc.*; +import org.springframework.web.bind.*; +import org.apache.commons.lang.StringUtils; + +import javax.servlet.http.*; + +/** + * Controller for the page used to administrate users. + * + * @author Sindre Mehus + */ +public class UserSettingsController extends SimpleFormController { + + private SecurityService securityService; + private SettingsService settingsService; + private TranscodingService transcodingService; + + @Override + protected Object formBackingObject(HttpServletRequest request) throws Exception { + UserSettingsCommand command = new UserSettingsCommand(); + + User user = getUser(request); + if (user != null) { + command.setUser(user); + command.setEmail(user.getEmail()); + command.setAdmin(User.USERNAME_ADMIN.equals(user.getUsername())); + UserSettings userSettings = settingsService.getUserSettings(user.getUsername()); + command.setTranscodeSchemeName(userSettings.getTranscodeScheme().name()); + + } else { + command.setNew(true); + command.setStreamRole(true); + command.setSettingsRole(true); + } + + command.setUsers(securityService.getAllUsers()); + command.setTranscodingSupported(transcodingService.isDownsamplingSupported(null)); + command.setTranscodeDirectory(transcodingService.getTranscodeDirectory().getPath()); + command.setTranscodeSchemes(TranscodeScheme.values()); + command.setLdapEnabled(settingsService.isLdapEnabled()); + + return command; + } + + private User getUser(HttpServletRequest request) throws ServletRequestBindingException { + Integer userIndex = ServletRequestUtils.getIntParameter(request, "userIndex"); + if (userIndex != null) { + List<User> allUsers = securityService.getAllUsers(); + if (userIndex >= 0 && userIndex < allUsers.size()) { + return allUsers.get(userIndex); + } + } + return null; + } + + @Override + protected void doSubmitAction(Object comm) throws Exception { + UserSettingsCommand command = (UserSettingsCommand) comm; + + if (command.isDelete()) { + deleteUser(command); + } else if (command.isNew()) { + createUser(command); + } else { + updateUser(command); + } + resetCommand(command); + } + + private void deleteUser(UserSettingsCommand command) { + securityService.deleteUser(command.getUsername()); + } + + public void createUser(UserSettingsCommand command) { + User user = new User(command.getUsername(), command.getPassword(), StringUtils.trimToNull(command.getEmail())); + user.setLdapAuthenticated(command.isLdapAuthenticated()); + securityService.createUser(user); + updateUser(command); + } + + private void updateUser(UserSettingsCommand command) { + User user = securityService.getUserByName(command.getUsername()); + user.setEmail(StringUtils.trimToNull(command.getEmail())); + user.setLdapAuthenticated(command.isLdapAuthenticated()); + user.setAdminRole(command.isAdminRole()); + user.setDownloadRole(command.isDownloadRole()); + user.setUploadRole(command.isUploadRole()); + user.setCoverArtRole(command.isCoverArtRole()); + user.setCommentRole(command.isCommentRole()); + user.setPodcastRole(command.isPodcastRole()); + user.setStreamRole(command.isStreamRole()); + user.setJukeboxRole(command.isJukeboxRole()); + user.setSettingsRole(command.isSettingsRole()); + user.setShareRole(command.isShareRole()); + + if (command.isPasswordChange()) { + user.setPassword(command.getPassword()); + } + + securityService.updateUser(user); + + UserSettings userSettings = settingsService.getUserSettings(command.getUsername()); + userSettings.setTranscodeScheme(TranscodeScheme.valueOf(command.getTranscodeSchemeName())); + userSettings.setChanged(new Date()); + settingsService.updateUserSettings(userSettings); + } + + private void resetCommand(UserSettingsCommand command) { + command.setUser(null); + command.setUsers(securityService.getAllUsers()); + command.setDelete(false); + command.setPasswordChange(false); + command.setNew(true); + command.setStreamRole(true); + command.setSettingsRole(true); + command.setPassword(null); + command.setConfirmPassword(null); + command.setEmail(null); + command.setTranscodeSchemeName(null); + } + + public void setSecurityService(SecurityService securityService) { + this.securityService = securityService; + } + + public void setSettingsService(SettingsService settingsService) { + this.settingsService = settingsService; + } + + public void setTranscodingService(TranscodingService transcodingService) { + this.transcodingService = transcodingService; + } +} |