Author: ate
Date: Thu Sep 22 14:31:19 2005
New Revision: 291018

URL: http://svn.apache.org/viewcvs?rev=291018&view=rev
Log:
Implementation of http://issues.apache.org/jira/browse/JS2-371:
  Provide password expiration management and defaults for "Change password on 
first login" from the admin UserDetailsPortlet
Online documentation for using this will be provided shortly.

Modified:
    
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
    
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
    
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
    
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/portlet.xml
    
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details-edit.jsp
    
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp
    
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/AuthenticationProviderProxy.java
    
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/AuthenticationProviderProxyImpl.java
    
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/UserManagerImpl.java
    
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/CredentialHandler.java
    
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java
    
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/UserManager.java
    
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/om/InternalCredential.java

Modified: 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
 (original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources.properties
 Thu Sep 22 14:31:19 2005
@@ -33,6 +33,9 @@
 security.profile.rules=Profile Rules
 security.enabled=enabled
 security.expired=expired
+security.active=active
+security.Extend=Extend
+security.Extend.Unlimited=Extend Unlimited
 security.credential.value=Value
 security.credential.update.required=change required at next logon
 security.credential.last.logon=Last Logon
@@ -58,8 +61,11 @@
 user.details.preference.showGroupTab=Show Group Tab
 user.details.preference.showProfileTab=Show Profile Tab
 user.details.preference.showPasswordOnUserTab=Show Password on User Tab
+user.details.preference.showPasswordExpiration=Show Password Expiration
+user.details.preference.showChangePasswordRequiredForAddUser=Define default 
\"Change Password Required on First Login\" for new User
 user.details.preference.showRoleForAddUser=Define default Role for new User
 user.details.preference.showProfileForAddUser=Define default Profile for new 
User
+user.details.preference.defaultChangePasswordRequired=Default \"Change 
Password Required on First Login\"
 user.details.preference.defaultRole=Default Role for new User
 user.details.preference.defaultProfile=Default Profile for new User
 user.details.save.preferences=Save

Modified: 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
 (original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/resources/SecurityResources_en.properties
 Thu Sep 22 14:31:19 2005
@@ -29,6 +29,9 @@
 security.profile.rules=Profile Rules
 security.enabled=enabled
 security.expired=expired
+security.active=active
+security.Extend=Extend
+security.Extend.Unlimited=Extend Unlimited
 security.credential.value=Value
 security.credential.update.required=change required at next logon
 security.credential.last.logon=Last Logon
@@ -60,8 +63,11 @@
 user.details.preference.showGroupTab=Show Group Tab
 user.details.preference.showProfileTab=Show Profile Tab
 user.details.preference.showPasswordOnUserTab=Show Password on User Tab
+user.details.preference.showPasswordExpiration=Show Password Expiration
+user.details.preference.showChangePasswordRequiredForAddUser=Define default 
\"Change Password Required on First Login\" for new User
 user.details.preference.showRoleForAddUser=Define default Role for new User
 user.details.preference.showProfileForAddUser=Define default Profile for new 
User
+user.details.preference.defaultChangePasswordRequired=Default \"Change 
Password Required on First Login\"
 user.details.preference.defaultRole=Default Role for new User
 user.details.preference.defaultProfile=Default Profile for new User
 user.details.save.preferences=Save

Modified: 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
 (original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/java/org/apache/jetspeed/portlets/security/users/UserDetailsPortlet.java
 Thu Sep 22 14:31:19 2005
@@ -19,6 +19,7 @@
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -64,6 +65,7 @@
 import org.apache.jetspeed.security.UserManager;
 import org.apache.jetspeed.security.SecurityException;
 import org.apache.jetspeed.security.UserPrincipal;
+import org.apache.jetspeed.security.om.InternalCredential;
 import org.apache.portals.bridges.beans.TabBean;
 import org.apache.portals.bridges.common.GenericServletPortlet;
 import org.apache.portals.bridges.util.PreferencesHelper;
@@ -85,7 +87,6 @@
     private final String VIEW_RULES = "rules";
     private final String VIEW_CREDENTIAL = "credential"; 
     private final String VIEW_ALL_RULES = "prules";
-    private final String VIEW_SELECTED_RULE = "selectedRule";
     private final String VIEW_PA_USER_ATTRIBUTES = "paUserAttributes";
     
     private final String USER_ACTION_PREFIX = "security_user.";
@@ -567,7 +568,9 @@
                 
                 Folder folder = pageManager.getFolder(Folder.USER_FOLDER + 
userName);
                 pageManager.removeFolder(folder);
-                                
+                            
+                // remove selected user from USERS_TOPIC
+                
PortletMessaging.cancel(actionRequest,SecurityResources.TOPIC_USERS, 
SecurityResources.MESSAGE_SELECTED);
                 // TODO: send message to site manager portlet
                 
             }
@@ -606,11 +609,11 @@
             try
             {
                 String password = 
actionRequest.getParameter("user_cred_value");
-                boolean updated = false;
+                boolean passwordSet = false;
                 if ( password != null && password.trim().length() > 0 )
                 {
                     userManager.setPassword(userName, null, password);
-                    updated = true;
+                    passwordSet = true;
                 }
                 PasswordCredential credential = getCredential(userName);
                 if ( credential != null )
@@ -622,7 +625,6 @@
                         if (updateRequired != credential.isUpdateRequired())
                         {
                             
userManager.setPasswordUpdateRequired(userName,updateRequired);
-                            updated = true;
                         }
                     }
                     String enabledStr = 
actionRequest.getParameter("user_cred_enabled");
@@ -632,7 +634,23 @@
                         if (enabled != credential.isEnabled())
                         {
                             userManager.setPasswordEnabled(userName,enabled);
-                            updated = true;
+                        }
+                    }
+                    String expiredFlagStr = 
actionRequest.getParameter("user_expired_flag");
+                    if (expiredFlagStr != null)
+                    {
+                        if ( !passwordSet && expiredFlagStr.equals("expired"))
+                        {
+                            java.sql.Date today = new java.sql.Date(new 
Date().getTime());
+                            userManager.setPasswordExpiration(userName,today);
+                        }
+                        else if (expiredFlagStr.equals("extend"))
+                        {
+                            userManager.setPasswordExpiration(userName,null);
+                        }
+                        else if (expiredFlagStr.equals("unlimited"))
+                        {
+                            
userManager.setPasswordExpiration(userName,InternalCredential.MAX_DATE);
                         }
                     }
                 }
