[Yanel-commits] rev 23293 - in public/yanel/trunk/src:
contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources
contributions/resources/yanel-user/xslt
realms/yanel-website/ac-identities
realms/yanel-website/ac-identities/groups
realms/yanel-website/content/rtd
josias at wyona.com
josias at wyona.com
Fri Mar 16 14:54:14 CET 2007
Author: josias
Date: 2007-03-16 14:54:12 +0100 (Fri, 16 Mar 2007)
New Revision: 23293
Added:
public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/
public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
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/yanel-website/content/rtd/create-new-resource.rc
Log:
allow creation of new users by the resource creator and added some minor improvements. see bug #5116, thanks to paloma for the patch.
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-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java 2007-03-16 13:54:12 UTC (rev 23293)
@@ -24,6 +24,7 @@
import java.util.regex.Pattern;
import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.ResourceConfiguration;
import org.wyona.yanel.core.util.PathUtil;
import org.wyona.yanel.core.attributes.viewable.View;
import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
@@ -86,8 +87,7 @@
properties.put("userId", "");
properties.put("userName", "");
- properties.put("email", "");
- properties.put("description", "");
+ properties.put("email", "");
properties.put("password", "");
properties.put("group", "");
@@ -129,54 +129,56 @@
new StreamSource(xslFile));
String action = determineAction(request);
- String userId = getConfiguration().getProperty("user");
+ String userId = getUserId();
if (action.equals("submitProfile")) {
updateUserProfile(request, transformer);
} else if (action.equals("submitPassword")) {
updatePassword(request, transformer);
} else if (action.equals("submitDelete")) {
- if (deleteUser(getConfiguration().getProperty("user"))) {
+ if (deleteUser(userId)) {
transformer.setParameter("success", "User deleted successfully");
} else {
transformer.setParameter("error", "Unable to delete user successfully");
}
transformer.setParameter("userId", userId);
+ transformer.setParameter("deletion", "true");
} else if (action.startsWith("submitDeleteFromGroup")) {
- deleteFromGroup(action, transformer);
+ deleteFromGroup(action, transformer);
} else if (action.equals("submitAddToGroup")) {
- addToGroup(request,transformer);
+ 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(";");
+ if(!action.equals("submitDelete")) {
+ User user = getRealm().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);
}
- 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()));
@@ -218,10 +220,10 @@
*/
public void create(HttpServletRequest request) {
try {
- if (!realm.getIdentityManager().getUserManager().existsUser("rp.userId")) {
+ if (!getRealm().getIdentityManager().getUserManager().existsUser("rp.userId")) {
boolean doCreate = validateNewUserData(request);
if (doCreate) {
- UserManager um = realm.getIdentityManager().getUserManager();
+ UserManager um = getRealm().getIdentityManager().getUserManager();
String userId = request.getParameter("rp.userId");
String password = request.getParameter("rp.password");
String email = request.getParameter("rp.email");
@@ -229,12 +231,14 @@
um.createUser(userId, userName, email, password);
- String group = request.getParameter("rp.group");
- GroupManager gm = realm.getIdentityManager().getGroupManager();
- gm.getGroup(group).addMember(um.getUser(userId));
+ String groupId = request.getParameter("rp.group");
+ GroupManager gm = getRealm().getIdentityManager().getGroupManager();
+ Group group = gm.getGroup(groupId);
+ group.addMember(um.getUser(userId));
+ group.save();
// TODO: Handle more than one group
- saveUserPolicy();
+ saveUserPolicy(userId);
} else {
log.error("Unable to create user: the data introduced was not valid");
}
@@ -359,7 +363,7 @@
transformer.setParameter("error", "emailNotValid");
} else {
try {
- String userId = getConfiguration().getProperty("user");
+ String userId = getUserId();
User user = realm.getIdentityManager().getUserManager().getUser(userId);
user.setEmail(request.getParameter("email"));
user.setName(request.getParameter("userName"));
@@ -382,48 +386,48 @@
*/
private void deleteFromGroup(String action, Transformer transformer) {
try {
- String userId = getConfiguration().getProperty("user");
+ String userId = getUserId();
User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
Group[] userGroups = user.getGroups();
GroupManager gm = getRealm().getIdentityManager().getGroupManager();
String targetGroup = action.substring(action.indexOf("_")+1);
if (userGroups.length > 0) {
- 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.");
- }
+ 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);
+ String groupId = request.getParameter("Group");
+ try {
+ String userId = getUserId();
+ 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);
}
/**
@@ -435,7 +439,7 @@
private void updatePassword(HttpServletRequest request, Transformer transformer) {
String oldPassword = request.getParameter("oldPassword");
try {
- String userId = getConfiguration().getProperty("user");
+ String userId = getUserId();
if (getRealm().getIdentityManager().getUserManager().getUser(userId).authenticate(
oldPassword)) {
String plainPassword = request.getParameter("newPassword");
@@ -497,8 +501,8 @@
/**
* Saves the user data access policies to the policies repository
*/
- private void saveUserPolicy() {
- Configuration policyConfig = createPolicyConfiguration(properties.get("userId").toString());
+ private void saveUserPolicy(String userId) {
+ Configuration policyConfig = createPolicyConfiguration(userId);
DefaultConfigurationSerializer serializer = new DefaultConfigurationSerializer();
String policyPath = getPath() + POLICIES_SUFFIX;
@@ -516,7 +520,7 @@
* Validate the supplied user data. userName is optional
*/
private boolean validateNewUserData(HttpServletRequest request)
- throws AccessManagementException {
+ throws AccessManagementException {
boolean isValid = true;
if (request.getParameter("rp.password").equals("")) {
isValid = false;
@@ -538,6 +542,17 @@
return isValid;
}
+ private String getUserId() throws Exception {
+ String userId = null;
+ ResourceConfiguration resConfig = getConfiguration();
+ if(resConfig != null) {
+ userId = getConfiguration().getProperty("user");
+ } else {
+ userId = getRTI().getProperty("user");
+ }
+ return userId;
+ }
+
/**
* Delete the user from the identities repository and remove the related
* user interface files
@@ -545,16 +560,23 @@
private boolean deleteUser(String userId) {
boolean success = false;
try {
- User user = realm.getIdentityManager().getUserManager().getUser(userId);
- user.delete();
+ UserManager um = getRealm().getIdentityManager().getUserManager();
+ um.removeUser(userId);
+
String userScreenPolicyPath = getPath() + POLICIES_SUFFIX;
Repository policiesRepo = getRealm().getPolicyManager().getPoliciesRepository();
policiesRepo.getNode(userScreenPolicyPath).delete();
+ Repository rtiRepo = getRealm().getRTIRepository();
String userScreenRCPath = PathUtil.getRCPath(getPath());
- Repository rtiRepo = getRealm().getRTIRepository();
- rtiRepo.getNode(userScreenRCPath).delete();
+ if(rtiRepo.existsNode(userScreenRCPath)) {
+ rtiRepo.getNode(userScreenRCPath).delete();
+ } else {
+ String userScreenRTIPath = PathUtil.getRTIPath(getPath());
+ rtiRepo.getNode(userScreenRTIPath).delete();
+ }
+ success = true;
} catch (Exception e) {
log.error(e.getMessage(), e);
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-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl 2007-03-16 13:54:12 UTC (rev 23293)
@@ -15,30 +15,32 @@
<xsl:param name="allGroupsString" select="''"/>
<xsl:param name="success" select="''"/>
<xsl:param name="error" select="''"/>
+ <xsl:param name="deletion" select="'false'"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
- <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:choose>
+ <xsl:when test="contains('true',$deletion)">
+ <head>
+ <title></title>
+ </head>
+ <body>
+ <xsl:call-template name="show-message"/>
+ </body>
</xsl:when>
- <xsl:when test="$error != ''">
- <h4>
- An error occurred: <xsl:value-of select="$error"/>
- </h4>
- </xsl:when>
+ <xsl:otherwise>
+ <head>
+ <title>Change user profile</title>
+ </head>
+ <body>
+ <h1>
+ User Profile of <xsl:value-of select="$userId"/>
+ </h1>
+ <xsl:call-template name="show-message"/>
+ <xsl:apply-templates select="form"/>
+ </body>
+ </xsl:otherwise>
</xsl:choose>
- <xsl:apply-templates select="form"/>
- </body>
</html>
</xsl:template>
@@ -125,6 +127,21 @@
</form>
</xsl:template>
+ <xsl:template name="show-message">
+ <xsl:choose>
+ <xsl:when test="$success != ''">
+ <h4>
+ <xsl:value-of select="$success"/>
+ </h4>
+ </xsl:when>
+ <xsl:when test="$error != ''">
+ <h4>
+ An error occurred: <xsl:value-of select="$error"/>
+ </h4>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
<xsl:template name="tokenize">
<xsl:param name="inputString"/>
<xsl:param name="separator" select="' '"/>
Added: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml 2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml 2007-03-16 13:54:12 UTC (rev 23293)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group id="admin">
+<name>Admins</name>
+<members>
+<member id="alice"/>
+<member id="lenya"/>
+</members>
+</group>
Property changes on: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml 2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml 2007-03-16 13:54:12 UTC (rev 23293)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group id="editor">
+<name>My Editors</name>
+<members>
+<member id="alice"/>
+<member id="lenya"/>
+</members>
+</group>
Property changes on: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc 2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc 2007-03-16 13:54:12 UTC (rev 23293)
@@ -13,6 +13,7 @@
<rc:property name="xslt" value="/xslt/global.xsl"/>
<rc:property name="mime-type" value="application/xhtml+xml"/>
</rc:resource-type>
+ <rc:resource-type name="yanel-user" namespace="http://www.wyona.org/yanel/resource/1.0"/>
</rc:resource-types>
</yanel:custom-config>
</yanel:resource-config>
More information about the Yanel-commits
mailing list