Update of 
/var/cvs/contributions/CMSContainer_Portlets/portlets-login/src/java/com/finalist/cmsc/portlets
In directory 
james.mmbase.org:/tmp/cvs-serv10108/src/java/com/finalist/cmsc/portlets

Modified Files:
        RegisterPorlet.java 
Log Message:
CMSC-948 Registration portlet for CMS container


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-login/src/java/com/finalist/cmsc/portlets
See also: http://www.mmbase.org/jira/browse/CMSC-948


Index: RegisterPorlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-login/src/java/com/finalist/cmsc/portlets/RegisterPorlet.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- RegisterPorlet.java 28 Nov 2008 12:18:55 -0000      1.9
+++ RegisterPorlet.java 2 Dec 2008 07:14:29 -0000       1.10
@@ -6,6 +6,8 @@
 import java.io.InputStreamReader;
 import java.util.Date;
 
+import javax.mail.MessagingException;
+import javax.mail.internet.AddressException;
 import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
 import javax.portlet.PortletException;
@@ -22,11 +24,12 @@
 import org.mmbase.bridge.Cloud;
 import org.mmbase.bridge.Node;
 import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.RelationList;
+import org.mmbase.bridge.Relation;
 import org.mmbase.bridge.util.SearchUtil;
 
-import com.finalist.cmsc.mmbase.EmailUtil;
+import com.finalist.cmsc.login.EmailUtils;
 import com.finalist.cmsc.mmbase.PropertiesUtil;
+import com.finalist.cmsc.mmbase.RelationUtil;
 import com.finalist.cmsc.portalImpl.PortalConstants;
 import com.finalist.cmsc.services.community.ApplicationContextFactory;
 import com.finalist.cmsc.services.community.person.Person;
@@ -37,7 +40,7 @@
 import com.finalist.cmsc.services.publish.Publish;
 import com.finalist.cmsc.util.HttpUtil;
 
