package com.redhat.rcm.version.util.http;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.net.ssl.X509TrustManager;
public class MultiTrustManager
implements X509TrustManager
{
private final X509TrustManager[] delegates;
public MultiTrustManager( final X509TrustManager... delegates )
{
this.delegates = delegates;
}
@Override
public void checkClientTrusted( final X509Certificate[] chain, final String authType )
throws CertificateException
{
for ( int i = 0; i < delegates.length; i++ )
{
final X509TrustManager tm = delegates[i];
try
{
tm.checkClientTrusted( chain, authType );
}
catch ( final CertificateException e )
{
if ( i + 1 >= delegates.length )
{
throw e;
}
}
}
}
@Override
public void checkServerTrusted( final X509Certificate[] chain, final String authType )
throws CertificateException
{
for ( int i = 0; i < delegates.length; i++ )
{
final X509TrustManager tm = delegates[i];
try
{
tm.checkServerTrusted( chain, authType );
}
catch ( final CertificateException e )
{
if ( i + 1 >= delegates.length )
{
throw e;
}
}
}
}
@Override
public X509Certificate[] getAcceptedIssuers()
{
final Set<X509Certificate> accepted = new LinkedHashSet<X509Certificate>();
for ( final X509TrustManager tm : delegates )
{
final X509Certificate[] certs = tm.getAcceptedIssuers();
if ( certs != null )
{
accepted.addAll( Arrays.asList( certs ) );
}
}
return accepted.toArray( new X509Certificate[] {} );
}
}