You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ca...@apache.org on 2006/09/05 20:50:58 UTC

svn commit: r440434 - in /maven/shared/trunk/maven-user: maven-user-controller/src/main/java/org/apache/maven/user/controller/action/ maven-user-model/src/main/java/org/apache/maven/user/model/impl/ maven-user-model/src/main/java/org/apache/maven/user/...

Author: carlos
Date: Tue Sep  5 11:50:57 2006
New Revision: 440434

URL: http://svn.apache.org/viewvc?view=rev&rev=440434
Log:
Add password rule handling

Modified:
    maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java
    maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserSecurityPolicy.java
    maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/rules/NumericalPasswordRule.java
    maven/shared/trunk/maven-user/maven-user-model/src/main/resources/org/apache/maven/user/model/messages.properties
    maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java
    maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp

Modified: maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java (original)
+++ maven/shared/trunk/maven-user/maven-user-controller/src/main/java/org/apache/maven/user/controller/action/EditUserAction.java Tue Sep  5 11:50:57 2006
@@ -21,6 +21,8 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.maven.user.model.PasswordRuleViolationException;
+import org.apache.maven.user.model.PasswordRuleViolations;
 import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
@@ -36,6 +38,7 @@
  * @plexus.component
  *   role="com.opensymphony.xwork.Action"
  *   role-hint="editUser"
+ *   instantiation-strategy="per-lookup"
  */
 public class EditUserAction
     extends PlexusActionSupport
@@ -102,7 +105,19 @@
             user.setPassword( password );
             user.setEmail( email );
             user.setGroup( userGroup );
-            userManager.addUser( user );
+            try
+            {
+            	userManager.addUser( user );
+            }
+            catch ( PasswordRuleViolationException e )
+            {
+            	PasswordRuleViolations violationsContainer = e.getViolations();
+            	if( violationsContainer != null && violationsContainer.hasViolations() )
+            	{
+            		setActionErrors( violationsContainer.getLocalizedViolations() );
+            		return INPUT;
+            	}
+            }
         }
         else
         {
@@ -111,7 +126,19 @@
             user.setPassword( password );
             user.setEmail( email );
             user.getGroup().setPermissions( permissions );
-            userManager.updateUser( user );
+            try
+            {
+                userManager.updateUser( user );
+            }
+            catch ( PasswordRuleViolationException e )
+            {
+            	PasswordRuleViolations violationsContainer = e.getViolations();
+            	if( violationsContainer != null && violationsContainer.hasViolations() )
+            	{
+            		setActionErrors( violationsContainer.getLocalizedViolations() );
+            		return INPUT;
+            	}
+            }
         }
 
         request.getSession().removeAttribute( "addMode" );

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserSecurityPolicy.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserSecurityPolicy.java?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserSecurityPolicy.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/impl/DefaultUserSecurityPolicy.java Tue Sep  5 11:50:57 2006
@@ -55,6 +55,8 @@
 
     /**
      * The List of {@link PasswordRule} objects.
+     * 
+     * @plexus.requirement role="org.apache.maven.user.model.rules.MustHavePasswordRule"
      */
     private List rules;
 
@@ -149,9 +151,18 @@
     public void initialize()
         throws InitializationException
     {
-        rules = new ArrayList();
-
-        // TODO: Find way to have plexus initialize this list with only 1 item.
-        addPasswordRule( new MustHavePasswordRule() );
+    	if( rules != null )
+        {
+            Iterator it = rules.iterator();
+            while ( it.hasNext() )
+            {
+                PasswordRule rule = (PasswordRule) it.next();
+                rule.setUserSecurityPolicy( this );
+            }
+        }
+    	else{
+        	rules = new ArrayList();
+        	addPasswordRule( new MustHavePasswordRule() );
+    	}
     }
 }

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/rules/NumericalPasswordRule.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/rules/NumericalPasswordRule.java?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/rules/NumericalPasswordRule.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/java/org/apache/maven/user/model/rules/NumericalPasswordRule.java Tue Sep  5 11:50:57 2006
@@ -95,7 +95,7 @@
     {
         if ( countDigitCharacters( user.getPassword() ) < this.minimumCount )
         {
-            violations.addViolation( "user.password.violation.digit", new Object[] { new Integer( minimumCount ) } ); //$NON-NLS-1$
+            violations.addViolation( "user.password.violation.numeric", new Object[] { new Integer( minimumCount ) } ); //$NON-NLS-1$
         }
     }
 }