@@ -723,7 +741,6 @@
     {
         String userName = (String)PortletMessaging.receive(actionRequest, 
                 SecurityResources.TOPIC_USERS, 
SecurityResources.MESSAGE_SELECTED);        
-        List deletes = new LinkedList();
         
         User user = lookupUser(userName);
         if (user != null)
@@ -893,10 +910,11 @@
         return new LinkedList();
     }
     
-    private PasswordCredential getCredential(String userName)
+    private PasswordCredential getCredential(User user)
     {
         PasswordCredential credential = null;
-        Set credentials = 
lookupUser(userName).getSubject().getPrivateCredentials();
+        
+        Set credentials = user.getSubject().getPrivateCredentials();
         Iterator iter = credentials.iterator();
         while (iter.hasNext())
         {
@@ -909,6 +927,10 @@
         }
         return credential;
     }
+    private PasswordCredential getCredential(String userName)
+    {
+        return getCredential(lookupUser(userName));
+    }
     
     private User lookupUser(String userName)
     {
@@ -1016,6 +1038,21 @@
                 PortletMessaging.publish(actionRequest, 
SecurityResources.TOPIC_USERS, SecurityResources.MESSAGE_SELECTED, userName);
                                 
                 User user = userManager.getUser(userName);
+                
+                PasswordCredential credential = getCredential(user);
+                if ( credential != null )
+                {
+                    String updateRequiredStr = 
actionRequest.getParameter("user_cred_updreq");
+                    if (updateRequiredStr != null)
+                    {
+                        boolean updateRequired = 
Boolean.valueOf(updateRequiredStr).booleanValue();
+                        if (updateRequired != credential.isUpdateRequired())
+                        {
+                            
userManager.setPasswordUpdateRequired(userName,updateRequired);
+                        }
+                    }                    
+                }
+
                 String role = actionRequest.getParameter(ROLES_CONTROL);
                 if (!SecurityUtil.isEmpty(role) && user != null) 
                 {

Modified: 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/portlet.xml
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/portlet.xml?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/portlet.xml 
(original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/portlet.xml 
Thu Sep 22 14:31:19 2005
@@ -201,6 +201,14 @@
         <value>false</value>
       </preference>
       <preference>
+        <name>showPasswordExpiration</name>
+        <value>false</value>
+      </preference>
+      <preference>
+        <name>showChangePasswordRequiredForAddUser</name>
+        <value>true</value>
+      </preference>      
+      <preference>
         <name>showRoleForAddUser</name>
         <value>true</value>
       </preference>      
@@ -208,6 +216,10 @@
         <name>showProfileForAddUser</name>
         <value>true</value>
       </preference>      
+      <preference>
+        <name>defaultChangePasswordRequired</name>
+        <value>false</value>
+      </preference>
       <preference>
         <name>defaultRole</name>
         <value>user</value>

Modified: 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details-edit.jsp
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details-edit.jsp?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details-edit.jsp
 (original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details-edit.jsp
 Thu Sep 22 14:31:19 2005
@@ -35,13 +35,13 @@
 <form action="<portlet:actionURL/>" method="post">
 <c:set var="prefs" value="${renderRequest.preferences.map}"/>
 <table border="0" cellspacing="2" cellpadding="3">
-  <c:forEach var="prefName" 
items="showUserTab,showAttributesTab,showPasswordTab,showRoleTab,showGroupTab,showProfileTab,showPasswordOnUserTab,showRoleForAddUser,showProfileForAddUser">
+  <c:forEach var="prefName" 
items="showUserTab,showAttributesTab,showPasswordTab,showPasswordExpiration,showRoleTab,showGroupTab,showProfileTab,showPasswordOnUserTab,showChangePasswordRequiredForAddUser,showRoleForAddUser,showProfileForAddUser,defaultChangePasswordRequired">
   <tr>
     <c:set var="prefValue" value='${prefs[prefName][0]}'/>
-    <th class="portlet-section-alternate">
+    <td class="portlet-section-alternate">
       <font class="portlet-form-field-label"><fmt:message 
key="user.details.preference.${prefName}"/></font>
-    </th>
-    <td>
+    </td>
+    <td class="portlet-section-body">
       <input type="hidden" name="<c:out value="${prefName}"/>" value="<c:out 
value="${prefValue}"/>"/>
       <input type="checkbox" <c:if test="${prefValue}">checked</c:if> 
              onclick="t(this,<c:out value="${prefName}"/>)" 
class="portlet-form-field-label" />
@@ -51,10 +51,10 @@
   <tr>
     <c:set var="prefName" value="defaultRole"/>
     <c:set var="prefValue" value='${prefs[prefName][0]}'/>
-    <th class="portlet-section-alternate">
+    <td class="portlet-section-alternate">
       <font class="portlet-form-field-label"><fmt:message 
key="user.details.preference.${prefName}"/></font>
-    </th>
-    <td>
+    </td>
+    <td class="portlet-section-body">
       <select name="<c:out value="${prefName}"/>" 
class="portlet-form-field-label">     
               <option value=""/>                
               <c:forEach var="item" items="${jetspeedRoles}">
@@ -68,10 +68,10 @@
   <tr>
     <c:set var="prefName" value="defaultProfile"/>
     <c:set var="prefValue" value='${prefs[prefName][0]}'/>
-    <th class="portlet-section-alternate">
+    <td class="portlet-section-alternate">
       <font class="portlet-form-field-label"><fmt:message 
key="user.details.preference.${prefName}"/></font>
-    </th>
-    <td>
+    </td>
+    <td class="portlet-section-body">
       <select name="<c:out value="${prefName}"/>" 
class="portlet-form-field-label">     
               <option value=""/>                
               <c:forEach var="item" items="${jetspeedRules}">

Modified: 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp
 (original)
+++ 
portals/jetspeed-2/trunk/applications/security/src/webapp/WEB-INF/security/users/user-details.jsp
 Thu Sep 22 14:31:19 2005
@@ -79,6 +79,7 @@
       <c:set var="canUpdate" value="true"/>
                        <tr>
                                <th class="portlet-section-header" 
colspan="2"><fmt:message key="user.attributes.header"/></th>
+                               <td colspan="2"></td>
                        </tr>
          </c:if>
     <c:forEach var="attr" items="${requestScope.paUserAttributes}">
@@ -96,11 +97,11 @@
 
     <c:if test='${prefs["showPasswordOnUserTab"][0]}'>
       <c:if test="${canUpdate}">
-        <tr><td colspan="5">&nbsp;</td></tr>
+        <tr><td colspan="4">&nbsp;</td></tr>
       </c:if>
       <c:set var="canUpdate" value="true"/>
                        <tr>
-                               <th class="portlet-section-header" 
colspan="5"><fmt:message key="user.password.header"/></th>
+                               <th class="portlet-section-header" 
colspan="4"><fmt:message key="user.password.header"/></th>
                        </tr>
       <tr>
         <td class="portlet-section-alternate" >
@@ -118,8 +119,6 @@
                  <c:if test="${credential.updateRequired}">checked</c:if>
                  onclick="if(this.checked) user_cred_updreq.value='true';else 
user_cred_updreq.value='false';"
            class="portlet-form-field-label" />
-        </td>
-        <td class="portlet-section-body" >
           <fmt:message key="security.credential.update.required"/>
         </td>
       </tr>
@@ -128,7 +127,7 @@
           <fmt:message key="security.credential.last.logon"/>
         </td>
         <td class="portlet-section-body" >
-          <fmt:formatDate value="${credential.lastAuthenticationDate}" 
type="both" dateStyle="short" timeStyle="long"/>
+          <fmt:formatDate value="${credential.lastAuthenticationDate}" 
type="both" dateStyle="long" timeStyle="long"/>
         </td>
         <td>
           &nbsp;
@@ -139,28 +138,49 @@
                  <c:if test="${credential.enabled}">checked</c:if>
                  onclick="if(this.checked) user_cred_enabled.value='true';else 
user_cred_enabled.value='false';"
            class="portlet-form-field-label" />
-        </td>
-        <td class="portlet-section-body" >
           <fmt:message key="security.enabled"/>
         </td>
       </tr>
+      <c:if test='${prefs["showPasswordExpiration"][0]}'>
       <tr>
         <td class="portlet-section-alternate" >
           <fmt:message key="security.credential.expires"/>
         </td>
-        <td class="portlet-section-body" >
-          <fmt:formatDate value="${credential.expirationDate}" type="both" 
dateStyle="short" timeStyle="long"/>
+        <td class="portlet-section-body" nowrap>
+          <fmt:formatDate value="${credential.expirationDate}" type="both" 
dateStyle="long" timeStyle="long"/>
         </td>
         <td>
           &nbsp;
         </td>
-        <td class="portlet-section-body" >
-          <input type="checkbox" disabled <c:if 
test="${credential.expired}">checked</c:if>/>
-        </td>
-        <td class="portlet-section-body" >
-          <fmt:message key="security.expired"/>
-        </td>
+        <td class="portlet-section-body">
+          <table cellpadding="0" cellspacing="0">
+            <tr>
+              <td>
+              <c:if test="${!credential.expired}">
+                <input type="radio" name="user_expired_flag" value="active" 
checked>
+                <fmt:message key="security.active"/>
+                &nbsp;
+              </c:if>
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="expired" 
<c:if test="${credential.expired}">checked</c:if>>
+                <fmt:message key="security.expired"/>
+                &nbsp;
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="extend">
+                <fmt:message key="security.Extend"/>
+                &nbsp;
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="unlimited">
+                <fmt:message key="security.Extend.Unlimited"/>
+              </td>
+            </tr>
+          </table>
+        </td>        
       </tr>
+      </c:if>
     </c:if>            
     </table>
     <c:if test="${canUpdate}">
@@ -275,8 +295,6 @@
                  <c:if test="${credential.updateRequired}">checked</c:if>
                  onclick="if(this.checked) user_cred_updreq.value='true';else 
user_cred_updreq.value='false';"
            class="portlet-form-field-label" />
-        </td>
-        <td class="portlet-section-body" >
           <fmt:message key="security.credential.update.required"/>
         </td>
       </tr>
@@ -285,7 +303,7 @@
           <fmt:message key="security.credential.last.logon"/>
         </td>
         <td class="portlet-section-body" >
-          <fmt:formatDate value="${credential.lastAuthenticationDate}" 
type="both" dateStyle="short" timeStyle="long"/>
+          <fmt:formatDate value="${credential.lastAuthenticationDate}" 
type="both" dateStyle="long" timeStyle="long"/>
         </td>
         <td>
           &nbsp;
@@ -296,28 +314,49 @@
                  <c:if test="${credential.enabled}">checked</c:if>
                  onclick="if(this.checked) user_cred_enabled.value='true';else 
user_cred_enabled.value='false';"
            class="portlet-form-field-label" />
-        </td>
-        <td class="portlet-section-body" >
           <fmt:message key="security.enabled"/>
         </td>
       </tr>
+      <c:if test='${prefs["showPasswordExpiration"][0]}'>      
       <tr>
         <td class="portlet-section-alternate" >
           <fmt:message key="security.credential.expires"/>
         </td>
         <td class="portlet-section-body" >
-          <fmt:formatDate value="${credential.expirationDate}" type="both" 
dateStyle="short" timeStyle="long"/>
+          <fmt:formatDate value="${credential.expirationDate}" type="both" 
dateStyle="long" timeStyle="long"/>
         </td>
         <td>
           &nbsp;
         </td>
         <td class="portlet-section-body" >
-          <input type="checkbox" disabled <c:if 
test="${credential.expired}">checked</c:if>/>
-        </td>
-        <td class="portlet-section-body" >
-          <fmt:message key="security.expired"/>
+          <table cellpadding="0" cellspacing="0">
+            <tr>
+              <td>
+              <c:if test="${!credential.expired}">
+                <input type="radio" name="user_expired_flag" value="active" 
checked>
+                <fmt:message key="security.active"/>
+                &nbsp;
+              </c:if>
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="expired" 
<c:if test="${credential.expired}">checked</c:if>>
+                <fmt:message key="security.expired"/>
+                &nbsp;
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="extend">
+                <fmt:message key="security.Extend"/>
+                &nbsp;
+              </td>
+              <td>
+                <input type="radio" name="user_expired_flag" value="unlimited">
+                <fmt:message key="security.Extend.Unlimited"/>
+              </td>
+            </tr>
+          </table>
         </td>
       </tr>
+      </c:if>
     </table>
     <input type="submit" value="<fmt:message key="security.update"/>" 
class="portlet-form-button" />
   </form>
@@ -544,6 +583,7 @@
 
 <%-- Add New User --%>
 <c:if test="${user == null}">
+<script language="JavaScript">function t(i,f){if(i.checked) 
f.value='true';else f.value='false';}</script>
 
 <h3 class="portlet-section-header">Add User</h3>
 
@@ -576,6 +616,26 @@
   <c:set var="defaultRole" value='${prefs["defaultRole"][0]}'/>
   <c:set var="defaultProfile" value='${prefs["defaultProfile"][0]}'/>
   
+  <c:set var="prefName" value="showChangePasswordRequiredForAddUser"/>
+  <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+  <c:choose>
+    <c:when test='${prefs[prefName][0]}'>
+      <tr colspan="2" align="right">
+        <td nowrap class="portlet-section-alternate" align="right">Change 
Password on first Login:&nbsp;</td>
+        <td class="portlet-section-body" align="left">
+          <c:set var="prefName" value="defaultChangePasswordRequired"/>
+          <c:set var="prefValue" value='${prefs[prefName][0]}'/>
+          <input type="hidden" name="user_cred_updreq" value="<c:out 
value="${prefValue}"/>"/>
+          <input type="checkbox" <c:if test="${prefValue}">checked</c:if> 
+             onclick="t(this,user_cred_updreq)" 
class="portlet-form-field-label" />
+        </td>
+      </tr>
+    </c:when>
+    <c:otherwise>
+      <input type="hidden" name="jetspeedRoles" value="<c:out 
value="${defaultRole}"/>">
+    </c:otherwise>
+  </c:choose>
+
   <c:choose>
     <c:when test='${prefs["showRoleForAddUser"][0]}'>
       <!-- Select Roles -->

Modified: 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/AuthenticationProviderProxy.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/AuthenticationProviderProxy.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/AuthenticationProviderProxy.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/AuthenticationProviderProxy.java
 Thu Sep 22 14:31:19 2005
@@ -14,6 +14,8 @@
  */
 package org.apache.jetspeed.security;
 
+import java.sql.Date;
+
 import org.apache.jetspeed.security.spi.CredentialHandler;
 import org.apache.jetspeed.security.spi.UserSecurityHandler;
 
@@ -114,6 +116,21 @@
      * @throws Throws a security exception.
      */
     void setPasswordEnabled(String userName, boolean enabled, 
+            String authenticationProvider) throws SecurityException;
+
+    /**
+     * <p>
+     * Set the expiration date and the expired flag of the password credential 
in a given authentication provider</p>
+     * <p>
+     * If a date equal or before the current date is provided, the expired 
flag will be set to true,
+     * otherwise to false.</p>
+     * 
+     * @param userName The user name.
+     * @param expirationDate The expiration date to set.
+     * @param authenticationProvider The authentication provider name.
+     * @throws Throws a security exception.
+     */
+    void setPasswordExpiration(String userName, Date expirationDate, 
             String authenticationProvider) throws SecurityException;
 
     /**

Modified: 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/AuthenticationProviderProxyImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/AuthenticationProviderProxyImpl.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/AuthenticationProviderProxyImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/AuthenticationProviderProxyImpl.java
 Thu Sep 22 14:31:19 2005
@@ -15,6 +15,7 @@
 package org.apache.jetspeed.security.impl;
 
 import java.security.Principal;
+import java.sql.Date;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -367,6 +368,38 @@
         if ( providerName != null )
         {
             setPasswordUpdateRequired(userName, updateRequired, providerName);
+        }
+        else
+        {
+            throw new 
SecurityException(SecurityException.USER_DOES_NOT_EXIST.create(userName));
+        }
+    }
+
+    /**
+     * @see 
org.apache.jetspeed.security.AuthenticationProviderProxy#setPasswordExpiration(java.lang.String,
 java.sql.Date, java.lang.String)
+     */
+    public void setPasswordExpiration(String userName, Date expirationDate, 
String authenticationProvider) throws SecurityException
+    {
+        AuthenticationProvider provider = 
getAuthenticationProviderByName(authenticationProvider);
+        if ( provider != null )
+        {
+            
provider.getCredentialHandler().setPasswordExpiration(userName,expirationDate);
+        }
+        else
+        {
+            throw new 
SecurityException(SecurityException.INVALID_AUTHENTICATION_PROVIDER.create(authenticationProvider));
+        }
+    }
+
+    /**
+     * @see 
org.apache.jetspeed.security.spi.CredentialHandler#setPasswordExpiration(java.lang.String,
 java.sql.Date)
+     */
+    public void setPasswordExpiration(String userName, Date expirationDate) 
throws SecurityException
+    {
+        String providerName = getAuthenticationProvider(userName);
+        if ( providerName != null )
+        {
+            setPasswordExpiration(userName, expirationDate, providerName);
         }
         else
         {

Modified: 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/UserManagerImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/UserManagerImpl.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/UserManagerImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/UserManagerImpl.java
 Thu Sep 22 14:31:19 2005
@@ -15,6 +15,7 @@
 package org.apache.jetspeed.security.impl;
 
 import java.security.Principal;
+import java.sql.Date;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -503,5 +504,21 @@
             userPrincipal.setEnabled(enabled);
             atnProviderProxy.updateUserPrincipal(userPrincipal);
         }
+    }
+
+    /**
+     * @see 
org.apache.jetspeed.security.UserManager#setPasswordExpiration(java.lang.String,
 java.sql.Date)
+     */
+    public void setPasswordExpiration(String userName, Date expirationDate) 
throws SecurityException
+    {
+        ArgUtil.notNull(new Object[]
+        { userName,}, new String[]
+        { "userName"}, "setPasswordExpiration(java.lang.String, 
java.sql.Date)");
+
+        if (getAnonymousUser().equals(userName)) 
+        { 
+            throw new 
SecurityException(SecurityException.ANONYMOUS_USER_PROTECTED.create(userName)); 
+        }
+        atnProviderProxy.setPasswordExpiration(userName, expirationDate);
     }
 }

Modified: 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/CredentialHandler.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/CredentialHandler.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/CredentialHandler.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/CredentialHandler.java
 Thu Sep 22 14:31:19 2005
@@ -14,6 +14,7 @@
  */
 package org.apache.jetspeed.security.spi;
 
+import java.sql.Date;
 import java.util.Set;
 
 import org.apache.jetspeed.security.PasswordCredential;
@@ -89,6 +90,19 @@
      * @throws Throws a security exception.
      */
     void setPasswordEnabled(String userName, boolean enabled) throws 
SecurityException;
+
+    /**
+     * <p>
+     * Set the expiration date and the expired flag of the password 
credential.</p>
+     * <p>
+     * If a date equal or before the current date is provided, the expired 
flag will be set to true,
+     * otherwise to false.</p>
+     * 
+     * @param userName The user name.
+     * @param expirationDate The expiration date to set.
+     * @throws Throws a security exception.
+     */
+    void setPasswordExpiration(String userName, Date expirationDate) throws 
SecurityException;
 
     /**
      * <p>

Modified: 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultCredentialHandler.java
 Thu Sep 22 14:31:19 2005
@@ -291,6 +291,39 @@
     }
     
     /**
+     * @see 
org.apache.jetspeed.security.spi.CredentialHandler#setPasswordExpiration(java.lang.String,
 java.sql.Date)
+     */
+    public void setPasswordExpiration(String userName, java.sql.Date 
expirationDate) throws SecurityException
+    {
+        InternalUserPrincipal internalUser = 
securityAccess.getInternalUserPrincipal(userName, false);
+        if (null != internalUser)
+        {
+            InternalCredential credential = 
getPasswordCredential(internalUser, userName );
+            if ( credential != null )
+            {
+                long time = new Date().getTime();
+                if ( expirationDate != null && new 
java.sql.Date(time).after(expirationDate))
+                {
+                    credential.setExpired(true);
+                }
+                else
+                {
+                    credential.setExpired(false);
+                }
+                credential.setExpirationDate(expirationDate);
+                
+                credential.setModifiedDate(new Timestamp(time));
+                internalUser.setModifiedDate(new Timestamp(time));
+                securityAccess.setInternalUserPrincipal(internalUser, false);
+            }
+        }
+        else
+        {
+            throw new 
SecurityException(SecurityException.USER_DOES_NOT_EXIST.create(userName));
+        }
+    }
+
+    /**
      * @see 
org.apache.jetspeed.security.spi.CredentialHandler#authenticate(java.lang.String,
 java.lang.String)
      */
     public boolean authenticate(String userName, String password) throws 
SecurityException

Modified: 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/UserManager.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/UserManager.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/UserManager.java
 (original)
+++ 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/UserManager.java
 Thu Sep 22 14:31:19 2005
@@ -14,6 +14,7 @@
  */
 package org.apache.jetspeed.security;
 
+import java.sql.Date;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -179,4 +180,17 @@
      * @param enabled enabled flag for the user
      */
     void setUserEnabled(String userName, boolean enabled) throws 
SecurityException;
+
+    /**
+     * <p>
+     * Set the expiration date and the expired flag of the password 
credential.</p>
+     * <p>
+     * If a date equal or before the current date is provided, the expired 
flag will be set to true,
+     * otherwise to false.</p>
+     * 
+     * @param userName The user name.
+     * @param expirationDate The expiration date to set.
+     * @throws Throws a security exception.
+     */
+    void setPasswordExpiration(String userName, Date expirationDate) throws 
SecurityException;
 }

Modified: 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/om/InternalCredential.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/om/InternalCredential.java?rev=291018&r1=291017&r2=291018&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/om/InternalCredential.java
 (original)
+++ 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/security/om/InternalCredential.java
 Thu Sep 22 14:31:19 2005
@@ -42,6 +42,14 @@
     public static final int PRIVATE = 0;
     /** Public credentials type. */
     public static final int PUBLIC = 1;
+    
+    /**
+     * Maximum allowed java.sql.Date value (according to the specs).
+     * <em>Note:</em><br>
+     * The concrete value is default time zone dependent and should 
<em>only</em>
+     * be used for setting Date fields, not to <em>compare<em> against.
+     */
+    public static final Date MAX_DATE = Date.valueOf("8099-01-01");
 
     /**
      * <p>Getter for the credential id.</p>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to