[Yanel-commits] rev 23146 - in public/yanel/trunk/src: contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources contributions/resources/yanel-user/xslt realms/use-cases/yanel/ac-identities/groups realms/use-cases/yanel/ac-identities/users realms/use-cases/yanel/ac-policies realms/use-cases/yanel/data realms/use-cases/yanel/rti

josias at wyona.com josias at wyona.com
Tue Mar 6 00:44:40 CET 2007


Author: josias
Date: 2007-03-06 00:44:39 +0100 (Tue, 06 Mar 2007)
New Revision: 23146

Added:
   public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/alice.policy
   public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/lenya.policy
   public/yanel/trunk/src/realms/use-cases/yanel/rti/lenya.yanel-rc
Modified:
   public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java
   public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl
   public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/groups/admin.xml
   public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/alice.xml
   public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/lenya.xml
   public/yanel/trunk/src/realms/use-cases/yanel/data/index.html
Log:
applied patch for bug #5116 to improve user resource. thanks to paloma

Modified: public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java	2007-03-05 23:44:39 UTC (rev 23146)
@@ -34,7 +34,6 @@
 import org.wyona.security.core.api.GroupManager;
 import org.wyona.security.core.api.User;
 import org.wyona.security.core.api.Group;
-import org.wyona.security.core.api.Item;
 import org.wyona.security.core.api.AccessManagementException;
 import org.wyona.yarep.core.Repository;
 
@@ -130,7 +129,7 @@
                     new StreamSource(xslFile));
 
             String action = determineAction(request);
-            String userId = getConfiguration().getProperty("user");
+            String userId = getConfiguration().getProperty("user");            
 
             if (action.equals("submitProfile")) {
                 updateUserProfile(request, transformer);
@@ -143,24 +142,41 @@
                     transformer.setParameter("error", "Unable to delete user successfully");
                 }
                 transformer.setParameter("userId", userId);
-            } else if (action.equals("submitDeleteFromGroup")) {
-                deleteFromGroup(action, transformer);
-            } else {
-                User user = realm.getIdentityManager().getUserManager().getUser(userId);
-                transformer.setParameter("userId", userId);
-                transformer.setParameter("userName", user.getName());
-                transformer.setParameter("email", user.getEmail());
-                Group[] groups = user.getGroups();
-                StringBuffer groupsString = new StringBuffer();
-                for (int i = 0; i < groups.length; i++) {
-                    groupsString.append(groups[i].getID()).append(";");
-                }
-                transformer.setParameter("groupsString", groupsString);
+            } else if (action.startsWith("submitDeleteFromGroup")) {        	
+        	deleteFromGroup(action, transformer);
+            } else if (action.equals("submitAddToGroup")) {
+        	addToGroup(request,transformer);
             }
 
+            User user = realm.getIdentityManager().getUserManager().getUser(userId);
+            transformer.setParameter("userId", userId);
+            transformer.setParameter("userName", user.getName());
+            transformer.setParameter("email", user.getEmail());
+            Group[] userGroups = user.getGroups();
+            StringBuffer userGroupsString = new StringBuffer();
+            for (int i = 0; i < userGroups.length; i++) {
+        	userGroupsString.append(userGroups[i].getID()).append(";");
+            }
+            transformer.setParameter("userGroupsString", userGroupsString);            
+            
+            Group[] allGroups = getRealm().getIdentityManager().getGroupManager().getGroups();
+            StringBuffer allGroupsString = new StringBuffer();
+            for (int i = 0; i < allGroups.length; i++) {
+        	boolean isMember = false;        	
+        	for(int j = 0; j < userGroups.length; j++) {
+        	    if(userGroups[j].getID().equals(allGroups[i].getID())) {
+        		isMember = true;      		
+        	    }
+        	} 
+        	if(!isMember) {
+        	    allGroupsString.append(allGroups[i].getID()).append(";");
+        	}
+            }
+            transformer.setParameter("allGroupsString", allGroupsString);            
+
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             transformer.transform(new javax.xml.transform.stream.StreamSource(xmlFile),
-                    new StreamResult(baos));
+        	    new StreamResult(baos));
 
             defaultView.setMimeType(MIME_TYPE);
             defaultView.setInputStream(new java.io.ByteArrayInputStream(baos.toByteArray()));
