Move to a slightly better implementation...
This commit is contained in:
parent
8fe7abdf60
commit
85518ca0d5
|
@ -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
|
||||||
|
|
|
@ -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><security-definition/></CODE> element.
|
* <CODE><security-definition/></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
|
||||||
|
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue
Block a user