package gr.ntua.ivml.athena.actions; import java.util.List; import java.util.Date; import java.util.Locale; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Map; import gr.ntua.ivml.athena.util.MailSender; import gr.ntua.ivml.athena.db.DB; import gr.ntua.ivml.athena.persistent.Organization; import gr.ntua.ivml.athena.persistent.User; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.interceptor.SessionAware; @Results({ @Result(name="input", location="register.jsp"), @Result(name="error", location="register.jsp"), @Result(name="success", location="Home.action", type="redirectAction" ) }) public class Register extends GeneralAction implements SessionAware{ protected final Logger log = Logger.getLogger(getClass()); private String username; private String password; private String passwordconf; private String email; private String tel; private String firstName; private String lastName; public String jobrole; public long orgsel; private List<Organization> orgs; private Map session; @Action(value="Register",interceptorRefs=@InterceptorRef("defaultStack")) public String execute() throws Exception { try{ User user=new User(); if(DB.getUserDAO().isLoginAvailable(getUsername())==false){ log.debug( "login in use" ); addActionError("login already in use"); return ERROR; } user.setAccountActive(true); user.setEmail(getEmail()); user.setFirstName(getFirstName()); user.setLastName(getLastName()); user.encryptAndSetLoginPassword(getUsername(), getPassword()); user.setJobRole(getRole()); java.util.Date ucreated=new java.util.Date(); user.setAccountCreated(ucreated); Organization o=DB.getOrganizationDAO().findById(getOrgsel(), false); String result=""; if(getOrgsel()!=0 && o!=null){ //user.setAthenaRole("data viewer"); user.setRights(User.NO_RIGHTS); user.setOrganization(DB.getOrganizationDAO().findById(getOrgsel(), false)); MailSender ms=new MailSender(); String text="<BR>A user with login:<b>"+ user.getLogin() +"</b> has registered for oganization <b>"+ o.getName()+"</b>.<BR><BR> By default this user " + "has no rights within the organization. If you would like to grant him rights " + "please use the administration page from the Athena webtool."; String mail_to=""; if(DB.getOrganizationDAO().findById(getOrgsel(), false).getPrimaryContact()!=null){ mail_to=o.getPrimaryContact().getEmail(); } else if(DB.getOrganizationDAO().findById(getOrgsel(), false).findAdmin()!=null) { mail_to=o.findAdmin().getEmail(); } else{ addActionError("Could not find an administrator for the organization you are trying to register. Try again later or register for a different organization."); return ERROR; } result=ms.send(ms.adminmail, "Athena - new user registration", text, mail_to); if(result.indexOf("Error")>-1){ addActionError("Email could not be sent to the organization's administrator. Please try again later."); return ERROR;} result="You have registered for an Athena organization. Currently you have no rights for that organization. An email has been sent to the organization administrator to give you the appropriate rights."; } else{user.setAthenaRole("admin"); log.debug( "setting role to admin with no org" ); result="You have not registered for an organization. If you would like to create a new organization please use the administration page.";} DB.getUserDAO().makePersistent(user); getSession().put("user", user); getSession().put("regresult", result); } catch(Exception ex){ log.debug( "exception thrown:"+ex.getMessage() ); addActionError(ex.getMessage()); return ERROR; } return SUCCESS; } @Override @Action(value="Register_input",interceptorRefs=@InterceptorRef("defaultStack")) public String input() throws Exception { return super.input(); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getJobrole() { return jobrole; } public void setJobrole(String jobrole) { this.jobrole = jobrole; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public void setOrgsel( long orgsel ) { this.orgsel = orgsel; } public long getOrgsel() { return orgsel; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getFirstName() { return firstName; } public void setFirstName(String fname) { this.firstName = fname; } public String getLastName() { return lastName; } public void setLastName(String lname) { this.lastName = lname; } public String getRole() { return jobrole; } public void setRole(String role) { this.jobrole = jobrole; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPasswordconf() { return passwordconf; } public void setPasswordconf(String passwordconf) { this.passwordconf = passwordconf; } public List getOrgs() { orgs =DB.getOrganizationDAO().findAll(); return(orgs); } public void setSession(Map session) { this.session = session; } public Map getSession() { return session; } }