package org.sakaiproject.tool.resetpass;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.api.ServerConfigurationService;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryService;
import org.sakaiproject.authz.api.SecurityService;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
private static Log m_log = LogFactory.getLog(UserValidator.class);
public boolean supports(Class clazz) {
return clazz.equals(User.class);
}
public String userEmail;
private ServerConfigurationService serverConfigurationService;
public void setServerConfigurationService(ServerConfigurationService s) {
this.serverConfigurationService = s;
}
private UserDirectoryService userDirectoryService;
public void setUserDirectoryService(UserDirectoryService ds){
this.userDirectoryService = ds;
}
private SecurityService securityService;
public void setSecurityService(SecurityService ss){
this.securityService = ss;
}
public void validate(Object obj, Errors errors) {
RetUser retUser = (RetUser)obj;
m_log.debug("validating user " + retUser.getEmail());
Collection<User> c = this.userDirectoryService.findUsersByEmail(retUser.getEmail().trim());
if (c.size()>1) {
m_log.debug("more than one email!");
errors.reject("morethanone","more than one email");
return;
} else if (c.size()==0) {
m_log.debug("no such email");
errors.reject("nosuchuser","no such user");
return;
}
Iterator<User> i = c.iterator();
User user = (User)i.next();
m_log.debug("got user " + user.getId() + " of type " + user.getType());
if (securityService.isSuperUser(user.getId())) {
m_log.warn("tryng to change superuser password");
errors.reject("wrongtype","wrong type");
return;
}
boolean allroles = serverConfigurationService.getBoolean("resetPass.resetAllRoles",false);
if (!allroles){
String[] roles = serverConfigurationService.getStrings("resetRoles");
if (roles == null ){
roles = new String[]{"guest"};
}
List<String> rolesL = Arrays.asList(roles);
if (!rolesL.contains(user.getType())) {
m_log.warn("this is a type don't change");
errors.reject("wrongtype","wrong type");
return;
}
}
retUser.setUser(user);
}
}