Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 4252 invoked by uid 500); 4 Oct 2002 15:26:09 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 66777 invoked by uid 500); 4 Oct 2002 12:00:38 -0000 Delivered-To: apmail-xml-cocoon2-cvs@apache.org Date: 4 Oct 2002 12:00:38 -0000 Message-ID: <20021004120038.81567.qmail@icarus.apache.org> From: cziegeler@apache.org To: xml-cocoon2-cvs@apache.org Subject: cvs commit: xml-cocoon2/src/blocks/portal-fw/samples sitemap.xmap X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N 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: + * + * + * ... + * ... + * + * ... + * + * + * .... + * + * The document fragment might contain further nodes at the root! + * If role is null 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: + * + * ... + * .... + * + * 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 src is "admin" or null the admin configuration is shown. - * If src 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: - * - * - * ... - * ... - * - * ... - * - * - * .... - * - * The document fragment might contain further nodes at the root! - * If role is null 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: - * - * ... - * .... - * - * 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 false 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 src is "admin" or null the admin configuration is shown. + * If src 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: + * + * + * ... + * ... + * + * ... + * + * + * .... + * + * The document fragment might contain further nodes at the root! + * If role is null 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: + * + * ... + * .... + * + * 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 false 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 @@ - - - - - - - @@ -54,6 +47,15 @@ + + + + + + + + + @@ -165,6 +167,7 @@ + @@ -237,6 +240,7 @@ + @@ -262,6 +266,7 @@ + @@ -271,6 +276,7 @@ + ---------------------------------------------------------------------- In case of troubles, e-mail: webmaster@xml.apache.org To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org For additional commands, e-mail: cocoon-cvs-help@xml.apache.org