package eu.geclipse.ui.internal.preference; import java.net.URL; import java.security.cert.X509Certificate; import java.util.Hashtable; import java.util.Map.Entry; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Image; import eu.geclipse.core.security.ICertificateHandle; import eu.geclipse.core.security.ICertificateManager.CertTrust; import eu.geclipse.ui.internal.Activator; public class CertificateLabelProvider extends ColumnLabelProvider implements ITableLabelProvider { private static final String CERT_IMG = "icons/obj16/cert_obj.gif"; //$NON-NLS-1$ private static final String ORG_IMG = "icons/obj16/ca_obj.gif"; //$NON-NLS-1$ private static final String NEVER_TRUST_IMG = "icons/obj16/cert_trust_never_obj.gif"; //$NON-NLS-1$ private static final String SESSION_TRUST_IMG = "icons/obj16/cert_trust_session_obj.gif"; //$NON-NLS-1$ private static final String PERMANENT_TRUST_IMG = "icons/obj16/cert_trust_permanent_obj.gif"; //$NON-NLS-1$ private static final String NA_STRING = "N/A"; //$NON-NLS-1$ private static Hashtable< String, Image > images = new Hashtable< String, Image >(); public Image getColumnImage( final Object element, final int columnIndex ) { Image result = null; if ( columnIndex == 0 ) { if ( element instanceof Entry< ?, ? > ) { result = getCertImage( ORG_IMG ); } else if ( element instanceof ICertificateHandle ) { CertTrust trust = ( ( ICertificateHandle ) element ).getTrust(); if ( trust == CertTrust.Untrusted ) { result = getCertImage( NEVER_TRUST_IMG ); } else if ( trust == CertTrust.Trusted ) { result = getCertImage( SESSION_TRUST_IMG ); } else if ( trust == CertTrust.AlwaysTrusted ) { result = getCertImage( PERMANENT_TRUST_IMG ); } else { result = getCertImage( CERT_IMG ); } } } return result; } public String getColumnText( final Object element, final int columnIndex ) { String result = ""; //$NON-NLS-1$ if ( ( element instanceof Entry< ?, ? > ) && ( columnIndex == 0 ) ) { Object key = ( ( Entry< ?, ? > ) element ).getKey(); result = key.toString(); } else if ( element instanceof ICertificateHandle ) { ICertificateHandle c = ( ICertificateHandle ) element; switch ( columnIndex ) { case 0: result = CertificateContentProvider.getSubjectDN( c.getCertificate(), "CN" ); //$NON-NLS-1$ break; case 1: result = c.getTrust().toString(); break; case 2: result = c.getCertificate().getNotAfter().toString(); break; } } return result; } private static Image getCertImage( final String path ) { Image image = images.get( path ); if ( image == null ) { image = loadCertImage( path ); images.put( path, image ); } return image; } private static Image loadCertImage( final String path ) { URL url = Activator.getDefault().getBundle().getEntry( path ); ImageDescriptor descriptor = ImageDescriptor.createFromURL( url ); return descriptor.createImage(); } private static String getSubjectCommonName( final X509Certificate c ) { String result = NA_STRING; String[] parts = c.getSubjectX500Principal().getName().split( "[,/]" ); for ( String s : parts ) { if ( s.trim().toUpperCase().startsWith( "CN=" ) ) { result = s.trim().substring( 3 ); break; } } return result; } }