package org.appfuse.service;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.appfuse.model.User;
import org.appfuse.model.UserCookie;
import org.appfuse.persistence.UserDAO;
import org.appfuse.util.RandomGUID;
import org.appfuse.util.StringUtil;
public class UserManagerImpl extends BaseManager implements UserManager {
private Log log = LogFactory.getLog(UserManagerImpl.class);
private UserDAO dao;
public void setUserDAO(UserDAO dao) {
this.dao = dao;
}
public Object getUser(String username) throws Exception {
return dao.getUser(username);
}
public List getUsers(Object obj) throws Exception {
return dao.getUsers((User) obj);
}
public Object saveUser(Object obj) throws Exception {
return dao.saveUser((User) obj);
}
public void removeUser(Object obj) throws Exception {
User user = (User) obj;
if (log.isDebugEnabled()) {
log.debug("removing user: " + user.getUsername());
}
if (user.getRoles() != null) {
user.getRoles().clear();
}
dao.removeUser(user);
}
public String checkLoginCookie(String value) throws Exception {
value = StringUtil.decodeString(value);
String[] values = StringUtils.split(value, "|");
if (log.isDebugEnabled()) {
log.debug("looking up cookieId: " + values[1]);
}
UserCookie cookie = dao.getUserCookie(values[1]);
if (cookie != null) {
if (log.isDebugEnabled()) {
log.debug("cookieId lookup succeeded, generating new cookieId");
}
return saveLoginCookie(cookie);
} else {
if (log.isDebugEnabled()) {
log.debug("cookieId lookup failed, returning null");
}
return null;
}
}
public String createLoginCookie(String username) throws Exception {
UserCookie cookie = new UserCookie();
cookie.setUsername(username);
return saveLoginCookie(cookie);
}
private String saveLoginCookie(UserCookie cookie) throws Exception {
cookie.setCookieId(new RandomGUID().toString());
dao.saveUserCookie(cookie);
return StringUtil.encodeString(cookie.getUsername() + "|" +
cookie.getCookieId());
}
public void removeLoginCookies(String username) {
dao.removeUserCookies(username);
}
}