[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