-public class RegisterPorlet extends CmscPortlet{
+public class RegisterPorlet extends CmscPortlet {
 
    private static final String ACEGI_SECURITY_FORM_EMAIL_KEY = "email";
    private static final String ACEGI_SECURITY_FORM_FIRSTNAME_KEY = "firstName";
@@ -47,93 +50,122 @@
    private static final String ACEGI_SECURITY_FORM_PASSWORDCONF_KEY = 
"passwordConfirmation";
    private static final String DEFAULT_EMAILREGEX = 
"^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$";
 
+   private static final String DEFAULT_EMAIL_CONFIRM_TEMPLATE_DIR = 
"../templates/view/login/confirmation.txt";
    private static final String EMAIL_SUBJECT = "emailSubject";
    private static final String EMAIL_TEXT = "emailText";
    private static final String EMAIL_FROMEMAIL = "emailFromEmail";
    private static final String EMAIL_FROMNAME = "emailFromName";
    private static final Log log = LogFactory.getLog(RegisterPorlet.class);
 
+   protected void doEditDefaults(RenderRequest req, RenderResponse res) throws 
IOException,
+   PortletException {
+      PortletPreferences preferences = req.getPreferences();
+      setAttribute(req, EMAIL_SUBJECT, preferences.getValue(EMAIL_SUBJECT,""));
+      setAttribute(req, EMAIL_TEXT, 
preferences.getValue(EMAIL_TEXT,getConfirmationTemplate()));
+      setAttribute(req, EMAIL_FROMEMAIL, 
preferences.getValue(EMAIL_FROMEMAIL,""));
+      setAttribute(req, EMAIL_FROMNAME, 
preferences.getValue(EMAIL_FROMNAME,""));
+      
+      super.doEditDefaults(req, res);
+   }
    @Override
-   public void processView(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
+   public void processView(ActionRequest request, ActionResponse response)
+         throws PortletException, IOException {
+      
+      PortletPreferences preferences = request.getPreferences();
+      
       String email = request.getParameter(ACEGI_SECURITY_FORM_EMAIL_KEY);
-      String firstName = 
request.getParameter(ACEGI_SECURITY_FORM_FIRSTNAME_KEY);
+      String firstName = request
+            .getParameter(ACEGI_SECURITY_FORM_FIRSTNAME_KEY);
       String infix = request.getParameter(ACEGI_SECURITY_FORM_INFIX_KEY);
       String lastName = request.getParameter(ACEGI_SECURITY_FORM_LASTNAME_KEY);
-      String passwordText = 
request.getParameter(ACEGI_SECURITY_FORM_PASSWORD_KEY);
-      String passwordConfirmation = 
request.getParameter(ACEGI_SECURITY_FORM_PASSWORDCONF_KEY);
+      String passwordText = request
+            .getParameter(ACEGI_SECURITY_FORM_PASSWORD_KEY);
+      String passwordConfirmation = request
+            .getParameter(ACEGI_SECURITY_FORM_PASSWORDCONF_KEY);
       String errorMessages = "";
       Long authId = null;
-      if(StringUtils.isBlank(email)) { 
+      if (StringUtils.isBlank(email)) {
          errorMessages = "register.email.empty";
          response.setRenderParameter("errorMessages", errorMessages);
          return;
       }
-      if(!isEmailAddress(email)) { 
+      if (!isEmailAddress(email)) {
          errorMessages = "register.email.match";
          response.setRenderParameter("errorMessages", errorMessages);
          return;
       }
-      if(StringUtils.isEmpty(passwordText)) { 
+      if (StringUtils.isEmpty(passwordText)) {
          errorMessages = "register.password.empty";
          response.setRenderParameter("errorMessages", errorMessages);
          return;
       }
-      if(!passwordText.equals(passwordConfirmation)) {
+      if (!passwordText.equals(passwordConfirmation)) {
          errorMessages = "register.passwords.not_equal";
          response.setRenderParameter("errorMessages", errorMessages);
          return; 
       }
-      AuthenticationService authenticationService = 
(AuthenticationService)ApplicationContextFactory.getBean("authenticationService");
-      PersonService personHibernateService = 
(PersonService)ApplicationContextFactory.getBean("personService");
-      Long authenticationId = 
authenticationService.getAuthenticationIdForUserId(email);
+      AuthenticationService authenticationService = (AuthenticationService) 
ApplicationContextFactory
+            .getBean("authenticationService");
+      PersonService personHibernateService = (PersonService) 
ApplicationContextFactory
+            .getBean("personService");
+      Long authenticationId = authenticationService
+            .getAuthenticationIdForUserId(email);
       if (authenticationId == null) {
-         Authentication authentication = 
authenticationService.createAuthentication(email, passwordText);
+         Authentication authentication = authenticationService
+               .createAuthentication(email, passwordText);
          if (authentication.getId() != null) {
             authId = authentication.getId();
-            Person person = personHibernateService.createPerson(firstName, 
infix, lastName,authId,RegisterStatus.UNCONFIRMED.getName(),new Date());
+            Person person = personHibernateService.createPerson(firstName,
+                  infix, lastName, authId,
+                  RegisterStatus.UNCONFIRMED.getName(), new Date());
             person.setEmail(email);
             personHibernateService.updatePerson(person);
-            PortletPreferences preferences = request.getPreferences();
-            String emailSubject = preferences.getValue(EMAIL_SUBJECT, "Your 
account details associated with the given email address.\n");
+             String emailSubject = preferences
+                  .getValue(EMAIL_SUBJECT,
+                        "Your account details associated with the given email 
address.\n");
             String emailText = preferences.getValue(EMAIL_TEXT, null);
             String emailFrom = preferences.getValue(EMAIL_FROMEMAIL, null);
             String nameFrom = preferences.getValue(EMAIL_FROMNAME, null);
 
-            if (StringUtils.isBlank(emailText)) {
-               emailText = getEmailBody(request,authentication,person);
+            emailText = getEmailBody(emailText,request, authentication, 
person);
+            try {
+                  EmailUtils.sendEmail(emailFrom, nameFrom, email, 
emailSubject, emailText,
+                        email, "text/plain;charset=utf-8");
             }
-            else {
-               emailText = 
emailText+"\n\n"+getEmailBody(request,authentication,person);
+            catch (AddressException e) {
+                  log.error("Email address failed",e);
             }
-            //EmailUtil.send(null, email, subject, 
getEmailBody(request,authentication,person));
-            EmailUtil.send(null, null, email, nameFrom, emailFrom, 
emailSubject, emailText);
+            catch (MessagingException e) {
+                  log.error("Email MessagingException failed",e);
+            }
+
             response.setRenderParameter("email", email);
          } else {
-            log.info("add authenticationId failed");
+            log.error("add authenticationId failed");
          }
       } else {
          errorMessages = "register.user.exists";
          response.setRenderParameter("errorMessages", errorMessages);
-         log.info("add check1 failed for: " + email);
+         log.error("add check1 failed for: " + email);
       }
    }
 
    @Override
-   protected void doView(RenderRequest request, RenderResponse response) 
throws PortletException, IOException {
-      
+   protected void doView(RenderRequest request, RenderResponse response)
+         throws PortletException, IOException {
+      String screenId = (String) 
request.getAttribute(PortalConstants.CMSC_OM_PAGE_ID);
+      request.setAttribute("page", screenId);
       String template;
       String error = request.getParameter("errorMessages");
       String email = request.getParameter("email");
       String active = request.getParameter("active");
-      if(StringUtils.isNotEmpty(active)) {
+      if (StringUtils.isNotEmpty(active)) {
          request.setAttribute("active", active);
          template = "login/register_success.jsp";
-      }
-      else {
-         if(StringUtils.isNotEmpty(email)) {
+      } else {
+         if (StringUtils.isNotEmpty(email)) {
             template = "login/register_success.jsp";
-         }
-         else {
+         } else {
             if (StringUtils.isNotBlank(error)) {
                request.setAttribute("errormessages", error);
             }
@@ -144,78 +176,96 @@
    }
    
    @Override
-   public void processEditDefaults(ActionRequest request, ActionResponse 
response) throws PortletException, IOException {
+   public void processEditDefaults(ActionRequest request,
+         ActionResponse response) throws PortletException, IOException {
       PortletPreferences preferences = request.getPreferences();
-      String portletId = 
preferences.getValue(PortalConstants.CMSC_OM_PORTLET_ID, null);
-
-      String emailSubject = request.getParameter(EMAIL_SUBJECT);
-      String emailText = request.getParameter(EMAIL_TEXT);
-      String emailFromEmail = request.getParameter(EMAIL_FROMEMAIL);
-      String emailFromName = request.getParameter(EMAIL_FROMNAME);
-      
-      setPortletParameter(portletId, EMAIL_SUBJECT, emailSubject);
-      setPortletParameter(portletId, EMAIL_TEXT, emailText);
-      setPortletParameter(portletId, EMAIL_FROMEMAIL, emailFromEmail);
-      setPortletParameter(portletId, EMAIL_FROMNAME, emailFromName);
+      String portletId = preferences.getValue(
+            PortalConstants.CMSC_OM_PORTLET_ID, null);
+      setPortletParameter(portletId, EMAIL_SUBJECT, 
request.getParameter(EMAIL_SUBJECT));
+      setPortletParameter(portletId, EMAIL_TEXT, 
request.getParameter(EMAIL_TEXT));
+      setPortletParameter(portletId, EMAIL_FROMEMAIL, 
request.getParameter(EMAIL_FROMEMAIL));
+      setPortletParameter(portletId, EMAIL_FROMNAME, 
request.getParameter(EMAIL_FROMNAME));
 
       super.processEditDefaults(request, response);
    }
    
-   protected String getEmailBody(ActionRequest request,Authentication 
authentication,Person person) {
-      InputStream is = 
Thread.currentThread().getContextClassLoader().getResourceAsStream("../templates/view/login/confirmation.txt");
-      if(is == null) {
-         throw new NullPointerException("The confirmation template file 
confirmation.txt in directory 'templates/view/login' does't exist.");
+   protected String getEmailBody(String emailText,ActionRequest request,
+         Authentication authentication, Person person) {
+      Cloud cloud = getCloudForAnonymousUpdate(false);
+      String pageId = request.getParameter("page");
+      String url = getConfirmationLink(cloud,pageId);
+      String confirmUrl = HttpUtil.getWebappUri((HttpServletRequest) request)
+            + "login/confirm.do?s=" + authentication.getId() + url;
+      
+      return String.format(emailText == 
null?getConfirmationTemplate():emailText, authentication
+            .getUserId(), authentication.getPassword(), person.getFirstName(),
+            person.getInfix(), person.getLastName(), confirmUrl);
+
+   }
+   protected String getConfirmationTemplate() {
+      InputStream is = Thread.currentThread().getContextClassLoader()
+            .getResourceAsStream(DEFAULT_EMAIL_CONFIRM_TEMPLATE_DIR);
+      if (is == null) {
+         throw new NullPointerException(
+               "The confirmation template file confirmation.txt in directory 
'templates/view/login' does't exist.");
       }
       BufferedReader reader = new BufferedReader(new InputStreamReader(is));
       StringBuilder sb = new StringBuilder();
-      String strLine ;
+      String strLine;
       try {
-         while( (strLine = reader.readLine()) != null) {
-            sb.append(strLine+"\n");
+         while ((strLine = reader.readLine()) != null) {
+            sb.append(strLine + "\n");
          }
+      } catch (IOException e) {
+         log.error("error happen when reading email template", e);
       } 
-      catch (IOException e) {
-         log.error("error happen when reading email template",e);
+      return sb.toString();
       }   
-      Cloud cloud = getCloudForAnonymousUpdate(false);
-      String url = getConfirmationLink(cloud);
-      //String confirmUrl = HttpUtil.getWebappUri((HttpServletRequest) 
request)+"login/confirm.do?s="+encoder.encode(person.getEmail())+"&url="+encoder.encode(url);
-      String confirmUrl = HttpUtil.getWebappUri((HttpServletRequest) 
request)+"login/confirm.do?s="+authentication.getId()+url;
-      return String.format(sb.toString(), 
authentication.getUserId(),authentication.getPassword(),person.getFirstName(),person.getInfix(),person.getLastName(),confirmUrl);
 
-   }
-   
-   public Cloud getCloudForAnonymousUpdate(boolean isRemote) {
+   protected Cloud getCloudForAnonymousUpdate(boolean isRemote) {
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
       if (isRemote) {
          return Publish.getRemoteCloud(cloud);
       }
       return cloud;
    }
-   private String getConfirmationLink(Cloud cloud) {
+
+   protected String getConfirmationLink(Cloud cloud,String pageId) {
       String link = null;
-      NodeList portletDefinations = SearchUtil.findNodeList(cloud, 
"portletdefinition", "definition", this.getPortletName());
+      NodeList portletDefinations = SearchUtil.findNodeList(cloud,
+            "portletdefinition", "definition", this.getPortletName());
       Node regiesterPortletDefination = portletDefinations.getNode(0);
       if (portletDefinations.size() > 1) {
-         log.error("found " + portletDefinations.size() + " regiesterPortlet 
nodes; first one will be used");
+         log.error("found " + portletDefinations.size()
+               + " regiesterPortlet nodes; first one will be used");
+      }
+      NodeList portlets = regiesterPortletDefination.getRelatedNodes("portlet",
+            "definitionrel", SearchUtil.SOURCE);
+      Node portlet = null;
+      Relation relation = null;
+      Node page = cloud.getNode(Integer.parseInt(pageId));
+      NodeList nodeList = page.getRelatedNodes("portlet", "portletrel", 
SearchUtil.DESTINATION);
+      for (int i =0 ; i < nodeList.size() ; i++) {
+         for (int j = 0 ; j < portlets.size() ; j++) {
+            if (nodeList.getNode(i).getNumber() == 
portlets.getNode(j).getNumber()) {
+               portlet = nodeList.getNode(i);
+            }
+         }
+      }
+      relation = 
RelationUtil.getRelation(cloud.getRelationManager("portletrel"), 
page.getNumber(), portlet.getNumber());
+      if (page != null) {
+         link = "&pn=" + page.getNumber();  
+         if (relation != null) {
+            String name = relation.getStringValue("name");
+            if (name != null) {
+               link += "&nm=" + name;
+            }
       }
-      NodeList portlets = 
regiesterPortletDefination.getRelatedNodes("portlet", "definitionrel", 
SearchUtil.SOURCE);
-      Node  portlet = portlets.getNode(0);
-      NodeList pages = portlet.getRelatedNodes("page");
-      if (pages != null && pages.size() >= 1) {
-         Node page = pages.getNode(pages.size() - 1);
-//         link = SiteManagement.getPath(page.getNumber(), true);
-         link = "&pn="+page.getNumber();
-        // link = "content/" + page.getNumber();
-         RelationList relations = portlet.getRelations("portletrel", 
page.getNodeManager());
-         String name = relations.getRelation(0).getStringValue("name");
-//         link += 
"/_rp_".concat(name).concat("_").concat("active").concat("/1_");
-         link += "&nm="+name;
-      
       }
       return link;
    }
-   private  boolean isEmailAddress(String emailAddress) {
+
+   protected boolean isEmailAddress(String emailAddress) {
       if (emailAddress == null) {
          return false;
       }
@@ -226,6 +276,7 @@
       String emailRegex = getEmailRegex();
       return emailAddress.trim().matches(emailRegex);
    }
+
    protected String getEmailRegex() {
       String emailRegex = PropertiesUtil.getProperty("email.regex");
       if (StringUtils.isNotBlank(emailRegex)) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to