package hamaster.gradesign.jsf.bean;
import hamaster.gradesgin.util.Hash;
import hamaster.gradesign.daemon.EJBClient;
import hamaster.gradesign.dao.UserDAO;
import hamaster.gradesign.entity.User;
import hamaster.gradesign.ibe.util.Hex;
import hamaster.gradesign.jsf.validator.StringValidator;
import java.io.Serializable;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
@RequestScoped
@ManagedBean(name = "editUserBean")
public class EditUserBean extends User implements Serializable {
private static final long serialVersionUID = -5479555579838299676L;
@ManagedProperty(value = "#{userDAO}")
private transient UserDAO userDAO;
private String confirmPassword;
public EditUserBean() {
}
// public UserDAO getUserDAO() {
// return userDAO;
// }
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public String register() {
if (confirmPassword == null || confirmPassword.equals(getPassword()) == false) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "两次输入的密码不一致", "两次输入的密码不一致");
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage("confirmpassword", message);
return "failure";
}
setRegDate(new Date());
setStatus(USER_REG);
hashNewUser(this);
System.out.println(this);
try {
userDAO.add(super.clone());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return "success";
}
public void validatePassword(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null || String.valueOf(value).length() < 6) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "密码长度过短", "密码长度过短");
throw new ValidatorException(message);
}
}
public void validateUsername(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "用户名不能为空", "用户名不能为空");
throw new ValidatorException(message);
}
String username = value.toString();
if (!username.matches(StringValidator.USERNAME_REGEX)) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "用户名格式错误", "用户名格式错误");
throw new ValidatorException(message);
}
}
public void validateEmail(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "电子邮件地址不能为空", "电子邮件地址不能为空");
throw new ValidatorException(message);
}
String email = value.toString();
if (!email.matches(StringValidator.EMAIL_REGEX)) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "电子邮件地址格式错误", "电子邮件地址格式错误");
throw new ValidatorException(message);
}
boolean exist = userDAO.isEmailExist(email);
if (exist) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "电子邮件地址已被使用", "电子邮件地址已被使用");
throw new ValidatorException(message);
}
}
public static void hashNewUser(User newUser) {
if (newUser == null || newUser.getPassword() == null || newUser.getRegDate() == null)
return;
String salt = EJBClient.util.format(newUser.getRegDate());
byte[] hash = Hash.sha1(new StringBuilder(newUser.getPassword()).append(salt).toString());
newUser.setPassword(Hex.hex(hash));
}
}