Modified: maven/shared/trunk/maven-user/maven-user-model/src/main/resources/org/apache/maven/user/model/messages.properties
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/main/resources/org/apache/maven/user/model/messages.properties?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/main/resources/org/apache/maven/user/model/messages.properties (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/main/resources/org/apache/maven/user/model/messages.properties Tue Sep  5 11:50:57 2006
@@ -2,11 +2,11 @@
 user.manager.cannot.add.user.without.password=User.password must be supplied on an .addUser() request.
 user.manager.cannot.add.group.with.id=UserGroup.id cannot be supplied on an .addUserGroup() request.
 user.manager.cannot.add.permission.with.id=Permission.id cannot be supplied on an .addPermission() request.
-password.encoder.no.such.algoritm=The specified algorithm {1} is not available in the JAAS Implementation of this JVM.
+password.encoder.no.such.algoritm=The specified algorithm {0} is not available in the JAAS Implementation of this JVM.
 password.encoder.unsupported.encoding=The UTF-8 Encoding is not available in the JAAS Implementation of this JVM.
 user.password.violation.missing=You must provide a password.
-user.password.violation.length=You must provide a password between {1} and {2} characters in length.
-user.password.violation.length.misconfigured=Password Length Rule is misconfigured.  Specified minimum of ({1}) is larger than specified maximum of ({2}).  Rule disabled.
-user.password.violation.alpha=You must provide a password containing at least {1} alphabetic character(s).
-user.password.violation.numeric=You must provide a password containing at least {1} numeric character(s).
-user.password.violation.reuse=Your password cannot match any of your previous {1} password(s).
+user.password.violation.length=You must provide a password between {0} and {1} characters in length.
+user.password.violation.length.misconfigured=Password Length Rule is misconfigured.  Specified minimum of ({0}) is larger than specified maximum of ({1}).  Rule disabled.
+user.password.violation.alpha=You must provide a password containing at least {0} alphabetic character(s).
+user.password.violation.numeric=You must provide a password containing at least {0} numeric character(s).
+user.password.violation.reuse=Your password cannot match any of your previous {0} password(s).

Modified: maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java (original)
+++ maven/shared/trunk/maven-user/maven-user-model/src/test/java/org/apache/maven/user/model/impl/DefaultUserManagerTest.java Tue Sep  5 11:50:57 2006
@@ -25,7 +25,9 @@
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
 
+import org.apache.maven.user.model.PasswordRule;
 import org.apache.maven.user.model.PasswordRuleViolationException;
+import org.apache.maven.user.model.PasswordRuleViolations;
 import org.apache.maven.user.model.Permission;
 import org.apache.maven.user.model.User;
 import org.apache.maven.user.model.UserGroup;
@@ -491,7 +493,7 @@
 
         AlphaPasswordRule alphaRule = new AlphaPasswordRule();
         alphaRule.setMinimumCount( 3 );
-        getUserManager().getSecurityPolicy().addPasswordRule( alphaRule );
+        setSinglePasswordRule( alphaRule );
         try
         {
             User validPwd = new User();
@@ -528,8 +530,7 @@
         CharacterLengthPasswordRule charLengthRule = new CharacterLengthPasswordRule();
         charLengthRule.setMinimumCharacters( 3 );
         charLengthRule.setMaximumCharacters( 9 );
-        getUserManager().getSecurityPolicy().getPasswordRules().clear();
-        getUserManager().getSecurityPolicy().addPasswordRule( charLengthRule );
+        setSinglePasswordRule( charLengthRule );
         try
         {
             User minLengthPwd = new User();
@@ -588,8 +589,7 @@
     {
         assertCleanUserManager();
 
-        MustHavePasswordRule mustHaveRule = new MustHavePasswordRule();
-        getUserManager().getSecurityPolicy().addPasswordRule( mustHaveRule );
+        setSinglePasswordRule( new MustHavePasswordRule() );
         try
         {
             User nonEmptyPwd = new User();
@@ -637,7 +637,7 @@
         
         NumericalPasswordRule numRule = new NumericalPasswordRule();
         numRule.setMinimumCount( 3 );
-        getUserManager().getSecurityPolicy().addPasswordRule( numRule );
+        setSinglePasswordRule( numRule );
         try
         {
             User validPwd = new User();
@@ -672,9 +672,8 @@
     {
         assertCleanUserManager();
         
-        ReusePasswordRule reuseRule = new ReusePasswordRule();
-        getUserManager().getSecurityPolicy().addPasswordRule( reuseRule );
-        
+        setSinglePasswordRule( new ReusePasswordRule() );
+        getUserManager().getSecurityPolicy().setPreviousPasswordsCount( 3 );
         try
         {
             User user = new User();
@@ -711,7 +710,7 @@
         getUserManager().removeUser( "user" );
         assertEquals( 0, getUserManager().getUsers().size() );
     }
-        
+
     private void assertCleanUserManager()
     {
         assertNotNull( getUserManager() );
@@ -719,5 +718,11 @@
         assertEquals( "New UserManager should contain no users.", 0, getUserManager().getUsers().size() );
         assertEquals( "New UserManager should contain no groups.", 0, getUserManager().getUserGroups().size() );
         assertNotNull( "New UserManager should have a Security Policy", getUserManager().getSecurityPolicy() );
+    }
+    
+    private void setSinglePasswordRule( PasswordRule rule )
+    {
+        getUserManager().getSecurityPolicy().getPasswordRules().clear();
+        getUserManager().getSecurityPolicy().addPasswordRule( rule );
     }
 }

Modified: maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp?view=diff&rev=440434&r1=440433&r2=440434
==============================================================================
--- maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp (original)
+++ maven/shared/trunk/maven-user/maven-user-webapp/src/main/webapp/user/edit.jsp Tue Sep  5 11:50:57 2006
@@ -1,3 +1,4 @@
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
 <%@ taglib uri="/webwork" prefix="ww" %>
 <%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>
 <script>
@@ -41,6 +42,13 @@
         </ww:else>
         <div class="axial">
           <ww:form action="edit.action" method="post">
+            <c:if test="${!empty actionErrors}">
+              <div class="errormessage">
+              <c:forEach items="${actionErrors}" var="actionError">
+                <p>${actionError}</p>
+              </c:forEach>
+              </div>
+            </c:if>
             <table>
               <tbody>
                 <ww:hidden id="addMode_field" name="addMode"/>