View Javadoc

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  			//PKCS 11 settings Enabler/Disabler
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 			//File Keystore settings enabler/disabler
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 			//PKCS 11 Warning
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 			//MSCAPICOM Warning if Java before 1.6 or not Windows
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     	//First, save properties
178     	boolean save = super.performOk();
179     	
180     	EParapherSettings settings = EParapherManager.getInstance().getSettings();
181     	
182     	//For KDB, not available if IBM CMSProvider is not loaded
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     	//Load Keystores if changed
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     	//Start keystore tracking
203     	EPKeystoreManager.getInstance().startTrackingThread();
204     	
205     	if (EPReferences.getInstance().getUsercertview()!=null)
206     		EPReferences.getInstance().getUsercertview().refreshView();
207         return save;
208     }
209 }