svnno****@sourc*****
svnno****@sourc*****
2007年 10月 26日 (金) 06:52:50 JST
Revision: 659 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=659 Author: shinsuke Date: 2007-10-26 06:52:50 +0900 (Fri, 26 Oct 2007) Log Message: ----------- added change password portlet. Modified Paths: -------------- pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java pal-admin/trunk/src/main/resources/PAMessages.properties pal-admin/trunk/src/main/resources/appMessages.properties pal-admin/trunk/src/main/webapp/WEB-INF/portlet.xml Added Paths: ----------- pal-admin/trunk/src/main/java/jp/sf/pal/admin/filter/PasswordManagementFilter.java pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword.properties pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword_ja.properties pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/label.properties pal-admin/trunk/src/main/webapp/view/password/ pal-admin/trunk/src/main/webapp/view/password/passwordEdit.html -------------- next part -------------- Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java =================================================================== --- pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/PALAdminConstants.java 2007-10-25 21:52:50 UTC (rev 659) @@ -186,4 +186,6 @@ public static final String REMOVE_USER_FOLDER = PREFIX + "withdraw.RemoveUserFolder"; + public static final String USER_ADMINISTRATION = "PAL User Administration"; + } Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/filter/PasswordManagementFilter.java =================================================================== --- pal-admin/trunk/src/main/java/jp/sf/pal/admin/filter/PasswordManagementFilter.java 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/filter/PasswordManagementFilter.java 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,91 @@ +/* + * Copyright 2005-2007 Portal Application Laboratory and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package jp.sf.pal.admin.filter; + +import java.io.IOException; + +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; +import javax.portlet.PortletConfig; +import javax.portlet.PortletContext; +import javax.portlet.PortletException; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import jp.sf.pal.admin.PALAdminConstants; + +import org.apache.jetspeed.CommonPortletServices; +import org.apache.jetspeed.audit.AuditActivity; +import org.apache.jetspeed.security.UserManager; +import org.apache.portals.bridges.portletfilter.PortletFilter; +import org.apache.portals.bridges.portletfilter.PortletFilterChain; +import org.apache.portals.bridges.portletfilter.PortletFilterConfig; + +public class PasswordManagementFilter implements PortletFilter { + private UserManager userManager; + + private AuditActivity auditActivity; + + public void destroy() { + userManager = null; + auditActivity = null; + } + + public void init(PortletFilterConfig filterConfig) throws PortletException { + PortletConfig portletConfig = filterConfig.getPortletConfig(); + PortletContext portletContext = portletConfig.getPortletContext(); + + // userManager + userManager = (UserManager) portletContext + .getAttribute(CommonPortletServices.CPS_USER_MANAGER_COMPONENT); + if (null == userManager) { + throw new PortletException( + "Failed to find userManager on portlet initialization"); + } + + // auditActivity + auditActivity = (AuditActivity) portletContext + .getAttribute(CommonPortletServices.CPS_AUDIT_ACTIVITY); + if (null == auditActivity) { + throw new PortletException( + "Failed to find auditActivity on portlet initialization"); + } + + } + + public void processActionFilter(ActionRequest request, + ActionResponse response, PortletFilterChain chain) + throws PortletException, IOException { + request.setAttribute(PALAdminConstants.USER_MANAGER_COMPONENT, + userManager); + request.setAttribute(PALAdminConstants.AUDIT_ACTIVITY_COMPONENT, + auditActivity); + + chain.processActionFilter(request, response); + } + + public void renderFilter(RenderRequest request, RenderResponse response, + PortletFilterChain chain) throws PortletException, IOException { + request.setAttribute(PALAdminConstants.USER_MANAGER_COMPONENT, + userManager); + request.setAttribute(PALAdminConstants.AUDIT_ACTIVITY_COMPONENT, + auditActivity); + + chain.renderFilter(request, response); + + } + +} Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/filter/PasswordManagementFilter.java ___________________________________________________________________ Name: svn:eol-style + native Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java =================================================================== --- pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,79 @@ +package jp.sf.pal.admin.service; + +import java.io.Serializable; +import java.security.Principal; + +import javax.faces.context.FacesContext; +import javax.security.auth.Subject; + +import jp.sf.pal.admin.PALAdminConstants; +import jp.sf.pal.admin.util.PortalComponentUtil; +import jp.sf.pal.common.CommonException; + +import org.apache.jetspeed.PortalReservedParameters; +import org.apache.jetspeed.audit.AuditActivity; +import org.apache.jetspeed.request.RequestContext; +import org.apache.jetspeed.security.InvalidNewPasswordException; +import org.apache.jetspeed.security.InvalidPasswordException; +import org.apache.jetspeed.security.PasswordAlreadyUsedException; +import org.apache.jetspeed.security.SecurityException; +import org.apache.jetspeed.security.UserManager; + +public class PasswordManagementService implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 7648155261356882471L; + + public void updatePassword(String currentPassword, String newPassword) + throws CommonException { + Principal principal = FacesContext.getCurrentInstance() + .getExternalContext().getUserPrincipal(); + if (principal == null) { + throw new CommonException("could.not.change.password", + "User principal is null."); + } + + UserManager userManager = PortalComponentUtil.getUserManager(); + if (userManager == null) { + throw new CommonException("could.not.change.password", + "userManager is null."); + } + AuditActivity auditActivity = PortalComponentUtil.getAuditActivity(); + if (auditActivity == null) { + throw new CommonException("could.not.change.password", + "auditActivity is null."); + } + + try { + String username = principal.getName(); + RequestContext requestContext = (RequestContext) FacesContext + .getCurrentInstance().getExternalContext().getRequestMap() + .get(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE); + + userManager.setPassword(username, currentPassword, newPassword); + auditActivity.logUserActivity(username, requestContext.getRequest() + .getRemoteAddr(), AuditActivity.PASSWORD_CHANGE_SUCCESS, + PALAdminConstants.USER_ADMINISTRATION); + + // refresh/update Subject in session to reflect the changed PasswordCredential + Subject subject = userManager.getUser(username).getSubject(); + + requestContext.setSessionAttribute( + PortalReservedParameters.SESSION_KEY_SUBJECT, subject); + } catch (InvalidPasswordException ipe) { + throw new CommonException("invalid.current.password", "Invalid password. "); + } catch (InvalidNewPasswordException inpe) { + throw new CommonException("invalid.new.password", + "Invalid new password. "); + } catch (PasswordAlreadyUsedException paue) { + throw new CommonException("password.already.used", + "The password already used. "); + } catch (SecurityException e) { + throw new CommonException("could.not.change.password", + "Security exception. "); + } + + } +} Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/PasswordManagementService.java ___________________________________________________________________ Name: svn:eol-style + native Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java =================================================================== --- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,121 @@ +package jp.sf.pal.admin.web.password; + +import java.io.Serializable; + +import jp.sf.pal.admin.PALAdminException; +import jp.sf.pal.admin.service.PasswordManagementService; +import jp.sf.pal.common.CommonException; +import jp.sf.pal.common.util.FacesMessageUtil; + +import org.seasar.framework.log.Logger; +import org.seasar.teeda.extension.annotation.validator.Equal; +import org.seasar.teeda.extension.annotation.validator.Required; +import org.seasar.teeda.extension.util.LabelHelper; + +public class PasswordEditPage implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 8299805833656409820L; + + /** + * Logger for this class + */ + private static final Logger logger = Logger + .getLogger(PasswordEditPage.class); + + @Required + private String currentPassword; + + @Required + private String newPassword; + + @Required + @Equal(targetId = "newPassword") + private String retypePassword; + + private PasswordManagementService passwordManagementService; + + private LabelHelper labelHelper; + + public Class<?> initialize() { + return null; + } + + public Class<?> prerender() { + // render faces messages + FacesMessageUtil.renderMessages(); + return null; + } + + public Class<?> doFinish() { + try { + getPasswordManagementService().updatePassword(currentPassword, + newPassword); + FacesMessageUtil.addInfoMessage("changed.password"); + } catch (CommonException e) { + logger.error("EPA0046", e); + FacesMessageUtil.addErrorMessage(e.getMessageId()); + } + return null; + } + + public String getDoFinishValue() { + return getLabelHelper().getLabelValue("changePassword"); + } + + public String getCurrentPassword() { + return currentPassword; + } + + public void setCurrentPassword(String currentPassword) { + this.currentPassword = currentPassword; + } + + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } + + public String getRetypePassword() { + return retypePassword; + } + + public void setRetypePassword(String retypePassword) { + this.retypePassword = retypePassword; + } + + /** + * @return the passwordManagementService + */ + public PasswordManagementService getPasswordManagementService() { + return passwordManagementService; + } + + /** + * @param passwordManagementService the passwordManagementService to set + */ + public void setPasswordManagementService( + PasswordManagementService passwordManagementService) { + this.passwordManagementService = passwordManagementService; + } + + /** + * @return the labelHelper + */ + public LabelHelper getLabelHelper() { + return labelHelper; + } + + /** + * @param labelHelper the labelHelper to set + */ + public void setLabelHelper(LabelHelper labelHelper) { + this.labelHelper = labelHelper; + } + +} Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/password/PasswordEditPage.java ___________________________________________________________________ Name: svn:eol-style + native Modified: pal-admin/trunk/src/main/resources/PAMessages.properties =================================================================== --- pal-admin/trunk/src/main/resources/PAMessages.properties 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/resources/PAMessages.properties 2007-10-25 21:52:50 UTC (rev 659) @@ -44,3 +44,4 @@ EPA0043=Could not add a permission for page. EPA0044=Could not update a permission for page. EPA0045=Could not delete a permission for folder. +EPA0046=Could not change the password. Modified: pal-admin/trunk/src/main/resources/appMessages.properties =================================================================== --- pal-admin/trunk/src/main/resources/appMessages.properties 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/resources/appMessages.properties 2007-10-25 21:52:50 UTC (rev 659) @@ -236,3 +236,9 @@ added.page.permission=Added a page permission. updated.page.permission=Updated the page permission. deleted.page.permission=Removed the page permission. + +could.not.change.password=Could not change a password. If you see this error message again, please contact a site administrator. +changed.password=Changed password. +invalid.current.password=Invalid password. Please check a current password. +invalid.new.password=Invalid new password. Please check a new password. +password.already.used=The password is already used. Added: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword.properties =================================================================== --- pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword.properties 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword.properties 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,5 @@ +# portlet info +javax.portlet.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4 +javax.portlet.short-title=\u30d1\u30b9\u30ef\u30fc\u30c9 +javax.portlet.keywords=\u30d1\u30b9\u30ef\u30fc\u30c9 + Property changes on: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword.properties ___________________________________________________________________ Name: svn:eol-style + native Added: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword_ja.properties =================================================================== --- pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword_ja.properties 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword_ja.properties 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,5 @@ +# portlet info +javax.portlet.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4 +javax.portlet.short-title=\u30d1\u30b9\u30ef\u30fc\u30c9 +javax.portlet.keywords=\u30d1\u30b9\u30ef\u30fc\u30c9 + Property changes on: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/ChangePassword_ja.properties ___________________________________________________________________ Name: svn:eol-style + native Added: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/label.properties =================================================================== --- pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/label.properties 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/label.properties 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,7 @@ +currentPasswordField=Current Password: +newPasswordField=New Password: +retypePasswordField=Re-type Password: +currentPassword=Current Password +newPassword=New Password +retypePassword=Re-type Password +changePassword=Change Password Property changes on: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/password/label.properties ___________________________________________________________________ Name: svn:eol-style + native Modified: pal-admin/trunk/src/main/webapp/WEB-INF/portlet.xml =================================================================== --- pal-admin/trunk/src/main/webapp/WEB-INF/portlet.xml 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/webapp/WEB-INF/portlet.xml 2007-10-25 21:52:50 UTC (rev 659) @@ -546,7 +546,7 @@ <description>Provides features for managing permissions.</description> <description xml:lang="ja">パーミッションを管理する機能を提供します。</description> <portlet-name>PermissionEditor</portlet-name> - <display-name>PermissionEditor</display-name> + <display-name>Permission Editor</display-name> <display-name xml:lang="ja">パーミッションエディター</display-name> <portlet-class>org.apache.portals.bridges.portletfilter.FilterPortlet</portlet-class> <init-param> @@ -575,4 +575,37 @@ <keywords>Permission</keywords> </portlet-info> </portlet> + <portlet> + <description>Provides features for changing user's password.</description> + <description xml:lang="ja">ユーザーパスワードを変更する機能を提供します。</description> + <portlet-name>ChangePassword</portlet-name> + <display-name>Change Password</display-name> + <display-name xml:lang="ja">パスワード変更</display-name> + <portlet-class>org.apache.portals.bridges.portletfilter.FilterPortlet</portlet-class> + <init-param> + <name>portlet-class</name> + <value>org.seasar.teeda.core.portlet.FacesPortlet</value> + </init-param> + <init-param> + <name>portlet-filters</name> + <value>jp.sf.pal.admin.filter.PasswordManagementFilter,jp.sf.pal.facesresponse.FacesResponseFilter,jp.sf.pal.pooptimizer.OptimizerFilter,org.seasar.portlet.filter.S2PortletFilter,org.seasar.portlet.filter.HotdeployPortletFilter</value> + </init-param> + <init-param> + <name>view-page</name> + <value>/view/password/passwordEdit.html</value> + </init-param> + <expiration-cache>0</expiration-cache> + <supports> + <mime-type>text/html</mime-type> + <portlet-mode>VIEW</portlet-mode> + </supports> + <supported-locale>en</supported-locale> + <supported-locale>ja</supported-locale> + <resource-bundle>jp.sf.pal.admin.web.password.ChangePassword</resource-bundle> + <portlet-info> + <title>Change Password</title> + <short-title>Password</short-title> + <keywords>Password</keywords> + </portlet-info> + </portlet> </portlet-app> Added: pal-admin/trunk/src/main/webapp/view/password/passwordEdit.html =================================================================== --- pal-admin/trunk/src/main/webapp/view/password/passwordEdit.html 2007-10-25 21:52:15 UTC (rev 658) +++ pal-admin/trunk/src/main/webapp/view/password/passwordEdit.html 2007-10-25 21:52:50 UTC (rev 659) @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <link rel="stylesheet" type="text/css" href="../../css/global.css" /> + </head> + <body> + <form id="passwordEditForm"> + <div> + <span id="allMessages" te:fatalClass="portlet-msg-error" te:errorClass="portlet-msg-error" te:warnClass="portlet-msg-alert" te:infoClass="portlet-msg-info"></span> + </div> +<!-- content: BEGIN --> + <div style="padding: 3px;"> + <table border="0"> + <tr> + <th> + <label id="currentPasswordFieldLabel">Current Password:</label> + </th> + <td> + <input type="password" id="currentPassword" size="20" /> + </td> + </tr> + <tr> + <th> + <label id="newPasswordFieldLabel">New Password:</label> + </th> + <td> + <input type="password" id="newPassword" size="20" /> + </td> + </tr> + <tr> + <th> + <label id="retypePasswordFieldLabel">Re-type Password:</label> + </th> + <td> + <input type="password" id="retypePassword" size="20" /> + </td> + </tr> + <tr> + <td align="center" colspan="2"> + <input type="submit" id="doFinish" value="Change Password"/> + </td> + </tr> + </table> + </div> +<!-- content: BEGIN --> + </form> + </body> +</html> Property changes on: pal-admin/trunk/src/main/webapp/view/password/passwordEdit.html ___________________________________________________________________ Name: svn:eol-style + native