blob: bc25c2cc09719edaf6b2ae8d21024c536e4f5c5a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, Jay Rosenthal and others
*
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Jay Rosenthal - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.provisional.security.ui;
import java.security.cert.X509Certificate;
import java.text.DateFormat;
import org.eclipse.equinox.internal.security.ui.Activator;
import org.eclipse.equinox.internal.security.ui.SecurityUIMsg;
import org.eclipse.equinox.internal.security.ui.wizard.CertificateViewer;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class X509CertificateViewDialog extends TitleAreaDialog {
private final static String titleImageName = "/titleAreaCert.gif"; //$NON-NLS-1$
private X509Certificate theCert;
private static final DateFormat _df = DateFormat.getDateInstance(DateFormat.LONG);
private X500PrincipalHelper nameHelper = new X500PrincipalHelper();
// We use the "bannerFont" for our bold font
private static Font boldFont = JFaceResources.getBannerFont();
private Image titleImage;
public X509CertificateViewDialog(Shell parentShell, X509Certificate cert) {
super(parentShell);
this.theCert = cert;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(SecurityUIMsg.CERTVIEW_SHELL_TITLE);
}
protected Control createContents(Composite parent) {
return super.createContents(parent);
}
protected Control createDialogArea(Composite parent) {
nameHelper.setPrincipal(theCert.getSubjectX500Principal());
setTitle((nameHelper.getCN() != null ? nameHelper.getCN() : nameHelper.getOU()));
titleImage = Activator.getImageDescriptor(titleImageName).createImage();
if (titleImage != null)
setTitleImage(titleImage);
Composite composite = (Composite) super.createDialogArea(parent);
TabFolder tabFolder = new TabFolder(composite, SWT.BORDER);
GridData bdata = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
tabFolder.setLayoutData(bdata);
createBasicTab(tabFolder);
createAdvancedTab(tabFolder);
return composite;
}
private void createBasicTab(TabFolder tabFolder) {
String displayName = null;
int labelIndent = 10;
int dataIdent = 10;
TabItem basicTab = new TabItem(tabFolder, SWT.NULL);
basicTab.setText(SecurityUIMsg.CERTVIEW_LABEL_BASIC);
Composite basicTabComposite = new Composite(tabFolder, SWT.NONE);
GridLayout tabLayout = new GridLayout();
tabLayout.numColumns = 2;
basicTabComposite.setLayout(tabLayout);
Label issueToLabel = new Label(basicTabComposite, SWT.NONE);
issueToLabel.setText(SecurityUIMsg.CERTPROP_X509_ISSUED_TO);
issueToLabel.setFont(boldFont);
configureLayout(issueToLabel, 2, 0, 0, 0);
// Display the RDNs of the Subject
nameHelper.setPrincipal(theCert.getSubjectX500Principal());
Label CNLabel = new Label(basicTabComposite, SWT.NONE);
CNLabel.setText(SecurityUIMsg.X500_LABEL_CN);
configureLayout(CNLabel, 0, 0, labelIndent, 0);
Label subjectCN = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getCN();
subjectCN.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(subjectCN, 0, 0, dataIdent, 0);
Label OLabel = new Label(basicTabComposite, SWT.NONE);
OLabel.setText(SecurityUIMsg.X500_LABEL_O);
configureLayout(OLabel, 0, 0, labelIndent, 0);
Label subjectO = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getO();
subjectO.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(subjectO, 0, 0, dataIdent, 0);
Label OULabel = new Label(basicTabComposite, SWT.NONE);
OULabel.setText(SecurityUIMsg.X500_LABEL_OU);
configureLayout(OULabel, 0, 0, labelIndent, 0);
Label subjectOU = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getOU();
subjectOU.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(subjectOU, 0, 0, dataIdent, 0);
Label issueByLabel = new Label(basicTabComposite, SWT.NONE);
issueByLabel.setText(SecurityUIMsg.CERTPROP_X509_ISSUED_BY);
configureLayout(issueByLabel, 2, 0, 0, 0);
issueByLabel.setFont(boldFont);
// Display the RDNs of the Issuer
nameHelper.setPrincipal(theCert.getIssuerX500Principal());
Label CNLabel2 = new Label(basicTabComposite, SWT.NONE);
CNLabel2.setText(SecurityUIMsg.X500_LABEL_CN);
configureLayout(CNLabel2, 0, 0, labelIndent, 0);
Label issuerCN = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getCN();
issuerCN.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(issuerCN, 0, 0, dataIdent, 0);
Label OLabel2 = new Label(basicTabComposite, SWT.NONE);
OLabel2.setText(SecurityUIMsg.X500_LABEL_O);
configureLayout(OLabel2, 0, 0, labelIndent, 0);
Label issuerO = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getO();
issuerO.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(issuerO, 0, 0, dataIdent, 0);
Label OULabel2 = new Label(basicTabComposite, SWT.NONE);
OULabel2.setText(SecurityUIMsg.X500_LABEL_OU);
configureLayout(OULabel2, 0, 0, labelIndent, 0);
Label issuerOU = new Label(basicTabComposite, SWT.NONE);
displayName = nameHelper.getOU();
issuerOU.setText((displayName != null ? displayName : SecurityUIMsg.CERTVAL_UNDEFINED));
configureLayout(issuerOU, 0, 0, dataIdent, 0);
Label datesLabel = new Label(basicTabComposite, SWT.NONE);
datesLabel.setText(SecurityUIMsg.CERTVIEW_LABEL_VALIDITY_DATES);
configureLayout(datesLabel, 2, 0, 0, 0);
datesLabel.setFont(boldFont);
Label validFrom = new Label(basicTabComposite, SWT.NONE);
validFrom.setText(SecurityUIMsg.CERTPROP_X509_VALID_FROM);
configureLayout(validFrom, 0, 0, labelIndent, 0);
Label fromDate = new Label(basicTabComposite, SWT.NONE);
fromDate.setText(_df.format(theCert.getNotBefore()));
configureLayout(fromDate, 0, 0, dataIdent, 0);
Label validTo = new Label(basicTabComposite, SWT.NONE);
validTo.setText(SecurityUIMsg.CERTPROP_X509_VALID_TO);
configureLayout(validTo, 0, 0, labelIndent, 0);
Label toDate = new Label(basicTabComposite, SWT.NONE);
toDate.setText(_df.format(theCert.getNotAfter()));
configureLayout(toDate, 0, 0, dataIdent, 0);
basicTab.setControl(basicTabComposite);
}
protected static void configureLayout(Control c, int horizontalSpan, int verticalSpan, int horizontalIndent, int vertIndent) {
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER);
gd.horizontalSpan = horizontalSpan;
gd.verticalSpan = verticalSpan;
gd.horizontalIndent = horizontalIndent;
gd.verticalIndent = vertIndent;
c.setLayoutData(gd);
}
private void createAdvancedTab(final TabFolder tabFolder) {
TabItem advancedTab = new TabItem(tabFolder, SWT.NULL);
advancedTab.setText(SecurityUIMsg.CERTVIEW_LABEL_DETAILS);
Composite advTabComposite = new Composite(tabFolder, SWT.NONE);
advTabComposite.setLayout(new FillLayout(SWT.VERTICAL));
CertificateViewer certViewer = new CertificateViewer(advTabComposite);
certViewer.setCertificate(theCert);
advancedTab.setControl(advTabComposite);
}
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(newShellStyle | SWT.RESIZE | SWT.DIALOG_TRIM);
}
protected void createButtonsForButtonBar(Composite parent) {
// The default has only a "Close" button, but it returns the CANCEL Id
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CLOSE_LABEL, true);
}
public boolean close() {
if (titleImage != null) {
titleImage.dispose();
}
return super.close();
}
}