@@ -201,7 +217,6 @@
      *      Creates the user
      */
     public void create(HttpServletRequest request) {
-
         try {
             if (!realm.getIdentityManager().getUserManager().existsUser("rp.userId")) {
                 boolean doCreate = validateNewUserData(request);
@@ -336,7 +351,7 @@
      *            The request containing the data to update
      * @param transformer
      */
-    protected void updateUserProfile(HttpServletRequest request, Transformer transformer) {
+    private void updateUserProfile(HttpServletRequest request, Transformer transformer) {
         String email = request.getParameter("email");
         if (email == null || ("").equals(email)) {
             transformer.setParameter("error", "emailNotSet");
@@ -348,16 +363,11 @@
                 User user = realm.getIdentityManager().getUserManager().getUser(userId);
                 user.setEmail(request.getParameter("email"));
                 user.setName(request.getParameter("userName"));
-                user.save();
-
-                transformer.setParameter("userId", userId);
-                transformer.setParameter("userName", user.getName());
-                transformer.setParameter("email", user.getEmail());
+                user.save();               
                 transformer.setParameter("success", "Profile updated successfully");
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
             }
-
         }
     }
 
@@ -370,30 +380,51 @@
      *            The request containing the group involved
      * @param transformer
      */
-    protected void deleteFromGroup(String action, Transformer transformer) {
-
+    private void deleteFromGroup(String action, Transformer transformer) {
         try {
             String userId = getConfiguration().getProperty("user");
             User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
             Group[] userGroups = user.getGroups();
             GroupManager gm = getRealm().getIdentityManager().getGroupManager();
 
-            String targetGroup = action.substring(action.indexOf("_"));
-            log.error("USER GROUPS: " + userGroups.length);
+            String targetGroup = action.substring(action.indexOf("_")+1);            
             if (userGroups.length > 0) {
-                Group group = gm.getGroup(targetGroup);
-                if (group.isMember(user)) {
-                    group.removeMember(user);
-                }
-                transformer.setParameter("success", "User successfully deleted from group"
-                        + targetGroup);
+        	if(userGroups.length > 1) {
+        	    Group group = gm.getGroup(targetGroup);
+        	    if (group.isMember(user)) {                   
+        		group.removeMember(user);
+        		group.save();                    
+        	    }
+        	    transformer.setParameter("success", "User successfully deleted from group: " + targetGroup);
+        	} else {
+        	    transformer.setParameter("error", "User can not be removed from group: " + targetGroup + ". Users must belong to one group at least."); 
+        	}        	
             } else {
-                log.error("The user " + userId + "does not belong to any group!");
+        	log.error("The user " + userId + "does not belong to any group!");
             }
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
     }
+    
+    /**
+     * Add a user to a group
+     * @param request Request containing the group the user has to be added to
+     * @param transformer
+     */
+    private void addToGroup(HttpServletRequest request, Transformer transformer) {
+	String groupId = request.getParameter("Group");
+	try {
+	    String userId = getConfiguration().getProperty("user");	
+	    Group group = getRealm().getIdentityManager().getGroupManager().getGroup(groupId);
+	    User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
+	    group.addMember(user);
+	    group.save();
+	} catch (Exception e) {
+	    log.error(e.getMessage(), e);
+	}
+	transformer.setParameter("success", "User successfully added to group: " + groupId);
+    }
 
     /**
      * Change user password
@@ -401,7 +432,7 @@
      * @param request
      * @param transformer
      */
-    protected void updatePassword(HttpServletRequest request, Transformer transformer) {
+    private void updatePassword(HttpServletRequest request, Transformer transformer) {
         String oldPassword = request.getParameter("oldPassword");
         try {
             String userId = getConfiguration().getProperty("user");
@@ -422,8 +453,7 @@
                 }
             } else {
                 transformer.setParameter("error", "Authentication failed!");
-            }
-            transformer.setParameter("userId", userId);
+            }            
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
@@ -512,7 +542,7 @@
      * Delete the user from the identities repository and remove the related
      * user interface files
      */
-    protected boolean deleteUser(String userId) {
+    private boolean deleteUser(String userId) {
         boolean success = false;
         try {
             User user = realm.getIdentityManager().getUserManager().getUser(userId);

Modified: public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl
===================================================================
--- public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl	2007-03-05 23:44:39 UTC (rev 23146)
@@ -11,75 +11,38 @@
   <xsl:param name="userId" select="''"/>
   <xsl:param name="userName" select="''"/>
   <xsl:param name="email" select="''"/>
-  <xsl:param name="groupsString" select="''"/>
+  <xsl:param name="userGroupsString" select="''"/>
+  <xsl:param name="allGroupsString" select="''"/>
   <xsl:param name="success" select="''"/>
   <xsl:param name="error" select="''"/>
 
   <xsl:template match="/">
     <html xmlns="http://www.w3.org/1999/xhtml">
-      <xsl:choose>
-        <xsl:when test="$success != ''">
-          <head>
-            <title></title>
-          </head>
-          <body>
-            <xsl:apply-templates select="form" mode="success"/>
-          </body>
+      <head>
+        <title>Change user profile</title>
+      </head>
+      <body>
+        <h1> 
+          User Profile of <xsl:value-of select="$userId"/>
+        </h1>
+      <xsl:choose>       
+        <xsl:when test="$success != ''">            
+          <h4>
+            <xsl:value-of select="$success"/>
+          </h4>           
         </xsl:when>
-        <xsl:when test="$error != ''">
-          <head>
-            <title></title>
-          </head>
-          <body>
-            <xsl:apply-templates select="form" mode="error"/>
-          </body>
-        </xsl:when>
-        <xsl:otherwise>
-          <head>
-            <title>Change user profile</title>
-          </head>
-          <body>
-            <h1> User Profile of <xsl:value-of select="$userId"/>
-            </h1>
-            <xsl:apply-templates select="form" mode="init"/>
-          </body>
-        </xsl:otherwise>
+        <xsl:when test="$error != ''">          
+          <h4>
+            An error occurred: <xsl:value-of select="$error"/>
+          </h4>            
+        </xsl:when>        
       </xsl:choose>
+       <xsl:apply-templates select="form"/>
+       </body>
     </html>
-  </xsl:template>
+  </xsl:template>  
 
-  <xsl:template match="form" mode="success">
-    <h4>
-      <xsl:value-of select="$success"/>
-    </h4>
-
-    <xsl:if test="starts-with($success, 'Profile')">
-      <p>
-        <table>
-          <tr>
-            <td>Name:</td>
-            <td>
-              <xsl:value-of select="$userName"/>
-            </td>
-          </tr>
-          <tr>
-            <td>E-Mail:</td>
-            <td>
-              <xsl:value-of select="$email"/>
-            </td>
-          </tr>
-        </table>
-      </p>
-    </xsl:if>
-
-  </xsl:template>
-
-  <xsl:template match="form" mode="error">
-    <h4>An error occurred: <xsl:value-of select="$error"/>
-    </h4>
-  </xsl:template>
-
-  <xsl:template match="form" mode="init">
+  <xsl:template match="form">
     <h2>Change Password</h2>
     <form name="user-password-form" method="post" action="#">
       <p>
@@ -138,13 +101,16 @@
 
     <h2>Change Groups</h2>
 
+    <h4>Remove from group</h4>
     <p>
       <table>
-        <xsl:call-template name="process-groups"/>
+        <xsl:call-template name="process-user-groups"/>
       </table>
-    </p>
+    </p>    
+     
+    <xsl:call-template name="process-all-groups"/>         
+  
 
-
     <h2>Delete User</h2>
     <form name="user-deletion-form" method="post" action="#">
       <p>
@@ -182,11 +148,56 @@
       </xsl:call-template>
     </xsl:if>
   </xsl:template>
+  
+  <xsl:template name="process-all-groups">
+    <xsl:variable name="groups">
+      <xsl:call-template name="tokenize">
+        <xsl:with-param name="inputString" select="$allGroupsString"/>
+        <xsl:with-param name="separator" select="';'"/>
+        <xsl:with-param name="resultElement" select="'group'"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <h4> Add to group </h4>
+    <xsl:choose>
+      <xsl:when test="xalan:nodeset($groups)/node()">
+        <p>
+          <table>
+            <tr>
+              <td/>
+              <td>
+                <form name="add-user-to-group" method="post" action="#">
+                  <select name="Group">
+                    <xsl:for-each select="xalan:nodeset($groups)/node()">
+                      <option>
+                        <xsl:attribute name="value">
+                          <xsl:value-of select="."/>
+                        </xsl:attribute>
+                        <xsl:value-of select="."/>
+                      </option>
+                    </xsl:for-each>
+                  </select>
+                  <input type="submit" value="Add">
+                    <xsl:attribute name="name">
+                      <xsl:text>submitAddToGroup</xsl:text>                
+                    </xsl:attribute>
+                  </input>
+                </form>
+             </td>
+           </tr>
+         </table>
+       </p>
+     </xsl:when>
+     <xsl:otherwise>
+       <p>User already belongs to all existing groups</p>
+     </xsl:otherwise>
+   </xsl:choose>
 
-  <xsl:template name="process-groups">
+  </xsl:template>
+
+  <xsl:template name="process-user-groups">
     <xsl:variable name="groups">
       <xsl:call-template name="tokenize">
-        <xsl:with-param name="inputString" select="$groupsString"/>
+        <xsl:with-param name="inputString" select="$userGroupsString"/>
         <xsl:with-param name="separator" select="';'"/>
         <xsl:with-param name="resultElement" select="'group'"/>
       </xsl:call-template>
@@ -212,7 +223,6 @@
                 <xsl:text>submitDeleteFrom</xsl:text>
                 <xsl:value-of select="$uniqueID"/>
               </xsl:attribute>
-
             </input>
           </form>
         </td>

Modified: public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/groups/admin.xml
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/groups/admin.xml	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/groups/admin.xml	2007-03-05 23:44:39 UTC (rev 23146)
@@ -1,8 +1,7 @@
-<?xml version="1.0"?>
-<group id="admin" xmlns="http://www.wyona.org/security/1.0">
-  <name>Admins</name>
-  <members>
-    <member id="alice"/>
-    <member id="lenya"/>
-  </members>
+<?xml version="1.0" encoding="UTF-8"?>
+<group id="admin">
+<name>Admins</name>
+<members>
+<member id="lenya"/>
+</members>
 </group>

Modified: public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/alice.xml
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/alice.xml	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/alice.xml	2007-03-05 23:44:39 UTC (rev 23146)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <user id="alice">
-<name>Michael H. Wechner</name>
+<name>Michael Wechner</name>
 <email>michi at wyona.org</email>
-<password>8e07dafd13495561db9063ebe4db4b27</password>
+<password>e94ef563867e9c9df3fcc999bdb045f5</password>
 </user>

Modified: public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/lenya.xml
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/lenya.xml	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/ac-identities/users/lenya.xml	2007-03-05 23:44:39 UTC (rev 23146)
@@ -3,7 +3,7 @@
 <user id="lenya" xmlns="http://www.wyona.org/security/1.0">
   <name>Michael Wechner</name>  
   <email>michi at wyona.org</email>
-  <password type="md5">8e07dafd13495561db9063ebe4db4b27</password>
+  <password>8e07dafd13495561db9063ebe4db4b27</password>
 
   
 </user>

Added: public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/alice.policy
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/alice.policy	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/alice.policy	2007-03-05 23:44:39 UTC (rev 23146)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+
+<policy xmlns="http://www.wyona.org/security/1.0">
+
+  <role id="view">
+    <world permission="true"/>   
+  </role>
+
+  <role id="open">
+    <world permission="true"/> 
+  </role>
+
+  <role id="write">
+    <world permission="true"/> 
+  </role>
+
+</policy>

Added: public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/lenya.policy
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/lenya.policy	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/ac-policies/lenya.policy	2007-03-05 23:44:39 UTC (rev 23146)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+
+<policy xmlns="http://www.wyona.org/security/1.0">
+
+  <role id="view">
+    <world permission="true"/>   
+  </role>
+
+  <role id="open">
+    <world permission="true"/> 
+  </role>
+
+  <role id="write">
+    <world permission="true"/> 
+  </role>
+
+</policy>

Modified: public/yanel/trunk/src/realms/use-cases/yanel/data/index.html
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/data/index.html	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/data/index.html	2007-03-05 23:44:39 UTC (rev 23146)
@@ -25,7 +25,8 @@
 
   <li><a href="introspection-index.xml">introspection-index.xml</a></li>
   
-  <li><a href="alice">Alice</a></li>
+  <li><a href="alice">Alice</a></li>  
+  <li><a href="lenya">Lenya</a></li>  
 
   <li><a href="hello/">hello/</a></li>
   <li><a href="hello">hello</a></li>

Added: public/yanel/trunk/src/realms/use-cases/yanel/rti/lenya.yanel-rc
===================================================================
--- public/yanel/trunk/src/realms/use-cases/yanel/rti/lenya.yanel-rc	2007-03-05 22:44:06 UTC (rev 23145)
+++ public/yanel/trunk/src/realms/use-cases/yanel/rti/lenya.yanel-rc	2007-03-05 23:44:39 UTC (rev 23146)
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+
+<yanel:resource-config xmlns:yanel="http://www.wyona.org/yanel/rti/1.0">
+  <yanel:rti name="yanel-user" namespace="http://www.wyona.org/yanel/resource/1.0"/>
+  <yanel:property name="user" value="lenya"/>  
+</yanel:resource-config>




More information about the Yanel-commits mailing list