/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.italiangrid.voms.store;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.security.auth.x500.X500Principal;
/**
* The VOMS trust store takes care of parsing local trusted information (being
* certificates or LSC files) for known VOMS servers.
*
* @author Andrea Ceccanti
*
*/
public interface VOMSTrustStore {
/**
* Returns the locally trusted directories where VOMS trust information (being
* VOMS server certificates or LSC files) are searched for.
*
* @return a {@link List} of local paths
*/
public List<String> getLocalTrustedDirectories();
/**
* Returns the list of VOMS Attribute Authority certificates held in this
* {@link VOMSTrustStore}.
*
* @return the collection of VOMS Attribute Authority certificates held in
* this {@link VOMSTrustStore}, an empty list if no certificate was
* found.
*/
public List<X509Certificate> getLocalAACertificates();
/**
* Returns the VOMS Attribute Authority certificate held in this
* {@link VOMSTrustStore} whose subject matches the subject passed as
* argument.
*
* @param aaCertSubject
* a certificate subject
* @return the VOMS AA {@link X509Certificate} that matches the subject passed
* as argument or null if no matching certificate is found in this
* store
*/
public X509Certificate getAACertificateBySubject(X500Principal aaCertSubject);
/**
* Returns the LSC information held in this {@link VOMSTrustStore} for the vo
* and hostname passed as arguments.
*
* @param voName
* the name of the VO for which the LSC applies
* @param hostname
* the name of the host for which the LSC applies
* @return a {@link LSCInfo} object, or null if no LSC matching the arguments
* was found
*/
public LSCInfo getLSC(String voName, String hostname);
/**
* Returns all the LSC information held in this {@link VOMSTrustStore}. The
* returned {@link Map} is keyed by VO name.
*
* @return a possibly empty map {@link LSCInfo} objects
*/
public Map<String, Set<LSCInfo>> getAllLSCInfo();
/**
* Loads trust information from the sources configured for this trust store.
*/
public void loadTrustInformation();
/**
* Sets a {@link VOMSTrustStoreStatusListener} that is notified of events
* related to this VOMS trust store
*
* @param statusListener
* the status listener that will be notified
*/
public void setStatusListener(VOMSTrustStoreStatusListener statusListener);
}