Move to a slightly better implementation...

This commit is contained in:
Eric J. Bowersox 2001-11-21 20:22:47 +00:00
parent 8fe7abdf60
commit 85518ca0d5
3 changed files with 92 additions and 12 deletions

View File

@ -32,6 +32,7 @@ import com.silverwrist.venice.htmlcheck.*;
import com.silverwrist.venice.htmlcheck.dict.*; import com.silverwrist.venice.htmlcheck.dict.*;
import com.silverwrist.venice.htmlcheck.filters.*; import com.silverwrist.venice.htmlcheck.filters.*;
import com.silverwrist.venice.security.*; import com.silverwrist.venice.security.*;
import com.silverwrist.venice.svc.*;
import com.silverwrist.venice.util.XMLLoader; import com.silverwrist.venice.util.XMLLoader;
public class VeniceEngineImpl implements VeniceEngine, EngineBackend public class VeniceEngineImpl implements VeniceEngine, EngineBackend
@ -666,14 +667,14 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
sect = loader.configGetSubSection(root_h,"security"); sect = loader.configGetSubSection(root_h,"security");
// Load the security monitors. // Load the security monitors.
HashMap known_monitors = new HashMap(); SecurityMonitorEnvironment sm_env = new SecurityMonitorEnvironment();
NodeList nl = sect.getChildNodes(); NodeList nl = sect.getChildNodes();
for (i=0; i<nl.getLength(); i++) for (i=0; i<nl.getLength(); i++)
{ // scan through and find security monitors to initialize { // scan through and find security monitors to initialize
Node n = nl.item(i); Node n = nl.item(i);
if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("security-definition"))) if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("security-definition")))
{ // load one of the initial security definitions { // load one of the initial security definitions
SecurityMonitor sm = new StaticSecurityMonitor((Element)n,known_monitors); SecurityMonitor sm = new StaticSecurityMonitor((Element)n,sm_env);
if (sm.getID().equals("Global")) if (sm.getID().equals("Global"))
global_security = sm; global_security = sm;
else if (sm.getID().equals("Community")) else if (sm.getID().equals("Community"))
@ -759,7 +760,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
// Now done with the sidebox config... // Now done with the sidebox config...
// Load the services config file. // Load the services config file.
subdoc = loader.loadConfigDocument(services_config); subdoc = loader.loadConfigDocument(services_config);
// TODO: following needs to use the known_monitors mapping // TODO: following needs to use the sm_env
scmgr = new ServiceControlManager(subdoc,global_security,community_security); scmgr = new ServiceControlManager(subdoc,global_security,community_security);
} // end try } // end try

View File

