/*
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 .
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 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;
}
}