cziegeler 2002/10/04 05:00:38
Modified: src/java/org/apache/cocoon/components/source SourceUtil.java
src/blocks/portal-fw/java/org/apache/cocoon/webapps/portal/components
PortalManager.java
src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/components
AuthenticationManager.java Handler.java
src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/generation
ConfigurationGenerator.java
src/blocks/portal-fw/samples sitemap.xmap
Log:
WARNING: This is an incompatible change!
Separating user management from authentication handler. The user
management is now an own application.
Revision Changes Path
1.7 +2 -1
xml-cocoon2/src/java/org/apache/cocoon/components/source/SourceUtil.java
Index: SourceUtil.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/SourceUtil.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SourceUtil.java 25 Sep 2002 11:45:34 -0000 1.6
+++ SourceUtil.java 4 Oct 2002 12:00:37 -0000 1.7
@@ -280,6 +280,7 @@
Map resolverParameters = new java.util.HashMap();
resolverParameters.put(URLSource.HTTP_METHOD, method);
resolverParameters.put(URLSource.REQUEST_PARAMETERS, resourceParameters);
+
return resolver.resolveURI(uri, null, resolverParameters);
}
}
1.2 +128 -6
xml-cocoon2/src/blocks/portal-fw/java/org/apache/cocoon/webapps/portal/components/PortalManager.java
Index: PortalManager.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/blocks/portal-fw/java/org/apache/cocoon/webapps/portal/components/PortalManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PortalManager.java 27 Sep 2002 09:05:06 -0000 1.1
+++ PortalManager.java 4 Oct 2002 12:00:37 -0000 1.2
@@ -58,6 +58,8 @@
import java.util.List;
import java.util.Map;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
import org.apache.excalibur.source.SourceParameters;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
@@ -68,6 +70,7 @@
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.sax.XMLDeserializer;
+import org.apache.cocoon.components.source.SourceUtil;
import org.apache.excalibur.store.Store;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Session;
@@ -553,16 +556,16 @@
if (state.equals(PortalConstants.STATE_MAIN) == true) {
- DocumentFragment rolesDF =
this.getAuthenticationManager().getRoles();
- Node roles = null;
+ Document rolesDF = this.getRoles();
+ Node roles = null;
if (rolesDF != null) roles = DOMUtil.getSingleNode(rolesDF,
"roles");
IncludeXMLConsumer.includeNode(roles, consumer, consumer);
}
if (state.equals(PortalConstants.STATE_MAIN_ROLE) == true) {
- DocumentFragment rolesDF =
this.getAuthenticationManager().getRoles();
- Node roles = null;
+ Document rolesDF = this.getRoles();
+ Node roles = null;
if (rolesDF != null) roles = DOMUtil.getSingleNode(rolesDF,
"roles");
IncludeXMLConsumer.includeNode(roles, consumer, consumer);
@@ -576,8 +579,8 @@
this.sendStartElementEvent(consumer, "name");
this.sendTextEvent(consumer, role);
this.sendEndElementEvent(consumer, "name");
- DocumentFragment userDF =
this.getAuthenticationManager().getUsers(role, null);
- Node users = null;
+ Document userDF = this.getUsers(role, null);
+ Node users = null;
if (userDF != null) users = DOMUtil.getSingleNode(userDF,
"users");
IncludeXMLConsumer.includeNode(users, consumer, consumer);
this.sendEndElementEvent(consumer, "roleusers");
@@ -4174,6 +4177,125 @@
public void sendEvents(XMLConsumer consumer, Node node)
throws SAXException {
IncludeXMLConsumer.includeNode(node, consumer, consumer);
+ }
+
+ /**
+ * Get all users in a document fragment with the following children:
+ * <users>
+ * <user>
+ * <ID>...</ID>
+ * <role>...</role> <!-- optional -->
+ * <data>
+ * ...
+ * </data>
+ * </user>
+ * ....
+ * </users>
+ * The document fragment might contain further nodes at the root!
+ * If <code>role</code> is <code>null</code> all users are fetched,
+ * otherwise only the users for this role.
+ * If also ID is not null only the single user is fetched.
+ */
+ private Document getUsers(String role, String ID)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN getUsers role="+role+", ID="+ID);
+ }
+ Document frag = null;
+ Configuration conf =
this.getAuthenticationManager().getModuleConfiguration("single-role-user-management");
+ if (conf != null) {
+
+ // get load-users resource (optional)
+ Configuration child = conf.getChild("load-users", false);
+ if (child != null) {
+ String loadUsersResource = child.getAttribute("uri", null);
+ SourceParameters loadUsersResourceParameters =
SourceParameters.create(child);
+
+ if (loadUsersResource != null) {
+ SourceParameters parameters = (loadUsersResourceParameters ==
null) ? new SourceParameters()
+ :
loadUsersResourceParameters;
+ if (this.getAuthenticationManager().getApplicationName() !=
null)
+ parameters.setSingleParameterValue("application",
this.getAuthenticationManager().getApplicationName());
+ if (ID != null) {
+ parameters.setSingleParameterValue("type", "user");
+ parameters.setSingleParameterValue("ID", ID);
+ } else {
+ parameters.setSingleParameterValue("type", "users");
+ }
+ if (role != null) parameters.setSingleParameterValue("role",
role);
+ frag = this.loadResource(loadUsersResource, parameters);
+
+ }
+ }
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END getUsers fragment="+(frag == null ? "null"
: XMLUtils.serializeNodeToXML(frag)));
+ }
+ return frag;
+ }
+
+ /**
+ * Get all roles in a document fragment with the following children:
+ * <roles>
+ * <role>...</role>
+ * ....
+ * </roles>
+ * The document fragment might contain further nodes at the root!
+ */
+ private Document getRoles()
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN getRoles");
+ }
+ Document frag = null;
+
+ Configuration conf =
this.getAuthenticationManager().getModuleConfiguration("single-role-user-management");
+ if (conf != null) {
+
+ // get load-roles resource (optional)
+ Configuration child = conf.getChild("load-roles", false);
+ if (child != null) {
+ String loadRolesResource = child.getAttribute("uri", null);
+ SourceParameters loadRolesResourceParameters =
SourceParameters.create(child);
+ if (loadRolesResource != null) {
+ SourceParameters parameters = (loadRolesResourceParameters ==
null) ? new SourceParameters()
+ :
loadRolesResourceParameters;
+ if (this.getAuthenticationManager().getApplicationName() !=
null)
+ parameters.setSingleParameterValue("application",
this.getAuthenticationManager().getApplicationName());
+ parameters.setSingleParameterValue("type", "roles");
+ frag = this.loadResource(loadRolesResource, parameters);
+ }
+ }
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END getRoles fragment="+frag);
+ }
+ return frag;
+ }
+
+ /**
+ * Load XML resource
+ */
+ private Document loadResource(String resource,
+ SourceParameters parameters)
+ throws IOException, ProcessingException, SAXException {
+ Source source = null;
+ try {
+ source = SourceUtil.getSource(resource,
+ null,
+ parameters,
+ this.resolver,
+ this.objectModel);
+ return SourceUtil.toDOM(source, this.manager);
+ } catch (SourceException se) {
+ throw SourceUtil.handle(se);
+ } finally {
+ this.resolver.release(source);
+ }
}
}
1.2 +4 -541
xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/components/AuthenticationManager.java
Index: AuthenticationManager.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/components/AuthenticationManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AuthenticationManager.java 27 Sep 2002 09:05:06 -0000 1.1
+++ AuthenticationManager.java 4 Oct 2002 12:00:38 -0000 1.2
@@ -108,14 +108,6 @@
/** The Avalon Role */
public static final String ROLE = AuthenticationManager.class.getName();
- /** Request parameter */
- public static final String REQ_PARAMETER_STATE = "authstate";
- public static final String REQ_PARAMETER_ROLE = "authrole";
- public static final String REQ_PARAMETER_ID = "authid";
- public static final String REQ_PARAMETER_USER = "authuser";
-
- private static final String SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE =
"org.apache.cocoon.webapps.authentication.adminrole";
-
/** The handler manager */
private HandlerManager handlerManager = new HandlerManager();
@@ -298,290 +290,12 @@
}
/**
- * Show the configuration for the admin.
- * If <code>src</code> is "admin" or null the admin configuration is shown.
- * If <code>src</code> is "user" the configuration of the current user
- * is shown.
+ * Return the name of the current application
*/
- public void showConfiguration(XMLConsumer consumer,
- String src)
- throws ProcessingException, SAXException {
- // synchronized
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN showConfiguration consumer=" + consumer +
", src="+src);
- }
- boolean isAdmin = (src == null || src.equals("admin"));
-
- // now start producing xml:
- AttributesImpl attr = new AttributesImpl();
- consumer.startElement("", "configuration", "configuration", attr);
-
- // set the conf uri:
- // This is a bug in the servlet 2.2 API!!!
- // It does not contain the context: String uri =
HttpUtils.getRequestURL(this.request).toString();
- // So: ABSOLUTELY USELESS
- String uri = this.response.encodeURL(this.request.getRequestURI());
- consumer.startElement("", "uri", "uri", attr);
- consumer.characters(uri.toCharArray(), 0, uri.length());
- consumer.endElement("", "uri", "uri");
-
- if (isAdmin == true) {
- // build the menue
- consumer.startElement("", "menue", "menue", attr);
-
- if (this.handler != null) {
- if (this.handler.getNewRoleResource() != null) {
- consumer.startElement("", "addrole", "addrole", attr);
- consumer.endElement("", "addrole", "addrole");
- }
- if (this.handler.getDeleteRoleResource() != null) {
- consumer.startElement("", "delrole", "delrole", attr);
- consumer.endElement("", "delrole", "delrole");
- }
- }
- consumer.endElement("", "menue", "menue");
- }
-
- SessionContext context = this.getAuthenticationSessionContext(true);
-
- synchronized (context) {
-
- String state =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_STATE);
- if (state == null) {
- state = (isAdmin == true ? "main" : "seluser");
- }
-
- if (state.equals("addrole") == true) {
- String role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
- if (role != null && role.trim().length() > 0) {
- SourceParameters pars = new SourceParameters();
- // first include all request parameters
- Enumeration requestParameters =
this.request.getParameterNames();
- String current;
- while (requestParameters.hasMoreElements() == true) {
- current = (String)requestParameters.nextElement();
- pars.setParameter(current,
this.request.getParameter(current));
- }
- this.addRole(role, pars);
- } else {
- role = null;
- }
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, null);
- }
-
- if (state.equals("delrole") == true) {
- try {
- String role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
- if (role != null) {
- // first delete user
- DocumentFragment userDF = this.getUsers(role, null);
- NodeList users = null;
- if (userDF != null) users = DOMUtil.selectNodeList(userDF,
"users/user");
- if (users != null) {
- for(int i = 0; i < users.getLength(); i++) {
- this.deleteUser(role,
DOMUtil.getValueOf(users.item(i), "ID"), null);
- }
- }
- this.deleteRole(role, null);
- }
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, null);
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("TransformerException: " + local,
local);
- }
- }
-
-
- if (state.equals("chguser") == true) {
- String role;
- String id;
- String user;
-
- if (isAdmin == false) {
- SourceParameters pars = this.createParameters(null);
- id = pars.getParameter("ID", null);
- role = pars.getParameter("role", null);
- user = "old";
- } else {
- role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
- id =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ID);
- user =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_USER);
- }
-
- boolean addingNewUserFailed = false;
- if (role != null && id != null && user != null) {
- if (user.equals("new") == true) {
- SourceParameters pars = new SourceParameters();
- // first include all request parameters
- Enumeration requestParameters =
this.request.getParameterNames();
- String current;
- while (requestParameters.hasMoreElements() == true) {
- current = (String)requestParameters.nextElement();
- pars.setParameter(current,
this.request.getParameter(current));
- }
- addingNewUserFailed = !this.addUser(role, id, pars);
- if (addingNewUserFailed == false) {
- consumer.startElement("", "addeduser", "addeduser",
attr);
- consumer.characters(id.toCharArray(), 0, id.length());
- consumer.endElement("", "addeduser", "addeduser");
- }
- } else {
- String delete = this.request.getParameter("authdeluser");
- if (delete != null && delete.equals("true") == true) {
- this.deleteUser(role, id, null);
- } else {
- SourceParameters pars = new SourceParameters();
- // first include all request parameters
- Enumeration requestParameters =
this.request.getParameterNames();
- String current;
- while (requestParameters.hasMoreElements() == true) {
- current = (String)requestParameters.nextElement();
- pars.setParameter(current,
this.request.getParameter(current));
- }
- this.changeUser(role, id, pars);
- }
- }
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, null);
- }
- if (addingNewUserFailed == false) {
- state = (isAdmin == true ? "adduser" : "seluser");
- } else {
- state = "erruser";
- }
- }
-
- if (state.equals("seluser") == true) {
- String role;
- String id;
-
- if (isAdmin == false) {
- SourceParameters pars = this.createParameters(null);
- id = pars.getParameter("ID", null);
- role = pars.getParameter("role", null);
- } else {
- role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
- id =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ID);
- }
- if (role != null && id != null) {
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, role);
-
- // include users
- DocumentFragment userDF = this.getUsers(role, id);
- Element users = null;
- try {
- if (userDF != null) users =
(Element)DOMUtil.getSingleNode(userDF, "users/user");
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("TransformerException: " +
local, local);
- }
- consumer.startElement("", "uservalues", "uservalues", attr);
- if (users != null && users.hasChildNodes() == true) {
- NodeList childs = users.getChildNodes();
- for(int i = 0; i < childs.getLength(); i++) {
- if (childs.item(i).getNodeType() == Node.ELEMENT_NODE)
- IncludeXMLConsumer.includeNode(childs.item(i),
consumer, consumer);
- }
- }
- consumer.endElement("", "uservalues", "uservalues");
- }
- consumer.startElement("", "user", "user", attr);
- consumer.characters("old".toCharArray(), 0, 3);
- consumer.endElement("", "user", "user");
- if (isAdmin == false) {
- consumer.startElement("", "role", "role", attr);
- consumer.characters(role.toCharArray(), 0, role.length());
- consumer.endElement("", "role", "role");
- }
- }
-
- if (state.equals("erruser") == true) {
- String role;
- String id;
-
- if (isAdmin == false) {
- SourceParameters pars = this.createParameters(null);
- id = pars.getParameter("ID", null);
- role = pars.getParameter("role", null);
- } else {
- role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
- id =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ID);
- }
- if (role != null && id != null) {
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, role);
-
- // include users
- DocumentFragment userDF = this.getUsers(role, id);
- Element users = null;
- try {
- if (userDF != null) users =
(Element)DOMUtil.getSingleNode(userDF, "users/user");
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("TransformerException: " +
local, local);
- }
- consumer.startElement("", "uservalues", "uservalues", attr);
- if (users != null && users.hasChildNodes() == true) {
- NodeList childs = users.getChildNodes();
- for(int i = 0; i < childs.getLength(); i++) {
- if (childs.item(i).getNodeType() == Node.ELEMENT_NODE)
- IncludeXMLConsumer.includeNode(childs.item(i),
consumer, consumer);
- }
- }
- consumer.endElement("", "uservalues", "uservalues");
- }
- consumer.startElement("", "user", "user", attr);
- consumer.characters("error".toCharArray(), 0, 5);
- consumer.endElement("", "user", "user");
- if (isAdmin == false) {
- consumer.startElement("", "role", "role", attr);
- consumer.characters(role.toCharArray(), 0, role.length());
- consumer.endElement("", "role", "role");
- }
- }
-
- if (state.equals("adduser") == true) {
- consumer.startElement("", "user", "user", attr);
- consumer.characters("new".toCharArray(), 0, 3);
- consumer.endElement("", "user", "user");
- }
-
- if (state.equals("selrole") == true) {
- String role =
this.request.getParameter(AuthenticationManager.REQ_PARAMETER_ROLE);
-
context.setAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, role);
- // include users
- DocumentFragment userDF = this.getUsers(role, null);
- Node users = null;
- try {
- if (userDF != null) users = DOMUtil.getSingleNode(userDF,
"users");
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("TransformerException: " + local,
local);
- }
- IncludeXMLConsumer.includeNode(users, consumer, consumer);
- }
-
- if (isAdmin == true) {
- // include roles
- DocumentFragment rolesDF = this.getRoles();
- Node roles = null;
- try {
- if (rolesDF != null) roles = DOMUtil.getSingleNode(rolesDF,
"roles");
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("TransformerException: " + local,
local);
- }
- IncludeXMLConsumer.includeNode(roles, consumer, consumer);
-
- // include selected role
- String role =
(String)context.getAttribute(AuthenticationManager.SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE);
- if (role != null) {
- consumer.startElement("", "role", "role", attr);
- consumer.characters(role.toCharArray(), 0, role.length());
- consumer.endElement("", "role", "role");
- }
- }
- } // end synchronized(context)
-
- consumer.endElement("", "configuration", "configuration");
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END showConfiguration");
- }
+ public String getApplicationName() {
+ return this.applicationName;
}
-
+
/**
* Is the current user authenticated for the given handler?
*/
@@ -1068,257 +782,6 @@
this.getLogger().debug("END createHandlerContext context="+context);
}
return context;
- }
-
- /**
- * Get all users in a document fragment with the following children:
- * <users>
- * <user>
- * <ID>...</ID>
- * <role>...</role> <!-- optional -->
- * <data>
- * ...
- * </data>
- * </user>
- * ....
- * </users>
- * The document fragment might contain further nodes at the root!
- * If <code>role</code> is <code>null</code> all users are fetched,
- * otherwise only the users for this role.
- * If also ID is not null only the single user is fetched.
- */
- public DocumentFragment getUsers(String role, String ID)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN getUsers role="+role+", ID="+ID);
- }
- DocumentFragment frag = null;
-
- if (this.handler != null && this.handler.getLoadUsersResource() != null) {
- final Resource loadUsersResource = this.handler.getLoadUsersResource();
- final SourceParameters loadParameters =
loadUsersResource.getResourceParameters();
- SourceParameters parameters = (loadParameters == null) ? new
SourceParameters()
- :
(SourceParameters)loadParameters.clone();
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- if (ID != null) {
- parameters.setSingleParameterValue("type", "user");
- parameters.setSingleParameterValue("ID", ID);
- } else {
- parameters.setSingleParameterValue("type", "users");
- }
- if (role != null) parameters.setSingleParameterValue("role", role);
- frag =
this.getResourceConnector().loadXML(loadUsersResource.getResourceType(), null,
-
loadUsersResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END getUsers fragment="+(frag == null ? "null"
: XMLUtils.serializeNodeToXML(frag)));
- }
- return frag;
- }
-
- /**
- * Get all roles in a document fragment with the following children:
- * <roles>
- * <role>...</role>
- * ....
- * </roles>
- * The document fragment might contain further nodes at the root!
- */
- public DocumentFragment getRoles()
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN getRoles");
- }
- DocumentFragment frag = null;
-
- if (this.handler != null && this.handler.getLoadRolesResource() != null) {
- final Resource loadRolesResource = this.handler.getLoadRolesResource();
- final SourceParameters loadParameters =
loadRolesResource.getResourceParameters();
- SourceParameters parameters = (loadParameters == null) ? new
SourceParameters()
- :
(SourceParameters)loadParameters.clone();
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "roles");
- frag =
this.getResourceConnector().loadXML(loadRolesResource.getResourceType(), null,
-
loadRolesResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END getRoles fragment="+frag);
- }
- return frag;
- }
-
- /**
- * Add a role
- */
- private void addRole(String name, SourceParameters parameters)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN addRole role="+name+",
parameters="+parameters);
- }
- if (this.handler != null && this.handler.getNewRoleResource() != null) {
- final Resource newRoleResource = this.handler.getNewRoleResource();
- final SourceParameters handlerPars =
newRoleResource.getResourceParameters();
- if (parameters == null) parameters = new SourceParameters();
- parameters.add(handlerPars);
-
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "role");
- parameters.setSingleParameterValue("role", name);
-
- this.getResourceConnector().loadXML(newRoleResource.getResourceType(),
null,
-
newRoleResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END addRole");
- }
- }
-
- /**
- * Add a user.
- * @return If a user with ID already exists <code>false</code> is returned.
- */
- public boolean addUser(String role, String ID, SourceParameters parameters)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN addUser role="+role+", ID="+ID+",
parameters="+parameters);
- }
- boolean result = false;
-
- if (this.handler != null
- && this.handler.getNewUserResource() != null
- && ID != null
- && ID.trim().length() > 0) {
- // first test if a user with this ID already exists
- DocumentFragment user = this.getUsers(null, null);
- Node node = null;
- if (user != null) {
- try {
- node = DOMUtil.getSingleNode(user,
"users/user/ID[text()='"+ID+"']");
- } catch (javax.xml.transform.TransformerException local) {
- throw new ProcessingException("Transformer exception: " +
local, local);
- }
- }
- if (user == null || node == null) {
- final Resource newUserResource = this.handler.getNewUserResource();
- final SourceParameters newUsersPars =
newUserResource.getResourceParameters();
- if (parameters == null) parameters = new SourceParameters();
- parameters.add(newUsersPars);
-
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "user");
- parameters.setSingleParameterValue("role", role);
- parameters.setSingleParameterValue("ID", ID);
-
-
this.getResourceConnector().loadXML(newUserResource.getResourceType(), null,
-
newUserResource.getResourceIdentifier(), parameters);
- result = true;
- }
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END addUser success="+result);
- }
- return result;
- }
-
- /**
- * Delete a role
- */
- private void deleteRole(String name, SourceParameters parameters)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN deleteRole role="+name+",
parameters="+parameters);
- }
- if (this.handler != null && this.handler.getDeleteRoleResource() != null) {
- final Resource deleteRoleResource =
this.handler.getDeleteRoleResource();
- final SourceParameters handlerPars =
deleteRoleResource.getResourceParameters();
- if (parameters == null) parameters = new SourceParameters();
- parameters.add(handlerPars);
-
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "role");
- parameters.setSingleParameterValue("role", name);
-
-
this.getResourceConnector().loadXML(deleteRoleResource.getResourceType(), null,
-
deleteRoleResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END deleteRole");
- }
- }
-
- /**
- * Delete a user
- */
- private void deleteUser(String role, String name, SourceParameters parameters)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN deleteUser role="+role+", ID="+name+",
parameters="+parameters);
- }
- if (this.handler != null && this.handler.getDeleteUserResource() != null) {
- final Resource deleteUserResource =
this.handler.getDeleteUserResource();
- final SourceParameters handlerPars =
deleteUserResource.getResourceParameters();
- if (parameters == null) parameters = new SourceParameters();
- parameters.add(handlerPars);
-
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "user");
- parameters.setSingleParameterValue("role", role);
- parameters.setSingleParameterValue("ID", name);
-
-
this.getResourceConnector().loadXML(deleteUserResource.getResourceType(), null,
-
deleteUserResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END deleteUser");
- }
- }
-
- /**
- * Change a user
- */
- private void changeUser(String role, String name, SourceParameters parameters)
- throws ProcessingException {
- // calling method is syned
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("BEGIN changeUser role="+role+", ID="+name+",
parameters="+parameters);
- }
- if (this.handler != null && this.handler.getChangeUserResource() != null) {
- final Resource changeUserResource =
this.handler.getChangeUserResource();
- final SourceParameters handlerPars =
changeUserResource.getResourceParameters();
- if (parameters == null) parameters = new SourceParameters();
- parameters.add(handlerPars);
-
- if (this.applicationName != null)
- parameters.setSingleParameterValue("application",
this.applicationName);
- parameters.setSingleParameterValue("type", "user");
- parameters.setSingleParameterValue("role", role);
- parameters.setSingleParameterValue("ID", name);
-
-
this.getResourceConnector().loadXML(changeUserResource.getResourceType(), null,
-
changeUserResource.getResourceIdentifier(), parameters);
- }
-
- if (this.getLogger().isDebugEnabled() == true) {
- this.getLogger().debug("END changeUser");
- }
}
/**
1.2 +0 -106
xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/components/Handler.java
Index: Handler.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/components/Handler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Handler.java 27 Sep 2002 09:05:06 -0000 1.1
+++ Handler.java 4 Oct 2002 12:00:38 -0000 1.2
@@ -94,27 +94,6 @@
/** The ApplicationHandler */
private Map applications = new Hashtable(3, 2);
- /** The load-users resource */
- private Resource loadUsersResource;
-
- /** The load-roles resource */
- private Resource loadRolesResource;
-
- /** The new-user resource */
- private Resource newUserResource;
-
- /** The new-role resource */
- private Resource newRoleResource;
-
- /** The delete-role resource */
- private Resource deleteRoleResource;
-
- /** The delete-user resource */
- private Resource deleteUserResource;
-
- /** The change-user resource */
- private Resource changeUserResource;
-
/** The handler contexts */
private List handlerContexts = new ArrayList(2);
@@ -138,13 +117,6 @@
copy.authenticationResource = this.authenticationResource;
copy.loadResource = this.loadResource;
copy.saveResource = this.saveResource;
- copy.loadUsersResource = this.loadUsersResource;
- copy.loadRolesResource = this.loadRolesResource;
- copy.newUserResource = this.newUserResource;
- copy.newRoleResource = this.newRoleResource;
- copy.deleteUserResource = this.deleteUserResource;
- copy.deleteRoleResource = this.deleteRoleResource;
- copy.changeUserResource = this.changeUserResource;
Iterator iter = this.applications.keySet().iterator();
while (iter.hasNext()) {
final String name = (String)iter.next();
@@ -200,55 +172,6 @@
this.saveResource.setResourceParameters(SourceParameters.create(child));
}
- // get load-users resource (optional)
- child = conf.getChild("load-users", false);
- if (child != null) {
- this.loadUsersResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.loadUsersResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get load-roles resource (optional)
- child = conf.getChild("load-roles", false);
- if (child != null) {
- this.loadRolesResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.loadRolesResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get new user resource (optional)
- child = conf.getChild("new-user", false);
- if (child != null) {
- this.newUserResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.newUserResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get new role resource (optional)
- child = conf.getChild("new-role", false);
- if (child != null) {
- this.newRoleResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.newRoleResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get delete user resource (optional)
- child = conf.getChild("delete-user", false);
- if (child != null) {
- this.deleteUserResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.deleteUserResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get delete role resource (optional)
- child = conf.getChild("delete-role", false);
- if (child != null) {
- this.deleteRoleResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.deleteRoleResource.setResourceParameters(SourceParameters.create(child));
- }
-
- // get change user resource (optional)
- child = conf.getChild("change-user", false);
- if (child != null) {
- this.changeUserResource = new Resource(resolver,
child.getAttribute("uri"));
-
this.changeUserResource.setResourceParameters(SourceParameters.create(child));
- }
-
// And now: Applications
child = conf.getChild("applications", false);
if (child != null) {
@@ -307,35 +230,6 @@
public Resource getAuthenticationResource() {
return this.authenticationResource;
}
-
- /**
- * Get the load users resource
- */
- public Resource getLoadUsersResource() { return loadUsersResource; }
-
- /**
- * Get the load roles resource
- */
- public Resource getLoadRolesResource() { return loadRolesResource; }
-
- /**
- * Get the new user resource
- */
- public Resource getNewUserResource() { return this.newUserResource; }
-
- /**
- * Get the new role resource
- */
- public Resource getNewRoleResource() { return this.newRoleResource; }
-
- /** Get the delete user resource */
- public Resource getDeleteUserResource() { return this.deleteUserResource; }
-
- /** Get the delete role resource */
- public Resource getDeleteRoleResource() { return this.deleteRoleResource; }
-
- /** Get the change user resource */
- public Resource getChangeUserResource() { return this.changeUserResource; }
/** Get the save resource */
public Resource getSaveResource() { return this.saveResource; }
1.2 +759 -2
xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/generation/ConfigurationGenerator.java
Index: ConfigurationGenerator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/blocks/authentication-fw/java/org/apache/cocoon/webapps/authentication/generation/ConfigurationGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ConfigurationGenerator.java 27 Sep 2002 09:05:18 -0000 1.1
+++ ConfigurationGenerator.java 4 Oct 2002 12:00:38 -0000 1.2
@@ -52,12 +52,37 @@
import java.io.IOException;
+import java.util.Enumeration;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.DefaultHandler;
import org.apache.avalon.framework.component.ComponentException;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.environment.Response;
+import org.apache.cocoon.environment.Session;
+import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.generation.ComposerGenerator;
import org.apache.cocoon.webapps.authentication.components.AuthenticationManager;
+import org.apache.cocoon.xml.AbstractXMLConsumer;
+import org.apache.cocoon.xml.IncludeXMLConsumer;
+import org.apache.cocoon.xml.XMLConsumer;
+import org.apache.cocoon.xml.XMLUtils;
+import org.apache.cocoon.xml.dom.DOMUtil;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceParameters;
/**
* This is the authentication Configuration Generator.
@@ -68,6 +93,17 @@
public final class ConfigurationGenerator
extends ComposerGenerator {
+ /** Request parameter */
+ public static final String REQ_PARAMETER_STATE = "authstate";
+ public static final String REQ_PARAMETER_ROLE = "authrole";
+ public static final String REQ_PARAMETER_ID = "authid";
+ public static final String REQ_PARAMETER_USER = "authuser";
+
+ private static final String SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE =
"org.apache.cocoon.webapps.generation.ConfigurationGenerator.simple-role";
+
+ /**
+ * Generate the configuration
+ */
public void generate()
throws IOException, SAXException, ProcessingException {
@@ -77,10 +113,18 @@
authManager =
(AuthenticationManager)this.manager.lookup(AuthenticationManager.ROLE);
if (authManager.isAuthenticated() == true) {
- authManager.showConfiguration(this.xmlConsumer, this.source);
+ Configuration conf =
authManager.getModuleConfiguration("single-role-user-management");
+ if (conf == null) {
+ throw new ProcessingException("Module configuration
'single-role-user-management' for authentication user management generator not
found.");
+ }
+ UserManagementHandler handler = new UserManagementHandler(conf,
+
authManager.getApplicationName());
+ this.showConfiguration(this.xmlConsumer, this.source, handler,
authManager);
}
+ } catch (ConfigurationException ex) {
+ throw new ProcessingException("ConfigurationException: " + ex, ex);
} catch (ComponentException ex) {
- throw new ProcessingException("ComponentManagerException: " + ex, ex);
+ throw new ProcessingException("ComponentException: " + ex, ex);
} finally {
this.manager.release( authManager );
}
@@ -88,4 +132,717 @@
this.xmlConsumer.endDocument();
}
+
+ /**
+ * Show the configuration for the admin.
+ * If <code>src</code> is "admin" or null the admin configuration is shown.
+ * If <code>src</code> is "user" the configuration of the current user
+ * is shown.
+ */
+ public void showConfiguration(XMLConsumer consumer,
+ String src,
+ UserManagementHandler handler,
+ AuthenticationManager authManager)
+ throws ProcessingException, SAXException, IOException {
+ // synchronized
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN showConfiguration consumer=" + consumer +
", src="+src);
+ }
+
+ // get some important information
+ Request request = ObjectModelHelper.getRequest(this.objectModel);
+ Response response = ObjectModelHelper.getResponse(this.objectModel);
+ Session session = request.getSession();
+
+ boolean isAdmin = (src == null || src.equals("admin"));
+
+ // now start producing xml:
+ AttributesImpl attr = new AttributesImpl();
+ consumer.startElement("", "configuration", "configuration", attr);
+
+ // set the conf uri:
+ // This is a bug in the servlet 2.2 API!!!
+ // It does not contain the context: String uri =
HttpUtils.getRequestURL(this.request).toString();
+ // So: ABSOLUTELY USELESS
+ String uri = response.encodeURL(request.getRequestURI());
+ consumer.startElement("", "uri", "uri", attr);
+ consumer.characters(uri.toCharArray(), 0, uri.length());
+ consumer.endElement("", "uri", "uri");
+
+ if (isAdmin == true) {
+ // build the menue
+ consumer.startElement("", "menue", "menue", attr);
+
+ if (handler.getNewRoleResource() != null) {
+ consumer.startElement("", "addrole", "addrole", attr);
+ consumer.endElement("", "addrole", "addrole");
+ }
+ if (handler.getDeleteRoleResource() != null) {
+ consumer.startElement("", "delrole", "delrole", attr);
+ consumer.endElement("", "delrole", "delrole");
+ }
+
+ consumer.endElement("", "menue", "menue");
+ }
+
+
+ synchronized (session) {
+
+ String state = request.getParameter(REQ_PARAMETER_STATE);
+ if (state == null) {
+ state = (isAdmin == true ? "main" : "seluser");
+ }
+
+ if (state.equals("addrole") == true) {
+ String role = request.getParameter(REQ_PARAMETER_ROLE);
+ if (role != null && role.trim().length() > 0) {
+ SourceParameters pars = new SourceParameters();
+ // first include all request parameters
+ Enumeration requestParameters = request.getParameterNames();
+ String current;
+ while (requestParameters.hasMoreElements() == true) {
+ current = (String)requestParameters.nextElement();
+ pars.setParameter(current, request.getParameter(current));
+ }
+ this.addRole(role, pars, handler);
+ } else {
+ role = null;
+ }
+ session.removeAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE);
+ }
+
+ if (state.equals("delrole") == true) {
+ try {
+ String role = request.getParameter(REQ_PARAMETER_ROLE);
+ if (role != null) {
+ // first delete user
+ Document userDF = this.getUsers(role, null, handler);
+ NodeList users = null;
+ if (userDF != null) users = DOMUtil.selectNodeList(userDF,
"users/user");
+ if (users != null) {
+ for(int i = 0; i < users.getLength(); i++) {
+ this.deleteUser(role,
DOMUtil.getValueOf(users.item(i), "ID"), null, handler);
+ }
+ }
+ this.deleteRole(role, null, handler);
+ }
+ session.removeAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE);
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("TransformerException: " + local,
local);
+ }
+ }
+
+
+ if (state.equals("chguser") == true) {
+ String role;
+ String id;
+ String user;
+
+ if (isAdmin == false) {
+ SourceParameters pars = authManager.createParameters(null);
+ id = pars.getParameter("ID", null);
+ role = pars.getParameter("role", null);
+ user = "old";
+ } else {
+ role = request.getParameter(REQ_PARAMETER_ROLE);
+ id = request.getParameter(REQ_PARAMETER_ID);
+ user = request.getParameter(REQ_PARAMETER_USER);
+ }
+
+ boolean addingNewUserFailed = false;
+ if (role != null && id != null && user != null) {
+ if (user.equals("new") == true) {
+ SourceParameters pars = new SourceParameters();
+ // first include all request parameters
+ Enumeration requestParameters = request.getParameterNames();
+ String current;
+ while (requestParameters.hasMoreElements() == true) {
+ current = (String)requestParameters.nextElement();
+ pars.setParameter(current,
request.getParameter(current));
+ }
+ addingNewUserFailed = !this.addUser(role, id, pars,
handler);
+ if (addingNewUserFailed == false) {
+ consumer.startElement("", "addeduser", "addeduser",
attr);
+ consumer.characters(id.toCharArray(), 0, id.length());
+ consumer.endElement("", "addeduser", "addeduser");
+ }
+ } else {
+ String delete = request.getParameter("authdeluser");
+ if (delete != null && delete.equals("true") == true) {
+ this.deleteUser(role, id, null, handler);
+ } else {
+ SourceParameters pars = new SourceParameters();
+ // first include all request parameters
+ Enumeration requestParameters =
request.getParameterNames();
+ String current;
+ while (requestParameters.hasMoreElements() == true) {
+ current = (String)requestParameters.nextElement();
+ pars.setParameter(current,
request.getParameter(current));
+ }
+ this.changeUser(role, id, pars, handler);
+ }
+ }
+ session.removeAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE);
+ }
+ if (addingNewUserFailed == false) {
+ state = (isAdmin == true ? "adduser" : "seluser");
+ } else {
+ state = "erruser";
+ }
+ }
+
+ if (state.equals("seluser") == true) {
+ String role;
+ String id;
+
+ if (isAdmin == false) {
+ SourceParameters pars = authManager.createParameters(null);
+ id = pars.getParameter("ID", null);
+ role = pars.getParameter("role", null);
+ } else {
+ role = request.getParameter(REQ_PARAMETER_ROLE);
+ id = request.getParameter(REQ_PARAMETER_ID);
+ }
+ if (role != null && id != null) {
+ session.setAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE,
role);
+
+ // include users
+ Document userDF = this.getUsers(role, id, handler);
+ Element users = null;
+ try {
+ if (userDF != null) users =
(Element)DOMUtil.getSingleNode(userDF, "users/user");
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("TransformerException: " +
local, local);
+ }
+ consumer.startElement("", "uservalues", "uservalues", attr);
+ if (users != null && users.hasChildNodes() == true) {
+ NodeList childs = users.getChildNodes();
+ for(int i = 0; i < childs.getLength(); i++) {
+ if (childs.item(i).getNodeType() == Node.ELEMENT_NODE)
+ IncludeXMLConsumer.includeNode(childs.item(i),
consumer, consumer);
+ }
+ }
+ consumer.endElement("", "uservalues", "uservalues");
+ }
+ consumer.startElement("", "user", "user", attr);
+ consumer.characters("old".toCharArray(), 0, 3);
+ consumer.endElement("", "user", "user");
+ if (isAdmin == false) {
+ consumer.startElement("", "role", "role", attr);
+ consumer.characters(role.toCharArray(), 0, role.length());
+ consumer.endElement("", "role", "role");
+ }
+ }
+
+ if (state.equals("erruser") == true) {
+ String role;
+ String id;
+
+ if (isAdmin == false) {
+ SourceParameters pars = authManager.createParameters(null);
+ id = pars.getParameter("ID", null);
+ role = pars.getParameter("role", null);
+ } else {
+ role = request.getParameter(REQ_PARAMETER_ROLE);
+ id = request.getParameter(REQ_PARAMETER_ID);
+ }
+ if (role != null && id != null) {
+ session.setAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE,
role);
+
+ // include users
+ Document userDF = this.getUsers(role, id, handler);
+ Element users = null;
+ try {
+ if (userDF != null) users =
(Element)DOMUtil.getSingleNode(userDF, "users/user");
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("TransformerException: " +
local, local);
+ }
+ consumer.startElement("", "uservalues", "uservalues", attr);
+ if (users != null && users.hasChildNodes() == true) {
+ NodeList childs = users.getChildNodes();
+ for(int i = 0; i < childs.getLength(); i++) {
+ if (childs.item(i).getNodeType() == Node.ELEMENT_NODE)
+ IncludeXMLConsumer.includeNode(childs.item(i),
consumer, consumer);
+ }
+ }
+ consumer.endElement("", "uservalues", "uservalues");
+ }
+ consumer.startElement("", "user", "user", attr);
+ consumer.characters("error".toCharArray(), 0, 5);
+ consumer.endElement("", "user", "user");
+ if (isAdmin == false) {
+ consumer.startElement("", "role", "role", attr);
+ consumer.characters(role.toCharArray(), 0, role.length());
+ consumer.endElement("", "role", "role");
+ }
+ }
+
+ if (state.equals("adduser") == true) {
+ consumer.startElement("", "user", "user", attr);
+ consumer.characters("new".toCharArray(), 0, 3);
+ consumer.endElement("", "user", "user");
+ }
+
+ if (state.equals("selrole") == true) {
+ String role = request.getParameter(REQ_PARAMETER_ROLE);
+ session.setAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE, role);
+ // include users
+ Document userDF = this.getUsers(role, null, handler);
+ Node users = null;
+ try {
+ if (userDF != null) users = DOMUtil.getSingleNode(userDF,
"users");
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("TransformerException: " + local,
local);
+ }
+ IncludeXMLConsumer.includeNode(users, consumer, consumer);
+ }
+
+ if (isAdmin == true) {
+ // include roles
+ Document rolesDF = this.getRoles(handler);
+ Node roles = null;
+ try {
+ if (rolesDF != null) roles = DOMUtil.getSingleNode(rolesDF,
"roles");
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("TransformerException: " + local,
local);
+ }
+ IncludeXMLConsumer.includeNode(roles, consumer, consumer);
+
+ // include selected role
+ String role =
(String)session.getAttribute(SESSION_CONTEXT_ATTRIBUTE_ADMIN_ROLE);
+ if (role != null) {
+ consumer.startElement("", "role", "role", attr);
+ consumer.characters(role.toCharArray(), 0, role.length());
+ consumer.endElement("", "role", "role");
+ }
+ }
+ } // end synchronized(context)
+
+ consumer.endElement("", "configuration", "configuration");
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END showConfiguration");
+ }
+ }
+
+ /**
+ * Get all users in a document fragment with the following children:
+ * <users>
+ * <user>
+ * <ID>...</ID>
+ * <role>...</role> <!-- optional -->
+ * <data>
+ * ...
+ * </data>
+ * </user>
+ * ....
+ * </users>
+ * The document fragment might contain further nodes at the root!
+ * If <code>role</code> is <code>null</code> all users are fetched,
+ * otherwise only the users for this role.
+ * If also ID is not null only the single user is fetched.
+ */
+ public Document getUsers(String role, String ID, UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN getUsers role="+role+", ID="+ID);
+ }
+ Document frag = null;
+
+ if (handler.getLoadUsersResource() != null) {
+ final String loadUsersResource = handler.getLoadUsersResource();
+ final SourceParameters loadParameters =
handler.getLoadUsersResourceParameters();
+ SourceParameters parameters = (loadParameters == null) ? new
SourceParameters()
+ :
(SourceParameters)loadParameters;
+ if (handler.getApplicationName() != null) {
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ }
+ if (ID != null) {
+ parameters.setSingleParameterValue("type", "user");
+ parameters.setSingleParameterValue("ID", ID);
+ } else {
+ parameters.setSingleParameterValue("type", "users");
+ }
+ if (role != null) parameters.setSingleParameterValue("role", role);
+ frag = this.loadResource(loadUsersResource, parameters);
+
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END getUsers fragment="+(frag == null ? "null"
: XMLUtils.serializeNodeToXML(frag)));
+ }
+ return frag;
+ }
+
+ /**
+ * Get all roles in a document fragment with the following children:
+ * <roles>
+ * <role>...</role>
+ * ....
+ * </roles>
+ * The document fragment might contain further nodes at the root!
+ */
+ public Document getRoles(UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN getRoles");
+ }
+ Document frag = null;
+
+ if (handler.getLoadRolesResource() != null) {
+ final String loadRolesResource = handler.getLoadRolesResource();
+ final SourceParameters loadParameters =
handler.getLoadRolesResourceParameters();
+ SourceParameters parameters = (loadParameters == null) ? new
SourceParameters()
+ :
(SourceParameters)loadParameters.clone();
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "roles");
+ frag = this.loadResource(loadRolesResource, parameters);
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END getRoles fragment="+frag);
+ }
+ return frag;
+ }
+
+ /**
+ * Add a role
+ */
+ private void addRole(String name, SourceParameters parameters,
UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN addRole role="+name+",
parameters="+parameters);
+ }
+ if (handler.getNewRoleResource() != null) {
+ final String newRoleResource = handler.getNewRoleResource();
+ final SourceParameters handlerPars =
handler.getNewRoleResourceParameters();
+ if (parameters == null) parameters = new SourceParameters();
+ parameters.add(handlerPars);
+
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "role");
+ parameters.setSingleParameterValue("role", name);
+
+ this.invokeResource(newRoleResource, parameters);
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END addRole");
+ }
+ }
+
+ /**
+ * Add a user.
+ * @return If a user with ID already exists <code>false</code> is returned.
+ */
+ public boolean addUser(String role, String ID, SourceParameters parameters,
UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN addUser role="+role+", ID="+ID+",
parameters="+parameters);
+ }
+ boolean result = false;
+
+ if (handler.getNewUserResource() != null
+ && ID != null
+ && ID.trim().length() > 0) {
+ // first test if a user with this ID already exists
+ Document user = this.getUsers(null, null, handler);
+ Node node = null;
+ if (user != null) {
+ try {
+ node = DOMUtil.getSingleNode(user,
"users/user/ID[text()='"+ID+"']");
+ } catch (javax.xml.transform.TransformerException local) {
+ throw new ProcessingException("Transformer exception: " +
local, local);
+ }
+ }
+ if (user == null || node == null) {
+ final String newUserResource = handler.getNewUserResource();
+ final SourceParameters newUsersPars =
handler.getNewUserResourceParameters();
+ if (parameters == null) parameters = new SourceParameters();
+ parameters.add(newUsersPars);
+
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "user");
+ parameters.setSingleParameterValue("role", role);
+ parameters.setSingleParameterValue("ID", ID);
+
+ this.invokeResource(newUserResource, parameters);
+ result = true;
+ }
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END addUser success="+result);
+ }
+ return result;
+ }
+
+ /**
+ * Delete a role
+ */
+ private void deleteRole(String name, SourceParameters parameters,
UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN deleteRole role="+name+",
parameters="+parameters);
+ }
+ if (handler.getDeleteRoleResource() != null) {
+ final String deleteRoleResource = handler.getDeleteRoleResource();
+ final SourceParameters handlerPars =
handler.getDeleteRoleResourceParameters();
+ if (parameters == null) parameters = new SourceParameters();
+ parameters.add(handlerPars);
+
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "role");
+ parameters.setSingleParameterValue("role", name);
+
+ this.invokeResource(deleteRoleResource, parameters);
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END deleteRole");
+ }
+ }
+
+ /**
+ * Delete a user
+ */
+ private void deleteUser(String role, String name, SourceParameters parameters,
UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN deleteUser role="+role+", ID="+name+",
parameters="+parameters);
+ }
+ if (handler.getDeleteUserResource() != null) {
+ final String deleteUserResource = handler.getDeleteUserResource();
+ final SourceParameters handlerPars =
handler.getDeleteUserResourceParameters();
+ if (parameters == null) parameters = new SourceParameters();
+ parameters.add(handlerPars);
+
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "user");
+ parameters.setSingleParameterValue("role", role);
+ parameters.setSingleParameterValue("ID", name);
+
+ this.invokeResource(deleteUserResource, parameters);
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END deleteUser");
+ }
+ }
+
+ /**
+ * Change a user
+ */
+ private void changeUser(String role, String name, SourceParameters parameters,
UserManagementHandler handler)
+ throws IOException, ProcessingException, SAXException {
+ // calling method is syned
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("BEGIN changeUser role="+role+", ID="+name+",
parameters="+parameters);
+ }
+ if (handler.getChangeUserResource() != null) {
+ final String changeUserResource = handler.getChangeUserResource();
+ final SourceParameters handlerPars =
handler.getChangeUserResourceParameters();
+ if (parameters == null) parameters = new SourceParameters();
+ parameters.add(handlerPars);
+
+ if (handler.getApplicationName() != null)
+ parameters.setSingleParameterValue("application",
handler.getApplicationName());
+ parameters.setSingleParameterValue("type", "user");
+ parameters.setSingleParameterValue("role", role);
+ parameters.setSingleParameterValue("ID", name);
+
+ this.invokeResource(changeUserResource, parameters);
+ }
+
+ if (this.getLogger().isDebugEnabled() == true) {
+ this.getLogger().debug("END changeUser");
+ }
+ }
+
+ /**
+ * Invoke resource
+ */
+ private void invokeResource(String resource,
+ SourceParameters parameters)
+ throws IOException, ProcessingException, SAXException {
+ Source source = null;
+ try {
+ source = SourceUtil.getSource(resource,
+ null,
+ parameters,
+ this.resolver,
+ this.objectModel);
+ this.resolver.toSAX(source, new DefaultHandler());
+ } catch (SourceException se) {
+ throw SourceUtil.handle(se);
+ } finally {
+ this.resolver.release(source);
+ }
+ }
+
+ /**
+ * Load XML resource
+ */
+ private Document loadResource(String resource,
+ SourceParameters parameters)
+ throws IOException, ProcessingException, SAXException {
+ Source source = null;
+ try {
+ source = SourceUtil.getSource(resource,
+ null,
+ parameters,
+ this.resolver,
+ this.objectModel);
+ return SourceUtil.toDOM(source, this.manager);
+ } catch (SourceException se) {
+ throw SourceUtil.handle(se);
+ } finally {
+ this.resolver.release(source);
+ }
+ }
+}
+
+final class UserManagementHandler {
+
+ /** The name of the current application */
+ private String applicationName;
+
+ /** The load-users resource */
+ private String loadUsersResource;
+ private SourceParameters loadUsersResourceParameters;
+
+ /** The load-roles resource */
+ private String loadRolesResource;
+ private SourceParameters loadRolesResourceParameters;
+
+ /** The new-user resource */
+ private String newUserResource;
+ private SourceParameters newUserResourceParameters;
+
+ /** The new-role resource */
+ private String newRoleResource;
+ private SourceParameters newRoleResourceParameters;
+
+ /** The delete-role resource */
+ private String deleteRoleResource;
+ private SourceParameters deleteRoleResourceParameters;
+
+ /** The delete-user resource */
+ private String deleteUserResource;
+ private SourceParameters deleteUserResourceParameters;
+
+ /** The change-user resource */
+ private String changeUserResource;
+ private SourceParameters changeUserResourceParameters;
+
+ /**
+ * Create a new handler object.
+ */
+ public UserManagementHandler(Configuration conf,
+ String appName)
+ throws ProcessingException, SAXException, IOException, ConfigurationException {
+ Configuration child;
+
+ this.applicationName = appName;
+
+ // get load-users resource (optional)
+ child = conf.getChild("load-users", false);
+ if (child != null) {
+ this.loadUsersResource = child.getAttribute("uri");
+ this.loadUsersResourceParameters = SourceParameters.create(child);
+ }
+
+ // get load-roles resource (optional)
+ child = conf.getChild("load-roles", false);
+ if (child != null) {
+ this.loadRolesResource = child.getAttribute("uri");
+ this.loadRolesResourceParameters = SourceParameters.create(child);
+ }
+
+ // get new user resource (optional)
+ child = conf.getChild("new-user", false);
+ if (child != null) {
+ this.newUserResource = child.getAttribute("uri");
+ this.newUserResourceParameters = SourceParameters.create(child);
+ }
+
+ // get new role resource (optional)
+ child = conf.getChild("new-role", false);
+ if (child != null) {
+ this.newRoleResource = child.getAttribute("uri");
+ this.newRoleResourceParameters = SourceParameters.create(child);
+ }
+
+ // get delete user resource (optional)
+ child = conf.getChild("delete-user", false);
+ if (child != null) {
+ this.deleteUserResource = child.getAttribute("uri");
+ this.deleteUserResourceParameters = SourceParameters.create(child);
+ }
+
+ // get delete role resource (optional)
+ child = conf.getChild("delete-role", false);
+ if (child != null) {
+ this.deleteRoleResource = child.getAttribute("uri");
+ this.deleteRoleResourceParameters = SourceParameters.create(child);
+ }
+
+ // get change user resource (optional)
+ child = conf.getChild("change-user", false);
+ if (child != null) {
+ this.changeUserResource = child.getAttribute("uri");
+ this.changeUserResourceParameters = SourceParameters.create(child);
+ }
+ }
+
+ /**
+ * Get the name of the current application
+ */
+ public String getApplicationName() { return this.applicationName; }
+
+ /**
+ * Get the load users resource
+ */
+ public String getLoadUsersResource() { return this.loadUsersResource; }
+ public SourceParameters getLoadUsersResourceParameters() { return
this.loadUsersResourceParameters; }
+
+ /**
+ * Get the load roles resource
+ */
+ public String getLoadRolesResource() { return this.loadRolesResource; }
+ public SourceParameters getLoadRolesResourceParameters() { return
this.loadRolesResourceParameters; }
+
+ /**
+ * Get the new user resource
+ */
+ public String getNewUserResource() { return this.newUserResource; }
+ public SourceParameters getNewUserResourceParameters() { return
this.newUserResourceParameters; }
+
+ /**
+ * Get the new role resource
+ */
+ public String getNewRoleResource() { return this.newRoleResource; }
+ public SourceParameters getNewRoleResourceParameters() { return
this.newRoleResourceParameters; }
+
+ /** Get the delete user resource */
+ public String getDeleteUserResource() { return this.deleteUserResource; }
+ public SourceParameters getDeleteUserResourceParameters() { return
this.deleteUserResourceParameters; }
+
+ /** Get the delete role resource */
+ public String getDeleteRoleResource() { return this.deleteRoleResource; }
+ public SourceParameters getDeleteRoleResourceParameters() { return
this.deleteRoleResourceParameters; }
+
+ /** Get the change user resource */
+ public String getChangeUserResource() { return this.changeUserResource; }
+ public SourceParameters getChangeUserResourceParameters() { return
this.changeUserResourceParameters; }
}
1.2 +13 -7 xml-cocoon2/src/blocks/portal-fw/samples/sitemap.xmap
Index: sitemap.xmap
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/blocks/portal-fw/samples/sitemap.xmap,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sitemap.xmap 27 Sep 2002 12:11:17 -0000 1.1
+++ sitemap.xmap 4 Oct 2002 12:00:38 -0000 1.2
@@ -23,13 +23,6 @@
<handler name="portalhandler">
<redirect-to uri="cocoon:/sunspotdemoportal"/>
<authentication uri="cocoon:raw:/sunrise-authuser"/>
- <load-users uri="cocoon:raw:/sunrise-loaduser"/>
- <load-roles uri="cocoon:raw:/sunrise-roles"/>
- <new-user uri="cocoon:raw:/sunrise-newuser"/>
- <new-role uri="cocoon:raw:/sunrise-newrole"/>
- <change-user uri="cocoon:raw:/sunrise-changeuser"/>
- <delete-role uri="cocoon:raw:/sunrise-delrole"/>
- <delete-user uri="cocoon:raw:/sunrise-deluser"/>
<applications>
<application loadondemand="true" name="sunspotdemo">
<configuration name="portal">
@@ -54,6 +47,15 @@
<user-status-save
uri="cocoon:raw:/sunspotdemoresource-saveuserstatus"/>
</profile>
</configuration>
+ <configuration name="single-role-user-management">
+ <load-users uri="cocoon:raw:/sunrise-loaduser"/>
+ <load-roles uri="cocoon:raw:/sunrise-roles"/>
+ <new-user uri="cocoon:raw:/sunrise-newuser"/>
+ <new-role uri="cocoon:raw:/sunrise-newrole"/>
+ <change-user uri="cocoon:raw:/sunrise-changeuser"/>
+ <delete-role uri="cocoon:raw:/sunrise-delrole"/>
+ <delete-user uri="cocoon:raw:/sunrise-deluser"/>
+ </configuration>
</application>
</applications>
</handler>
@@ -165,6 +167,7 @@
<map:match pattern="sunspotdemosunletconf-*">
<map:generate
src="resources/auth/sunletconfig-{1}.xml"/>
<map:transform type="session"/>
+ <map:transform type="cinclude"/>
<map:transform src="styles/sunletconf.xsl"/>
<map:serialize type="xml"/>
</map:match>
@@ -237,6 +240,7 @@
<map:match pattern="sunspotdemo-*">
<map:generate src="resources/auth/{1}.xml"/>
<map:transform type="session"/>
+ <map:transform type="cinclude"/>
<map:transform type="write-source"/>
<map:transform src="styles/TO-html.xsl"/>
<map:transform type="encodeURL"/>
@@ -262,6 +266,7 @@
<map:match pattern="sunrise-changeuser">
<map:generate src="resources/sunrise-changeuser.xml"/>
<map:transform type="session"/>
+ <map:transform type="cinclude"/>
<map:transform src="styles/changeuser.xsl"/>
<map:transform type="write-source"/>
<map:transform src="styles/portal.xsl"/>
@@ -271,6 +276,7 @@
<map:match pattern="sunrise*">
<map:generate src="resources/sunrise{1}.xml"/>
<map:transform type="session"/>
+ <map:transform type="cinclude"/>
<map:transform type="write-source"/>
<map:transform src="styles/portal.xsl"/>
<map:serialize type="xml"/>
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]