blob: 53fbbf3e058cd438d416268b24cecf31244e4e3a [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* 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 com.motorolamobility.studio.android.certmanager.ui.dialogs;
import java.security.cert.X509Certificate;
import org.bouncycastle.asn1.x500.RDN;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x500.style.BCStyle;
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import com.motorola.studio.android.common.log.StudioLogger;
import com.motorola.studio.android.common.utilities.EclipseUtils;
import com.motorolamobility.studio.android.certmanager.CertificateManagerActivator;
import com.motorolamobility.studio.android.certmanager.i18n.CertificateManagerNLS;
import com.motorolamobility.studio.android.certmanager.ui.composite.KeyPropertiesBlock;
import com.motorolamobility.studio.android.certmanager.ui.model.EntryNode;
/**
* Dialog to show certificate info.
*/
public class CertificateInfoDialog extends Dialog
{
private static final String HELP_ID = CertificateManagerActivator.PLUGIN_ID
+ ".certificate_info_dialog"; //$NON-NLS-1$
final private KeyPropertiesBlock block;
final private EntryNode entry;
public CertificateInfoDialog(Shell parentShell, KeyPropertiesBlock blk, EntryNode entry)
{
super(parentShell);
this.block = blk;
this.entry = entry;
}
@Override
protected Control createContents(Composite parent)
{
if (parent instanceof Shell)
{
((Shell) parent).setText(CertificateManagerNLS.CertificateInfoDialog_ShellTitle);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);
}
return super.createContents(parent);
}
@Override
protected void createButtonsForButtonBar(Composite parent)
{
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
}
@Override
protected Control createDialogArea(Composite parent)
{
Composite newComposite = (Composite) super.createDialogArea(parent);
X509Certificate cert = null;
try
{
cert = entry.getX509Certificate();
if (cert != null)
{
X500Name x500name = new JcaX509CertificateHolder(cert).getSubject();
RDN commonName =
x500name.getRDNs(BCStyle.CN).length >= 1 ? x500name.getRDNs(BCStyle.CN)[0]
: null;
RDN organization =
x500name.getRDNs(BCStyle.O).length >= 1 ? x500name.getRDNs(BCStyle.O)[0]
: null;
RDN organizationUnit =
x500name.getRDNs(BCStyle.OU).length >= 1 ? x500name.getRDNs(BCStyle.OU)[0]
: null;
RDN country =
x500name.getRDNs(BCStyle.C).length >= 1 ? x500name.getRDNs(BCStyle.C)[0]
: null;
RDN state =
x500name.getRDNs(BCStyle.ST).length >= 1 ? x500name.getRDNs(BCStyle.ST)[0]
: null;
RDN locality =
x500name.getRDNs(BCStyle.L).length >= 1 ? x500name.getRDNs(BCStyle.L)[0]
: null;
block.createInfoBlock(newComposite, entry.getAlias(), printCertInfo(commonName),
printCertInfo(organization), printCertInfo(organizationUnit),
printCertInfo(country), printCertInfo(state), printCertInfo(locality),
cert.getNotAfter(), cert.getNotBefore());
}
else
{
//not found Android certificate expected (X509Certificate)
EclipseUtils
.showErrorDialog(
CertificateManagerNLS.CertificateInfoDialog_UnknownCertificateKeypairType,
CertificateManagerNLS.CertificatePropertiesHandler_ErrorGettingCertificateOrKeypairProperties);
}
}
catch (Exception e)
{
EclipseUtils
.showErrorDialog(
CertificateManagerNLS.CertificatePropertiesHandler_ErrorGettingCertificateOrKeypairProperties,
e.getMessage());
StudioLogger
.error(CertificateInfoDialog.class,
CertificateManagerNLS.CertificatePropertiesHandler_ErrorGettingCertificateOrKeypairProperties,
e);
}
return newComposite;
}
private String printCertInfo(RDN certItem)
{
return certItem != null ? certItem.getFirst().getValue().toString()
: CertificateManagerNLS.CertificateInfoDialog_NotAvailableProperty;
}
}