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