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

Modified Files:
      Tag: b1_5
        LoginPortlet.java RegisterPorlet.java 
Added Files:
      Tag: b1_5
        AbstractLoginPortlet.java 
Log Message:
CMSC-1162 Newsletter: reset community user password


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-1162


AbstractLoginPortlet.java is new



Index: LoginPortlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-login/src/java/com/finalist/cmsc/portlets/LoginPortlet.java,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -b -r1.11 -r1.11.2.1
--- LoginPortlet.java   9 Jul 2008 02:56:17 -0000       1.11
+++ LoginPortlet.java   4 Dec 2008 09:41:28 -0000       1.11.2.1
@@ -14,6 +14,7 @@
 import javax.portlet.ActionRequest;
 import javax.portlet.ActionResponse;
 import javax.portlet.PortletException;
+import javax.portlet.PortletPreferences;
 import javax.portlet.PortletSession;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
@@ -22,27 +23,45 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import com.finalist.cmsc.login.EmailUtils;
+import com.finalist.cmsc.login.PasswordGenerator;
+import com.finalist.cmsc.services.community.ApplicationContextFactory;
 import com.finalist.cmsc.services.community.Community;
+import com.finalist.cmsc.services.community.person.Person;
+import com.finalist.cmsc.services.community.person.PersonService;
+import com.finalist.cmsc.services.community.person.RegisterStatus;
+import com.finalist.cmsc.services.community.security.Authentication;
+import com.finalist.cmsc.services.community.security.AuthenticationService;
 
 /**
  * Login portlet
  *
  * @author Remco Bos
  */
-public class LoginPortlet extends CmscPortlet {
+public class LoginPortlet extends AbstractLoginPortlet {
    protected static final String ACTION_PARAMETER = "action";
 
    private static final String ACEGI_SECURITY_FORM_USERNAME_KEY = "j_username";
    private static final String ACEGI_SECURITY_FORM_PASSWORD_KEY = "j_password";
+   private static final String EMAIL_TEMPLATE_DIR = 
"../templates/view/login/forgotpassword.txt";
 
-   private static final Log log = LogFactory.getLog(LoginPortlet.class);
+   private static final String SEND_PASSWORD = "send_password";
 
+   private static final Log log = LogFactory.getLog(LoginPortlet.class);
+   protected void doEditDefaults(RenderRequest req, RenderResponse res) throws 
IOException,
+   PortletException {
+      super.DEFAULT_EMAIL_CONFIRM_TEMPLATE_DIR = EMAIL_TEMPLATE_DIR;
+      super.doEditDefaults(req, res);
+   }
    @Override
    public void processView(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
       String action = request.getParameter(ACTION_PARAMETER);
+      PortletPreferences preferences = request.getPreferences();
       if ("login".equals(action)) {
          String userName = 
request.getParameter(ACEGI_SECURITY_FORM_USERNAME_KEY);
          String password = 
request.getParameter(ACEGI_SECURITY_FORM_PASSWORD_KEY);
+         String send_password =  request.getParameter(SEND_PASSWORD);
+         if (StringUtils.isEmpty(send_password)) {
          request.getPortletSession().setAttribute("username", userName, 
PortletSession.APPLICATION_SCOPE);
          if (StringUtils.isNotBlank(userName) && 
StringUtils.isNotBlank(password)) {
             Community.login(userName, password);
@@ -53,10 +72,61 @@
             log.info(String.format("Login failed for user %s", userName));
             response.setRenderParameter("errormessage", "login.failed");
          }
+         }
+         else {
+            response.setRenderParameter(SEND_PASSWORD, "send");
+         }
       } else if ("logout".equals(action)) {
          request.getPortletSession().removeAttribute("username", 
PortletSession.APPLICATION_SCOPE);
          Community.logout();
-      } else {
+      } else if ("send_password".equals(action)) {
+         //TODO  send password
+         String email =  request.getParameter("username");
+         String sendMessage = "send_success";
+         AuthenticationService authenticationService = (AuthenticationService) 
ApplicationContextFactory
+         .getBean("authenticationService");
+         PersonService personHibernateService = (PersonService) 
ApplicationContextFactory
+               .getBean("personService");
+
+         if (authenticationService.authenticationExists(email)) {
+            Person person = personHibernateService.getPersonByUserId(email);
+            Authentication authentication = 
authenticationService.findAuthentication(email);
+           
if(RegisterStatus.ACTIVE.getName().equalsIgnoreCase(person.getActive()))
+           {
+              //todo reset password and send mail 
+              PasswordGenerator generator = new PasswordGenerator();
+              String newPassword = null;
+              try {
+                 newPassword = 
generator.generate(PasswordGenerator.PRINTABLE_CHARACTERS, 7);
+                 authenticationService.updateAuthentication(email, 
authentication.getPassword(), newPassword);
+                 authentication.setPassword(newPassword);
+                 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);
+                 emailText = getEmailBody(emailText,request, authentication, 
person);
+                 EmailUtils.sendEmail(emailFrom, nameFrom, email, 
emailSubject, emailText,
+                             email, "text/plain;charset=utf-8");
+                 sendMessage = "view.account.success";
+              } 
+              catch (Exception e) {
+                  log.error("password generation errors");
+              }
+           }
+           else if 
(RegisterStatus.UNCONFIRMED.getName().equalsIgnoreCase(person.getActive())){
+              sendMessage = "view.account.unconfirmed";
+           }
+           else if 
(RegisterStatus.BLOCKED.getName().equalsIgnoreCase(person.getActive())){
+              sendMessage = "view.account.blocked"; 
+           }
+         } 
+         else {
+            //log.info("add authenticationId failed");
+            sendMessage = "view.account.notexist"; 
+         }
+         response.setRenderParameter(SEND_PASSWORD, sendMessage);
+      } 
+      else {
          // Unknown
          log.error(String.format("Unknown action '%s'", action));
       }
@@ -67,16 +137,27 @@
       
       String template;
       String error = request.getParameter("errormessage");
+      String send_password = request.getParameter(SEND_PASSWORD);
       if (StringUtils.isNotBlank(error)) {
          request.setAttribute("errormessage", error);
       }
-
       if (Community.isAuthenticated()) {
          template = "login/logout.jsp";
       } else {
          template = "login/login.jsp";
       }
-
+      if (StringUtils.isNotBlank(send_password)) {
+         setAttribute(request, "sendMessage", send_password);
+         template = "login/send_password.jsp";
+      }
       doInclude("view", template, request, response);
    }
+   protected String getEmailBody(String emailText,ActionRequest request,
+         Authentication authentication, Person person) {
+      super.DEFAULT_EMAIL_CONFIRM_TEMPLATE_DIR = EMAIL_TEMPLATE_DIR;
+      return String.format(emailText == 
null?getConfirmationTemplate():emailText, authentication
+            .getUserId(), authentication.getPassword(), person.getFirstName(),
+            person.getInfix(), person.getLastName());
+   }
+
 }


