1 package org.eparapher.rcp.wizards;
2
3 import java.security.cert.X509Certificate;
4
5 import org.eclipse.jface.action.Action;
6 import org.eclipse.jface.viewers.DoubleClickEvent;
7 import org.eclipse.jface.viewers.IDoubleClickListener;
8 import org.eclipse.jface.viewers.ISelection;
9 import org.eclipse.jface.viewers.IStructuredContentProvider;
10 import org.eclipse.jface.viewers.IStructuredSelection;
11 import org.eclipse.jface.viewers.ITableLabelProvider;
12 import org.eclipse.jface.viewers.LabelProvider;
13 import org.eclipse.jface.viewers.TableViewer;
14 import org.eclipse.jface.viewers.Viewer;
15 import org.eclipse.jface.viewers.ViewerSorter;
16 import org.eclipse.jface.wizard.IWizardPage;
17 import org.eclipse.jface.wizard.WizardPage;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.graphics.Image;
20 import org.eclipse.swt.layout.FillLayout;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Table;
23 import org.eclipse.swt.widgets.TableColumn;
24 import org.eclipse.swt.widgets.TableItem;
25 import org.eparapher.core.crypto.EPKeystoreManager;
26 import org.eparapher.core.crypto.KeystoreEntry;
27 import org.eparapher.core.crypto.cert.CertificateInfo;
28 import org.eparapher.core.crypto.keystore.IUserKeystore;
29 import org.eparapher.rcp.dialog.CertificateViewerDialog;
30 import org.eparapher.rcp.tools.GUIIcons;
31 import org.eparapher.rcp.tools.eParapherTools;
32 import org.eparapher.core.signature.DefaultSignatureParameters;
33
34 public abstract class KeysAndCertificateSelectionPage extends WizardPage implements
35 IWizardPage {
36
37 private TableViewer viewer;
38
39 @SuppressWarnings("unused")
40 private DoubleClickAction dca;
41
42 private KeystoreEntry[] certlist;
43
44 private int defaultindex;
45 private String defaultAlias;
46
47 private Composite container;
48
49 public KeysAndCertificateSelectionPage() {
50 super("Keys And Certificate Selection");
51 setDescription("Please select your signing certificate.");
52 setImageDescriptor( GUIIcons.WIZARD_SIGN_IMG2 );
53 defaultAlias = EPKeystoreManager.getInstance().getUserkeystore().getDefaultAlias();
54 }
55
56 public KeysAndCertificateSelectionPage(DefaultSignatureParameters dsp) {
57 this();
58 defaultAlias=dsp.getSignatureAlias();
59 }
60
61 public void createControl(Composite parent) {
62 container = new Composite(parent, SWT.NULL);
63 FillLayout layout = new FillLayout();
64
65 container.setLayout(layout);
66
67 setControl(container);
68
69
70 final Table table = new Table(container, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION );
71 table.setHeaderVisible(true);
72 table.setLinesVisible(false);
73
74
75 String[] column = new String[] {" ","Alias","Subject","Validity","Key"};
76
77 for (int i = 0; i < column.length; i++) {
78 TableColumn c = new TableColumn(table, SWT.LEFT);
79 c.setText(column[i]);
80 switch (i) {
81 case 0:
82 c.setWidth(25);
83 break;
84 case 3:
85 c.setWidth(180);
86 break;
87 default:
88 c.setWidth(120);
89 break;
90 }
91 }
92
93
94
95
96
97
98
99
100
101
102
103
104
105 viewer = new TableViewer(table);
106 viewer.setContentProvider(new ViewContentProvider());
107 viewer.setLabelProvider(new ViewLabelProvider());
108 viewer.setComparator(new NameSorter());
109 viewer.setInput(getContainer());
110
111
112 for (int i = 0; i < viewer.getTable().getItemCount(); i++) {
113 Object data = viewer.getTable().getItem(i).getData();
114 if (data instanceof KeystoreEntry) {
115 KeystoreEntry itemke = (KeystoreEntry) data;
116 if (itemke.getKeystoreAlias().equals(defaultAlias))
117 defaultindex = i;
118 }
119 }
120 viewer.getTable().setSelection(defaultindex);
121
122
123 dca = new DoubleClickAction();
124
125 setPageComplete(true);
126 }
127
128 public String getSelectedSignatureCertificateAlias() {
129 ISelection selection = viewer.getSelection();
130 KeystoreEntry obj = (KeystoreEntry) ((IStructuredSelection)selection).getFirstElement();
131 return obj.getKeystoreAlias();
132 }
133
134
135 class ViewContentProvider implements IStructuredContentProvider {
136 public void inputChanged(Viewer v, Object oldInput, Object newInput) {
137 }
138 public void dispose() {
139 }
140 public Object[] getElements(Object parent) {
141 certlist = new KeystoreEntry[0];
142 IUserKeystore userKeystore = EPKeystoreManager.getInstance().getUserkeystore();
143 if ( userKeystore == null ) {
144 eParapherTools.errorMessage("Failed to initialize your personal keystore.\r\nPlease change it in configuration.");
145 } else if ( userKeystore.loadKeyStore() ) {
146 certlist = userKeystore.getKeystoreEntries();
147
148 }
149 return certlist;
150 }
151 }
152 class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
153 public String getColumnText(Object obj, int index) {
154
155 if (obj==null)
156 return "";
157
158 KeystoreEntry certchain = (KeystoreEntry) obj;
159 X509Certificate userCert = null;
160 if (certchain.getCertificateChain() == null) {
161 if (index==4)
162 return "Secret Key";
163 if (index==7)
164 return certchain.getKeystoreAlias();
165 return "";
166 }
167 userCert = certchain.getCertificateChain()[0];
168
169 switch (index) {
170 case 0: return "";
171 case 1: return certchain.getKeystoreAlias();
172 case 2: return CertificateInfo.getSubjectAsShortText(userCert);
173 case 3: return CertificateInfo.getNotBeforeAsText( userCert ) + " to " + CertificateInfo.getNotAfterAsText( userCert );
174 case 4: return CertificateInfo.getPublicKeyInfo( userCert.getPublicKey() );
175 default: break;
176 }
177 return "";
178 }
179 public Image getColumnImage(Object obj, int index) {
180 if (index == 0)
181 return getImage(obj);
182 return null;
183 }
184
185 public Image getImage(Object obj) {
186 KeystoreEntry certchain = (KeystoreEntry) obj;
187 if (certchain.getKeystoreAlias().equals(defaultAlias)) {
188 return GUIIcons.CERTIFICATE_SEL_ICON_IMAGE;
189 } else if ( certchain.getCertificateChain()==null || certchain.getCertificateChain().length==0 )
190 return GUIIcons.PRIVATE_KEY_ICON_IMAGE;
191 else
192 return GUIIcons.CERTIFICATE_ICON_IMAGE;
193 }
194 }
195 class NameSorter extends ViewerSorter {
196 }
197 class DoubleClickAction extends Action {
198 public DoubleClickAction() {
199 viewer.addDoubleClickListener(new IDoubleClickListener() {
200 public void doubleClick(DoubleClickEvent event) {
201 run();
202 }
203 });
204 }
205 public void run() {
206 ISelection selection = viewer.getSelection();
207 Object obj = ((IStructuredSelection)selection).getFirstElement();
208 if (obj!=null)
209 if (obj instanceof KeystoreEntry) {
210 KeystoreEntry ke = (KeystoreEntry) obj;
211 CertificateViewerDialog cvg = new CertificateViewerDialog(ke.getCertificateChain());
212 cvg.open();
213 }
214 }
215 }
216 }