Expand scope of X509CertificatePanel to also handle other certificate types. Actually removes some duplicated and some unnecessary code.

fix-message-formatting
Markus Kilås 11 years ago
parent 0d91f834c5
commit ba1c0157c5

@ -9,7 +9,6 @@
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.security.cert.*; import java.security.cert.*;
import java.util.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.*; import javax.swing.border.*;
@ -53,10 +52,9 @@ class VerifyCertificateDialogImpl
private static final int MAX_MSG_PANE_HEIGHT = 800; private static final int MAX_MSG_PANE_HEIGHT = 800;
/** /**
* The certificate to show. * The certificates to show.
*/ */
Certificate cert; Certificate[] certs;
java.util.List<X509Certificate> certs;
/** /**
* A text that describes why the verification failed. * A text that describes why the verification failed.
@ -113,16 +111,7 @@ public VerifyCertificateDialogImpl(Certificate[] certs,
R.getI18NString("service.gui.CERT_DIALOG_TITLE")); R.getI18NString("service.gui.CERT_DIALOG_TITLE"));
setModal(true); setModal(true);
this.certs = new ArrayList<X509Certificate>(); this.certs = certs;
for (Certificate certificate : certs)
{
if (certificate instanceof X509Certificate) {
this.certs.add((X509Certificate) certificate);
}
}
// for now shows only the first certificate from the chain for
// non X.509 certificates
this.cert = certs[0];
this.message = message; this.message = message;
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@ -239,33 +228,7 @@ private void actionShowCertificate()
certPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); certPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH); certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH);
Component certInfoPane = null; certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER);
if (!certs.isEmpty())
{
certInfoPane = new X509CertificatePanel(
certs.toArray(new X509Certificate[0]));
}
else
{
JTextArea textArea = new JTextArea();
textArea.setOpaque(false);
textArea.setEditable(false);
textArea.setText(cert.toString());
final JScrollPane certScroll = new JScrollPane(certInfoPane);
certScroll.setPreferredSize(new Dimension(300, 300));
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
certScroll.getVerticalScrollBar().setValue(0);
}
});
certInfoPane = certScroll;
}
certPanel.add(certInfoPane, BorderLayout.CENTER);
certButton.setText(R.getI18NString("service.gui.HIDE_CERT")); certButton.setText(R.getI18NString("service.gui.HIDE_CERT"));

@ -8,7 +8,6 @@
import java.awt.*; import java.awt.*;
import java.security.cert.*; import java.security.cert.*;
import java.util.*;
import javax.swing.*; import javax.swing.*;
import org.jitsi.service.resources.*; import org.jitsi.service.resources.*;
@ -123,41 +122,8 @@ private void init()
this.getContentPane().add(contentPane, BorderLayout.CENTER); this.getContentPane().add(contentPane, BorderLayout.CENTER);
Component certInfoPane; certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER);
if (certs[0] instanceof X509Certificate)
{
ArrayList x509s = new ArrayList<X509Certificate>();
for (Certificate c : certs)
{
if (c instanceof X509Certificate)
{
x509s.add(c);
}
}
certInfoPane = new X509CertificatePanel(
(X509Certificate[]) x509s.toArray(new X509Certificate[0]));
}
else
{
JTextArea textArea = new JTextArea();
textArea.setOpaque(false);
textArea.setEditable(false);
// for now shows only the first certificate from the chain
textArea.setText(certs[0].toString());
certInfoPane = textArea;
}
final JScrollPane certScroll = new JScrollPane(certInfoPane);
certScroll.setPreferredSize(new Dimension(300, 600));
certPanel.add(certScroll, BorderLayout.CENTER);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
certScroll.getVerticalScrollBar().setValue(0);
}
});
setPreferredSize(null); setPreferredSize(null);
pack(); pack();

@ -9,6 +9,7 @@
import java.awt.*; import java.awt.*;
import java.security.*; import java.security.*;
import java.security.cert.*; import java.security.cert.*;
import java.security.cert.Certificate;
import java.security.interfaces.*; import java.security.interfaces.*;
import java.util.*; import java.util.*;
@ -44,9 +45,9 @@ public class X509CertificatePanel
* *
* @param certificate <tt>X509Certificate</tt> object * @param certificate <tt>X509Certificate</tt> object
*/ */
public X509CertificatePanel(X509Certificate certificate) public X509CertificatePanel(Certificate certificate)
{ {
this(new X509Certificate[] this(new Certificate[]
{ {
certificate certificate
}); });
@ -57,7 +58,7 @@ public X509CertificatePanel(X509Certificate certificate)
* *
* @param certificates <tt>X509Certificate</tt> objects * @param certificates <tt>X509Certificate</tt> objects
*/ */
public X509CertificatePanel(X509Certificate[] certificates) public X509CertificatePanel(Certificate[] certificates)
{ {
setLayout(new BorderLayout(5, 5)); setLayout(new BorderLayout(5, 5));
@ -71,7 +72,7 @@ public X509CertificatePanel(X509Certificate[] certificates)
DefaultMutableTreeNode previous = top; DefaultMutableTreeNode previous = top;
for (int i = certificates.length - 1; i >= 0; i--) for (int i = certificates.length - 1; i >= 0; i--)
{ {
X509Certificate cert = certificates[i]; Certificate cert = certificates[i];
DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert); DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert);
previous.add(next); previous.add(next);
previous = next; previous = next;
@ -100,6 +101,17 @@ public Component getTreeCellRendererComponent(JTree tree,
component.setText( component.setText(
getSimplifiedName((X509Certificate) o)); getSimplifiedName((X509Certificate) o));
} }
else
{
// We don't know how to represent this certificate type,
// let's use the first 20 characters
String text = o.toString();
if (text.length() > 20)
{
text = text.substring(0, 20);
}
component.setText(text);
}
} }
return component; return component;
} }
@ -146,13 +158,42 @@ public void valueChanged(TreeSelectionEvent e)
add(certScroll, BorderLayout.CENTER); add(certScroll, BorderLayout.CENTER);
} }
private String toString(X509Certificate certificate) /**
* Creates a String representation of the given object.
* @param certificate to print
* @return the String representation
*/
private String toString(Object certificate)
{ {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("<html><body>\n");
if (certificate instanceof X509Certificate)
{
renderX509(sb, (X509Certificate) certificate);
}
else
{
sb.append("<pre>\n");
sb.append(certificate.toString());
sb.append("</pre>\n");
}
sb.append("</body></html>");
return sb.toString();
}
/**
* Appends an HTML representation of the given X509Certificate.
* @param sb StringBuilder to append to
* @param certificate to print
*/
private void renderX509(StringBuilder sb, X509Certificate certificate)
{
X500Principal issuer = certificate.getIssuerX500Principal(); X500Principal issuer = certificate.getIssuerX500Principal();
X500Principal subject = certificate.getSubjectX500Principal(); X500Principal subject = certificate.getSubjectX500Principal();
sb.append("<html><body><table cellspacing='1' cellpadding='1'>\n"); sb.append("<table cellspacing='1' cellpadding='1'>\n");
// subject // subject
addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")); addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO"));
@ -300,9 +341,7 @@ else if(certificate.getPublicKey().getAlgorithm().equals("DSA"))
getHex(certificate.getSignature()) getHex(certificate.getSignature())
})); }));
sb.append("</table></body></html>"); sb.append("</table>\n");
return sb.toString();
} }
/** /**
@ -448,11 +487,7 @@ private void valueChangedPerformed(TreeSelectionEvent e)
if (o instanceof DefaultMutableTreeNode) if (o instanceof DefaultMutableTreeNode)
{ {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) o; DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
if (node.getUserObject() instanceof X509Certificate) infoTextPane.setText(toString(node.getUserObject()));
{
infoTextPane.setText(
toString((X509Certificate) node.getUserObject()));
}
} }
} }
} }

Loading…
Cancel
Save