1 package org.eparapher.rcp.preferences;
2
3 import org.apache.log4j.Logger;
4 import org.eclipse.jface.preference.ComboFieldEditor;
5 import org.eclipse.jface.preference.FieldEditorPreferencePage;
6 import org.eclipse.jface.preference.FileFieldEditor;
7 import org.eclipse.jface.preference.IPreferenceStore;
8 import org.eclipse.jface.preference.IntegerFieldEditor;
9 import org.eclipse.jface.util.PropertyChangeEvent;
10 import org.eclipse.ui.IWorkbench;
11 import org.eclipse.ui.IWorkbenchPreferencePage;
12 import org.eparapher.core.EParapherManager;
13 import org.eparapher.core.crypto.EPCryptoProviderManager;
14 import org.eparapher.core.crypto.EPKeystoreManager;
15 import org.eparapher.core.crypto.keystore.FileKeystore;
16 import org.eparapher.core.interfaces.EParapherSettings;
17 import org.eparapher.core.tools.JVMSettings;
18 import org.eparapher.rcp.Activator;
19 import org.eparapher.rcp.EPReferences;
20 import org.eparapher.rcp.tools.KeystoreFieldEditor;
21 import org.eparapher.rcp.tools.eParapherTools;
22
23
24 public class KeystorePreferencePage
25 extends FieldEditorPreferencePage
26 implements IWorkbenchPreferencePage {
27
28 private static Logger log = Logger.getLogger(KeystorePreferencePage.class);
29
30 public static final String ID = "org.eparapher.rcp.preferences.KeystorePreferencePage";
31
32 ComboFieldEditor certstoretype;
33
34 KeystoreFieldEditor localfilekeystorepath;
35
36 FileFieldEditor localpkcs11libpath;
37 IntegerFieldEditor localpkcs11slotid;
38
39 String initialKeystoretype;
40 String initialfile;
41 int initialPKCS11Slot;
42
43 EParapherSettings settings = EParapherManager.getInstance().getSettings();
44
45 public KeystorePreferencePage() {
46 super(GRID);
47 setPreferenceStore(Activator.getDefault().getPreferenceStore());
48 setDescription("Set your personal keystore that contain your signature keypair/certificate");
49 initialKeystoretype = null;
50 initialfile = null;
51 }
52
53 public void init(IWorkbench workbench) {
54
55 }
56
57 protected void createFieldEditors() {
58
59 certstoretype = new ComboFieldEditor( PreferenceConstants.P_USERKEYCERTCONTAINER, "&Choose your key container", EPKeystoreManager.certStoreFamilies, getFieldEditorParent());
60 addField(certstoretype);
61
62 localfilekeystorepath = new KeystoreFieldEditor( PreferenceConstants.P_USERPKCS12FILEPATH, "PKCS#12 File :", true, getFieldEditorParent());
63 localfilekeystorepath.setEmptyStringAllowed(true);
64 addField(localfilekeystorepath);
65
66 localpkcs11libpath = new FileFieldEditor( PreferenceConstants.P_PKCS11_LIBRARY_PATH, "PKCS#11 Library : ", getFieldEditorParent());
67 addField(localpkcs11libpath);
68 localpkcs11slotid = new IntegerFieldEditor( PreferenceConstants.P_PKCS11_SLOT_ID, "PKCS#11 Slot ID : ", getFieldEditorParent());
69 addField(localpkcs11slotid);
70
71 if ( !JVMSettings.isJava15Min() || !EPKeystoreManager.isPKCS11Used() ) {
72 localpkcs11libpath.setEnabled(false, getFieldEditorParent());
73 localpkcs11slotid.setEnabled(false, getFieldEditorParent());
74 initialfile = settings.getPKCS11LibraryPath();
75 }
76
77 if ( FileKeystore.getFileKeystoreType().equals("") )
78 localfilekeystorepath.setEnabled(false, getFieldEditorParent());
79 else {
80 setKeystoreFileFieldEditor(FileKeystore.getFileKeystoreType());
81 initialfile = localfilekeystorepath.getStringValue();
82 }
83
84 initialKeystoretype = settings.getPersonalStoreType();
85 initialPKCS11Slot = settings.getPKCS11SlotId();
86 }
87
88 public void propertyChange(PropertyChangeEvent event) {
89 super.propertyChange(event);
90 String selectedPersonalstore = (String) event.getNewValue().toString();
91 String oldselectedPersonalstore = (String) event.getOldValue().toString();
92 if (!selectedPersonalstore.equals(oldselectedPersonalstore) && (event.getSource() instanceof ComboFieldEditor)) {
93
94
95 if (selectedPersonalstore.equals(EPKeystoreManager.PKCS11_CONFIGNAME) && JVMSettings.isJava15Min()) {
96 localpkcs11libpath.setEnabled(true, getFieldEditorParent());
97 localpkcs11slotid.setEnabled(true, getFieldEditorParent());
98 } else {
99 localpkcs11libpath.setEnabled(false, getFieldEditorParent());
100 localpkcs11slotid.setEnabled(false, getFieldEditorParent());
101 }
102
103 if ( selectedPersonalstore.equals(EPKeystoreManager.PKCS12_CONFIGNAME)
104 || selectedPersonalstore.equals(EPKeystoreManager.JKS_CONFIGNAME)
105 || selectedPersonalstore.equals(EPKeystoreManager.JCEKS_CONFIGNAME)
106 || selectedPersonalstore.equals(EPKeystoreManager.UBER_CONFIGNAME)
107 || selectedPersonalstore.equals(EPKeystoreManager.KDB_CONFIGNAME)
108 || selectedPersonalstore.equals(EPKeystoreManager.BC_CONFIGNAME) ) {
109 setKeystoreFileFieldEditor(selectedPersonalstore);
110 } else localfilekeystorepath.setEnabled(false, getFieldEditorParent());
111
112
113
114 if (selectedPersonalstore.equals(EPKeystoreManager.PKCS11_CONFIGNAME) && !JVMSettings.isJava15Min())
115 eParapherTools.errorMessage("Sorry, this feature is only available with Java 1.5 Min and.\r\nPlease change");
116
117 if ( selectedPersonalstore.equals(EPKeystoreManager.MSCAPI_CONFIGNAME)
118 && (!JVMSettings.isWindowsOS()|| !JVMSettings.isJava16Min()) ) {
119 eParapherTools.errorMessage("Sorry, this feature is only available with Windows and Java 1.6 Min.\r\nPlease change");
120 }
121
122 }
123 }
124
125 private void setKeystoreFileFieldEditor(String storetype) {
126
127 String labelText = null;
128 String latest_filename = null;
129 String[] keystorefilefilter = null;
130 IPreferenceStore ips = Activator.getDefault().getPreferenceStore();
131
132 if ( storetype.equals(EPKeystoreManager.PKCS12_CONFIGNAME) ) {
133 labelText = "PKCS#12 file (*.p12) : ";
134 keystorefilefilter = new String[] {"*.p12"};
135 latest_filename = ips.getString(PreferenceConstants.P_USERPKCS12FILEPATH);
136 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERPKCS12FILEPATH);
137 }
138 if ( storetype.equals(EPKeystoreManager.JKS_CONFIGNAME) ) {
139 labelText = "JKS file (*.jks) :";
140 keystorefilefilter = new String[] {"*.jks"};
141 latest_filename = ips.getString(PreferenceConstants.P_USERJKSFILEPATH);
142 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERJKSFILEPATH);
143 }
144 if ( storetype.equals(EPKeystoreManager.JCEKS_CONFIGNAME) ) {
145 labelText = "JCEKS file (*.jceks) :";
146 keystorefilefilter = new String[] {"*.jceks", "*.jks"};
147 latest_filename = ips.getString(PreferenceConstants.P_USERJCEKSFILEPATH);
148 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERJCEKSFILEPATH);
149 }
150 if ( storetype.equals(EPKeystoreManager.BC_CONFIGNAME) ) {
151 labelText = "BouncyCastle file (*.bks) :";
152 keystorefilefilter = new String[] {"*.bks"};
153 latest_filename = ips.getString(PreferenceConstants.P_USERBCFILEPATH);
154 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERBCFILEPATH);
155 }
156 if ( storetype.equals(EPKeystoreManager.UBER_CONFIGNAME) ) {
157 labelText = "BouncyCastle file (*.uber) :";
158 keystorefilefilter = new String[] {"*.uber"};
159 latest_filename = ips.getString(PreferenceConstants.P_USERBCFILEPATH);
160 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERBCFILEPATH);
161 }
162 if ( storetype.equals(EPKeystoreManager.KDB_CONFIGNAME) ) {
163 labelText = "IBM CMS Keystore file (*.kdb) :";
164 keystorefilefilter = new String[] {"*.kdb"};
165 latest_filename = ips.getString(PreferenceConstants.P_USERKDBFILEPATH);
166 localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERKDBFILEPATH);
167 }
168 localfilekeystorepath.setLabelText(labelText);
169 localfilekeystorepath.setStringValue(latest_filename);
170 localfilekeystorepath.setFileExtensions(keystorefilefilter);
171 localfilekeystorepath.setEnabled(true, getFieldEditorParent());
172
173 }
174
175 public boolean performOk() {
176
177
178 boolean save = super.performOk();
179
180 EParapherSettings settings = EParapherManager.getInstance().getSettings();
181
182
183 if ( EPKeystoreManager.isCMSKSUsed() && !EPCryptoProviderManager.LoadIBMCMSKSProvider() ) {
184 eParapherTools.errorMessage("Failed to initialize IBM CMSProvider, please change it.\r\n To use it, use IBM JVM or add ibmcmsprovider.jar to your $JAVA_HOME\\lib\\ext directory.");
185 return false;
186 }
187
188
189 if ( !initialKeystoretype.equals(settings.getPersonalStoreType())
190 || (EPKeystoreManager.isPKCS11Used() && !initialfile.equals(settings.getPKCS11LibraryPath()))
191 || (!FileKeystore.getFileKeystoreType().equals("") && !initialfile.equals(localfilekeystorepath.getStringValue()))
192 || (EPKeystoreManager.isPKCS11Used() && initialPKCS11Slot != settings.getPKCS11SlotId()) ) {
193 if (!EPKeystoreManager.getInstance().initUserKeystore()) {
194 return false;
195 }
196 if (!EPKeystoreManager.getInstance().getUserkeystore().loadKeyStore()) {
197 eParapherTools.errorMessage("Failed to Open Keystore.\r\nPlease retry, change or cancel.");
198 return false;
199 }
200 }
201
202
203 EPKeystoreManager.getInstance().startTrackingThread();
204
205 if (EPReferences.getInstance().getUsercertview()!=null)
206 EPReferences.getInstance().getUsercertview().refreshView();
207 return save;
208 }
209 }