@ -23,6 +23,7 @@ import org.w3c.dom.*;
import com.silverwrist.util.DOMElementHelper; import com.silverwrist.util.DOMElementHelper;
import com.silverwrist.venice.except.AccessError; import com.silverwrist.venice.except.AccessError;
import com.silverwrist.venice.except.ConfigException; import com.silverwrist.venice.except.ConfigException;
import com.silverwrist.venice.svc.SecurityMonitorEnvironment;
/** /**
* A <CODE>SecurityMonitor</CODE> which is configured by means of XML data, supplied by means of a Venice * A <CODE>SecurityMonitor</CODE> which is configured by means of XML data, supplied by means of a Venice
@ -110,12 +111,12 @@ public class StaticSecurityMonitor implements SecurityMonitor
* *
* @param cfg The root element of the security monitor configuration, which must be a * @param cfg The root element of the security monitor configuration, which must be a
* <CODE>&lt;security-definition/&gt;</CODE> element. * <CODE>&lt;security-definition/&gt;</CODE> element.
* @param previous A mapping of all previously-known security monitors. This one will be added to * @param env A mapping of all previously-known security monitors. This one will be added to
* it on success. * it on success.
* @exception com.silverwrist.venice.except.ConfigException The XML configuration data was incorrect in * @exception com.silverwrist.venice.except.ConfigException The XML configuration data was incorrect in
* some fashion. * some fashion.
*/ */
public StaticSecurityMonitor(Element cfg, Map previous) throws ConfigException public StaticSecurityMonitor(Element cfg, SecurityMonitorEnvironment env) throws ConfigException
{ {
boolean set_root_monitor = false; boolean set_root_monitor = false;
@ -139,7 +140,7 @@ public class StaticSecurityMonitor implements SecurityMonitor
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
logger.debug("defining new StaticSecurityMonitor with id=" + id); logger.debug("defining new StaticSecurityMonitor with id=" + id);
if (previous.containsKey(id)) if (env.isMonitorDefined(id))
{ // the monitor with this ID has already been defined! { // the monitor with this ID has already been defined!
logger.fatal("security monitor with id=" + id + " is already defined!"); logger.fatal("security monitor with id=" + id + " is already defined!");
throw new ConfigException("security monitor id=" + id + " is already defined!"); throw new ConfigException("security monitor id=" + id + " is already defined!");
@ -149,7 +150,7 @@ public class StaticSecurityMonitor implements SecurityMonitor
if (root_h.hasAttribute("parent")) if (root_h.hasAttribute("parent"))
{ // find our parent { // find our parent
String parent_id = cfg.getAttribute("parent"); String parent_id = cfg.getAttribute("parent");
parent = (SecurityMonitor)(previous.get(parent_id)); parent = env.getMonitor(parent_id);
if (parent==null) if (parent==null)
{ // no parent! that's bogus! { // no parent! that's bogus!
logger.fatal("parent security monitor with id=" + parent_id + " does not exist!"); logger.fatal("parent security monitor with id=" + parent_id + " does not exist!");
@ -193,7 +194,7 @@ public class StaticSecurityMonitor implements SecurityMonitor
} // end if } // end if
else else
{ // this must be the root security monitor! { // this must be the root security monitor!
if (root_monitor!=null) if (env.isRootMonitorDefined())
{ // but we already have a root - can't be two roots! { // but we already have a root - can't be two roots!
logger.fatal("trying to define root security monitor but we already have one"); logger.fatal("trying to define root security monitor but we already have one");
throw new ConfigException("root security monitor is already defined!"); throw new ConfigException("root security monitor is already defined!");
@ -345,9 +346,7 @@ public class StaticSecurityMonitor implements SecurityMonitor
dynamic_permissions = Collections.EMPTY_SET; dynamic_permissions = Collections.EMPTY_SET;
// Finish up by adding ourselves to the known monitors list. // Finish up by adding ourselves to the known monitors list.
previous.put(id,this); env.storeMonitor(this,set_root_monitor);
if (set_root_monitor)
root_monitor = this;
} // end constructor } // end constructor

View File

@ -0,0 +1,80 @@
/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.svc;
import java.util.*;
import com.silverwrist.venice.security.SecurityMonitor;
public final class SecurityMonitorEnvironment
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private HashMap map = new HashMap();
private SecurityMonitor root = null;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
public SecurityMonitorEnvironment()
{ // do nothing
} // end constructor
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public final boolean isMonitorDefined(String id)
{
return map.containsKey(id);
} // end isMonitorDefined
public final boolean isRootMonitorDefined()
{
return (root!=null);
} // end isRootMonitorDefined
public final SecurityMonitor getMonitor(String id)
{
return (SecurityMonitor)(map.get(id));
} // end getMonitor
public final void storeMonitor(SecurityMonitor sm, boolean set_root)
{
if (map.put(sm.getID(),sm)!=null)
throw new RuntimeException("SecurityMonitorEnvironment: double monitor defininition!");
if (set_root)
{ // set the root monitor as well
if (root==null)
root = sm;
else
throw new RuntimeException("SecurityMonitorEnvironment: double root definition!");
} // end if
} // end storeMonitor
} // end class SecurityMonitorEnvironment