Index: RegisterPorlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-login/src/java/com/finalist/cmsc/portlets/RegisterPorlet.java,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -u -b -r1.1.2.10 -r1.1.2.11
--- RegisterPorlet.java 2 Dec 2008 07:19:15 -0000       1.1.2.10
+++ RegisterPorlet.java 4 Dec 2008 09:41:28 -0000       1.1.2.11
@@ -1,9 +1,6 @@
 package com.finalist.cmsc.portlets;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.Date;
 
 import javax.mail.MessagingException;
@@ -14,22 +11,12 @@
 import javax.portlet.PortletPreferences;
 import javax.portlet.RenderRequest;
 import javax.portlet.RenderResponse;
-import javax.servlet.http.HttpServletRequest;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.Relation;
-import org.mmbase.bridge.util.SearchUtil;
 
 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,10 +24,8 @@
 import com.finalist.cmsc.services.community.person.RegisterStatus;
 import com.finalist.cmsc.services.community.security.Authentication;
 import com.finalist.cmsc.services.community.security.AuthenticationService;
-import com.finalist.cmsc.services.publish.Publish;
-import com.finalist.cmsc.util.HttpUtil;
 
-public class RegisterPorlet extends CmscPortlet {
+public class RegisterPorlet extends AbstractLoginPortlet {
 
    private static final String ACEGI_SECURITY_FORM_EMAIL_KEY = "email";
    private static final String ACEGI_SECURITY_FORM_FIRSTNAME_KEY = "firstName";
@@ -48,25 +33,9 @@
    private static final String ACEGI_SECURITY_FORM_LASTNAME_KEY = "lastName";
    private static final String ACEGI_SECURITY_FORM_PASSWORD_KEY = 
"passwordText";
    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 {
@@ -175,113 +144,5 @@
       doInclude("view", template, request, response);
    }
 
-   @Override
-   public void processEditDefaults(ActionRequest request,
-         ActionResponse response) throws PortletException, IOException {
-      PortletPreferences preferences = request.getPreferences();
-      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(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;
-      try {
-         while ((strLine = reader.readLine()) != null) {
-            sb.append(strLine + "\n");
-         }
-      } catch (IOException e) {
-         log.error("error happen when reading email template", e);
-      }
-      return sb.toString();
-   }
-
-   protected Cloud getCloudForAnonymousUpdate(boolean isRemote) {
-      Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
-      if (isRemote) {
-         return Publish.getRemoteCloud(cloud);
-      }
-      return cloud;
-   }
-
-   protected String getConfirmationLink(Cloud cloud,String pageId) {
-      String link = null;
-      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");
-      }
-      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;
-            }
-         }
-      }
-      return link;
-   }
-
-   protected boolean isEmailAddress(String emailAddress) {
-      if (emailAddress == null) {
-         return false;
-      }
-      if (StringUtils.isBlank(emailAddress)) {
-         return false;
-      }
 
-      String emailRegex = getEmailRegex();
-      return emailAddress.trim().matches(emailRegex);
-   }
-
-   protected String getEmailRegex() {
-      String emailRegex = PropertiesUtil.getProperty("email.regex");
-      if (StringUtils.isNotBlank(emailRegex)) {
-         return emailRegex;
-      }
-      return DEFAULT_EMAILREGEX;
-   }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to