package org.eparapher.rcp.preferences; import org.apache.log4j.Logger; import org.eclipse.jface.preference.ComboFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eparapher.core.EParapherManager; import org.eparapher.core.crypto.EPCryptoProviderManager; import org.eparapher.core.crypto.EPKeystoreManager; import org.eparapher.core.crypto.keystore.FileKeystore; import org.eparapher.core.interfaces.EParapherSettings; import org.eparapher.core.tools.JVMSettings; import org.eparapher.rcp.Activator; import org.eparapher.rcp.EPReferences; import org.eparapher.rcp.tools.KeystoreFieldEditor; import org.eparapher.rcp.tools.eParapherTools; public class KeystorePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private static Logger log = Logger.getLogger(KeystorePreferencePage.class); public static final String ID = "org.eparapher.rcp.preferences.KeystorePreferencePage"; ComboFieldEditor certstoretype; KeystoreFieldEditor localfilekeystorepath; FileFieldEditor localpkcs11libpath; IntegerFieldEditor localpkcs11slotid; String initialKeystoretype; String initialfile; int initialPKCS11Slot; EParapherSettings settings = EParapherManager.getInstance().getSettings(); public KeystorePreferencePage() { super(GRID); setPreferenceStore(Activator.getDefault().getPreferenceStore()); setDescription("Set your personal keystore that contain your signature keypair/certificate"); initialKeystoretype = null; initialfile = null; } public void init(IWorkbench workbench) { } protected void createFieldEditors() { certstoretype = new ComboFieldEditor( PreferenceConstants.P_USERKEYCERTCONTAINER, "&Choose your key container", EPKeystoreManager.certStoreFamilies, getFieldEditorParent()); addField(certstoretype); localfilekeystorepath = new KeystoreFieldEditor( PreferenceConstants.P_USERPKCS12FILEPATH, "PKCS#12 File :", true, getFieldEditorParent()); localfilekeystorepath.setEmptyStringAllowed(true); addField(localfilekeystorepath); localpkcs11libpath = new FileFieldEditor( PreferenceConstants.P_PKCS11_LIBRARY_PATH, "PKCS#11 Library : ", getFieldEditorParent()); addField(localpkcs11libpath); localpkcs11slotid = new IntegerFieldEditor( PreferenceConstants.P_PKCS11_SLOT_ID, "PKCS#11 Slot ID : ", getFieldEditorParent()); addField(localpkcs11slotid); if ( !JVMSettings.isJava15Min() || !EPKeystoreManager.isPKCS11Used() ) { localpkcs11libpath.setEnabled(false, getFieldEditorParent()); localpkcs11slotid.setEnabled(false, getFieldEditorParent()); initialfile = settings.getPKCS11LibraryPath(); } if ( FileKeystore.getFileKeystoreType().equals("") ) localfilekeystorepath.setEnabled(false, getFieldEditorParent()); else { setKeystoreFileFieldEditor(FileKeystore.getFileKeystoreType()); initialfile = localfilekeystorepath.getStringValue(); } initialKeystoretype = settings.getKeyStoreType(); initialPKCS11Slot = settings.getPKCS11SlotId(); } public void propertyChange(PropertyChangeEvent event) { super.propertyChange(event); String selectedPersonalstore = (String) event.getNewValue().toString(); String oldselectedPersonalstore = (String) event.getOldValue().toString(); if (!selectedPersonalstore.equals(oldselectedPersonalstore) && (event.getSource() instanceof ComboFieldEditor)) { //PKCS 11 settings Enabler/Disabler if (selectedPersonalstore.equals(EPKeystoreManager.PKCS11_CONFIGNAME) && JVMSettings.isJava15Min()) { localpkcs11libpath.setEnabled(true, getFieldEditorParent()); localpkcs11slotid.setEnabled(true, getFieldEditorParent()); } else { localpkcs11libpath.setEnabled(false, getFieldEditorParent()); localpkcs11slotid.setEnabled(false, getFieldEditorParent()); } //File Keystore settings enabler/disabler if ( selectedPersonalstore.equals(EPKeystoreManager.PKCS12_CONFIGNAME) || selectedPersonalstore.equals(EPKeystoreManager.JKS_CONFIGNAME) || selectedPersonalstore.equals(EPKeystoreManager.JCEKS_CONFIGNAME) || selectedPersonalstore.equals(EPKeystoreManager.UBER_CONFIGNAME) || selectedPersonalstore.equals(EPKeystoreManager.KDB_CONFIGNAME) || selectedPersonalstore.equals(EPKeystoreManager.BC_CONFIGNAME) ) { setKeystoreFileFieldEditor(selectedPersonalstore); } else localfilekeystorepath.setEnabled(false, getFieldEditorParent()); //PKCS 11 Warning if (selectedPersonalstore.equals(EPKeystoreManager.PKCS11_CONFIGNAME) && !JVMSettings.isJava15Min()) eParapherTools.errorMessage("Sorry, this feature is only available with Java 1.5 Min and.\r\nPlease change"); //MSCAPICOM Warning if Java before 1.6 or not Windows if ( selectedPersonalstore.equals(EPKeystoreManager.MSCAPI_CONFIGNAME) && (!JVMSettings.isWindowsOS()|| !JVMSettings.isJava16Min()) ) { eParapherTools.errorMessage("Sorry, this feature is only available with Windows and Java 1.6 Min.\r\nPlease change"); } } } private void setKeystoreFileFieldEditor(String storetype) { String labelText = null; String latest_filename = null; String[] keystorefilefilter = null; IPreferenceStore ips = Activator.getDefault().getPreferenceStore(); if ( storetype.equals(EPKeystoreManager.PKCS12_CONFIGNAME) ) { labelText = "PKCS#12 file (*.p12) : "; keystorefilefilter = new String[] {"*.p12"}; latest_filename = ips.getString(PreferenceConstants.P_USERPKCS12FILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERPKCS12FILEPATH); } if ( storetype.equals(EPKeystoreManager.JKS_CONFIGNAME) ) { labelText = "JKS file (*.jks) :"; keystorefilefilter = new String[] {"*.jks"}; latest_filename = ips.getString(PreferenceConstants.P_USERJKSFILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERJKSFILEPATH); } if ( storetype.equals(EPKeystoreManager.JCEKS_CONFIGNAME) ) { labelText = "JCEKS file (*.jceks) :"; keystorefilefilter = new String[] {"*.jceks", "*.jks"}; latest_filename = ips.getString(PreferenceConstants.P_USERJCEKSFILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERJCEKSFILEPATH); } if ( storetype.equals(EPKeystoreManager.BC_CONFIGNAME) ) { labelText = "BouncyCastle file (*.bks) :"; keystorefilefilter = new String[] {"*.bks"}; latest_filename = ips.getString(PreferenceConstants.P_USERBCFILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERBCFILEPATH); } if ( storetype.equals(EPKeystoreManager.UBER_CONFIGNAME) ) { labelText = "BouncyCastle file (*.uber) :"; keystorefilefilter = new String[] {"*.uber"}; latest_filename = ips.getString(PreferenceConstants.P_USERBCFILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERBCFILEPATH); } if ( storetype.equals(EPKeystoreManager.KDB_CONFIGNAME) ) { labelText = "IBM CMS Keystore file (*.kdb) :"; keystorefilefilter = new String[] {"*.kdb"}; latest_filename = ips.getString(PreferenceConstants.P_USERKDBFILEPATH); localfilekeystorepath.setPreferenceName(PreferenceConstants.P_USERKDBFILEPATH); } localfilekeystorepath.setLabelText(labelText); localfilekeystorepath.setStringValue(latest_filename); localfilekeystorepath.setFileExtensions(keystorefilefilter); localfilekeystorepath.setEnabled(true, getFieldEditorParent()); } public boolean performOk() { //First, save properties boolean save = super.performOk(); EParapherSettings settings = EParapherManager.getInstance().getSettings(); //For KDB, not available if IBM CMSProvider is not loaded if ( EPKeystoreManager.isCMSKSUsed() && !EPCryptoProviderManager.LoadIBMCMSKSProvider() ) { 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."); return false; } //Load Keystores if changed if ( !initialKeystoretype.equals(settings.getKeyStoreType()) || (EPKeystoreManager.isPKCS11Used() && !initialfile.equals(settings.getPKCS11LibraryPath())) || (!FileKeystore.getFileKeystoreType().equals("") && !initialfile.equals(localfilekeystorepath.getStringValue())) || (EPKeystoreManager.isPKCS11Used() && initialPKCS11Slot != settings.getPKCS11SlotId()) ) { if (!EPKeystoreManager.getInstance().initUserKeystore()) { return false; } if (!EPKeystoreManager.getInstance().getUserkeystore().loadKeyStore()) { eParapherTools.errorMessage("Failed to Open Keystore.\r\nPlease retry, change or cancel."); return false; } } //Start keystore tracking EPKeystoreManager.getInstance().startTrackingThread(); if (EPReferences.getInstance().getUsercertview()!=null) EPReferences.getInstance().getUsercertview().refreshView(); return save; } }