001: /*
002: * <copyright>
003: *
004: * Copyright 2001-2004 Mobile Intelligence Corp
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026: package org.cougaar.community.manager;
027:
028: import org.cougaar.community.init.CommunityInitializerService;
029: import org.cougaar.community.init.CommunityConfig;
030: import org.cougaar.community.init.EntityConfig;
031:
032: import java.util.Collection;
033: import java.util.Set;
034: import java.util.Iterator;
035: import java.util.HashSet;
036:
037: import org.cougaar.core.component.ServiceBroker;
038:
039: /**
040: * Performs access control for community manager. All authorization requests
041: * are delegated to the CommunityProtectionService if available. If the
042: * CommunityProtectionService is not available the requests are delegated to
043: * the "authorizeUsingDefaultPolicy" method. The base implementation of this
044: * method approves all requests. Alternate implementations should exend this
045: * class and override the authorizeUsingDefaultPolicy method. The use of an
046: * alternate implementation is specified by defining the new class in the
047: * "org.cougaar.community.access.manager.classname" system property.
048: */
049: public class SimpleCommunityAccessManager extends
050: CommunityAccessManager {
051:
052: // The following fields are used for the default authorization policy
053: private Set knownEntities; // List of predefined agents/communities in society
054:
055: public SimpleCommunityAccessManager(ServiceBroker sb) {
056: super (sb);
057: }
058:
059: /**
060: * Authorization method that is used if the CommunityProtectionService is
061: * not available.
062: * @param communityName String Name of affected community
063: * @param requester String Name of requesting agent
064: * @param operation int Requested operation (refer to
065: * org.cougaar.core.service.CommunityServiceConstants
066: * for valid op codes)
067: * @param target String Name of affected community member or null if
068: * target is community
069: * @return boolean Return true if request is authorized by
070: * current policy
071: */
072: protected boolean authorizeUsingDefaultPolicy(String communityName,
073: String requester, int operation, String target) {
074: // Simply verify that requester was included in predefined
075: // community configuration defined in communities.xml
076: return getKnownEntities().contains(requester);
077: }
078:
079: /**
080: * Get entity names from communities.xml file on config path.
081: * @return Set of predefined agent/community names
082: */
083: protected Set getKnownEntities() {
084: if (knownEntities == null) {
085: knownEntities = new HashSet();
086: CommunityInitializerService cis = (CommunityInitializerService) serviceBroker
087: .getService(this ,
088: CommunityInitializerService.class, null);
089: try {
090: Collection communityConfigs = cis
091: .getCommunityDescriptions(null);
092: for (Iterator it = communityConfigs.iterator(); it
093: .hasNext();) {
094: CommunityConfig cc = (CommunityConfig) it.next();
095: knownEntities.add(cc.getName());
096: for (Iterator it1 = cc.getEntities().iterator(); it1
097: .hasNext();) {
098: EntityConfig ec = (EntityConfig) it1.next();
099: knownEntities.add(ec.getName());
100: }
101: }
102: } catch (Exception e) {
103: if (logger.isWarnEnabled()) {
104: logger
105: .warn("Unable to obtain community information for agent "
106: + agentName);
107: }
108: } finally {
109: serviceBroker.releaseService(this ,
110: CommunityInitializerService.class, cis);
111: }
112: }
113: return knownEntities;
114: }
115: }
|