summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Kellner <imcybot@gmail.com>2015-10-12 04:25:03 +0200
committerTobias Kellner <imcybot@gmail.com>2015-10-12 04:25:19 +0200
commit2c61afd4baa2f542247d3360f921628d5d8e97a5 (patch)
treed1a70f0d4427adbbec933220d09f963a53eb612c
parent0772728e88d1579d158187f69b20e5b999ccaefa (diff)
downloadpdf-over-2c61afd4baa2f542247d3360f921628d5d8e97a5.tar.gz
pdf-over-2c61afd4baa2f542247d3360f921628d5d8e97a5.tar.bz2
pdf-over-2c61afd4baa2f542247d3360f921628d5d8e97a5.zip
Complete keystore config dialog
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java18
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/KeystoreConfigurationComposite.java473
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java36
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java38
-rw-r--r--pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties18
-rw-r--r--pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties20
6 files changed, 529 insertions, 74 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
index 77b1bd98..ed85f77b 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java
@@ -287,6 +287,10 @@ public class ConfigurationComposite extends StateComposite {
// not needed at the moment
this.advancedConfigComposite.setSigner(getSigner());
}
+ if (this.keystoreConfigComposite != null) {
+ // not needed at the moment
+ this.keystoreConfigComposite.setSigner(getSigner());
+ }
}
private class AboutComposite extends StateComposite {
@@ -300,20 +304,6 @@ public class ConfigurationComposite extends StateComposite {
setLayout(new FormLayout());
- /*Group grpAbout = new Group(this, SWT.NONE | SWT.RESIZE);
- FormData fd_grpAbout = new FormData();
- fd_grpAbout.right = new FormAttachment(100, -5);
- fd_grpAbout.left = new FormAttachment(0, 5);
- fd_grpAbout.top = new FormAttachment(0, 5);
- grpAbout.setLayoutData(fd_grpAbout);
- grpAbout.setLayout(new FillLayout());
-
- FontData[] fD_grpAbout = grpAbout.getFont()
- .getFontData();
- fD_grpAbout[0].setHeight(Constants.TEXT_SIZE_NORMAL);
- grpAbout.setFont(new Font(Display.getCurrent(),
- fD_grpAbout[0]));*/
-
this.lnkAbout = new Link(this, SWT.WRAP);
FormData fd_lnkAbout = new FormData();
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/KeystoreConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/KeystoreConfigurationComposite.java
index aa42a7bb..24170e24 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/KeystoreConfigurationComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/KeystoreConfigurationComposite.java
@@ -17,39 +17,29 @@ package at.asit.pdfover.gui.composites;
// Imports
import java.io.File;
-import java.util.Locale;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetAdapter;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
@@ -61,18 +51,15 @@ import org.slf4j.LoggerFactory;
import at.asit.pdfover.gui.Constants;
import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
import at.asit.pdfover.gui.controls.ErrorDialog;
-import at.asit.pdfover.gui.controls.ErrorMarker;
-import at.asit.pdfover.gui.exceptions.InvalidEmblemFile;
-import at.asit.pdfover.gui.exceptions.InvalidNumberException;
-import at.asit.pdfover.gui.exceptions.PDFOverGUIException;
+import at.asit.pdfover.gui.exceptions.CantLoadKeystoreException;
+import at.asit.pdfover.gui.exceptions.KeystoreDoesntExistException;
+import at.asit.pdfover.gui.exceptions.OutputfolderDoesntExistException;
+import at.asit.pdfover.gui.exceptions.OutputfolderNotADirectoryException;
import at.asit.pdfover.gui.utils.Messages;
-import at.asit.pdfover.gui.utils.SignaturePlaceholderCache;
import at.asit.pdfover.gui.workflow.config.ConfigManipulator;
import at.asit.pdfover.gui.workflow.config.ConfigurationContainer;
import at.asit.pdfover.gui.workflow.config.PersistentConfigProvider;
import at.asit.pdfover.gui.workflow.states.State;
-import at.asit.pdfover.signator.FileNameEmblem;
-import at.asit.pdfover.signator.SignatureParameter;
/**
*
@@ -86,6 +73,21 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
.getLogger(KeystoreConfigurationComposite.class);
private Group grpKeystore;
+ private Label lblKeystoreFile;
+ Text txtKeystoreFile;
+ private Button btnBrowse;
+ private Label lblKeystoreType;
+ Combo cmbKeystoreType;
+ private Label lblKeystoreStorePass;
+ Text txtKeystoreStorePass;
+ private Button btnLoad;
+ private Label lblKeystoreAlias;
+ Combo cmbKeystoreAlias;
+ private Label lblKeystoreKeyPass;
+ Text txtKeystoreKeyPass;
+
+ private Map<String, String> keystoreTypes;
+ private Map<String, String> keystoreTypes_i;
/**
* @param parent
@@ -100,56 +102,363 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
setLayout(new FormLayout());
this.grpKeystore = new Group(this, SWT.NONE | SWT.RESIZE);
+ FormLayout layout = new FormLayout();
+ layout.marginHeight = 10;
+ layout.marginWidth = 5;
+ this.grpKeystore.setLayout(layout);
FormData fd_grpKeystore = new FormData();
- fd_grpKeystore.right = new FormAttachment(100, -5);
- fd_grpKeystore.left = new FormAttachment(0, 5);
fd_grpKeystore.top = new FormAttachment(0, 5);
+ fd_grpKeystore.left = new FormAttachment(0, 5);
+ fd_grpKeystore.right = new FormAttachment(100, -5);
this.grpKeystore.setLayoutData(fd_grpKeystore);
- this.grpKeystore.setLayout(new GridLayout(2, false));
- FontData[] fD_grpKeystore = this.grpKeystore.getFont()
- .getFontData();
+ FontData[] fD_grpKeystore = this.grpKeystore.getFont().getFontData();
fD_grpKeystore[0].setHeight(Constants.TEXT_SIZE_NORMAL);
this.grpKeystore.setFont(new Font(Display.getCurrent(),
fD_grpKeystore[0]));
+ this.lblKeystoreFile = new Label(this.grpKeystore, SWT.NONE);
+ FormData fd_lblKeystoreFile = new FormData();
+ fd_lblKeystoreFile.top = new FormAttachment(0);
+ fd_lblKeystoreFile.left = new FormAttachment(0, 5);
+ this.lblKeystoreFile.setLayoutData(fd_lblKeystoreFile);
+
+ FontData[] fD_lblKeystoreFile = this.lblKeystoreFile.getFont()
+ .getFontData();
+ fD_lblKeystoreFile[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.lblKeystoreFile.setFont(new Font(Display.getCurrent(),
+ fD_lblKeystoreFile[0]));
+
+ this.txtKeystoreFile = new Text(this.grpKeystore, SWT.BORDER);
+ FormData fd_txtKeystoreFile = new FormData();
+ fd_txtKeystoreFile.top = new FormAttachment(this.lblKeystoreFile, 5);
+ fd_txtKeystoreFile.left = new FormAttachment(0, 15);
+ this.txtKeystoreFile.setLayoutData(fd_txtKeystoreFile);
+
+ FontData[] fD_txtKeystoreFile = this.txtKeystoreFile.getFont()
+ .getFontData();
+ fD_txtKeystoreFile[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.txtKeystoreFile.setFont(new Font(Display.getCurrent(),
+ fD_txtKeystoreFile[0]));
+
+ this.txtKeystoreFile.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ performKeystoreFileChanged(KeystoreConfigurationComposite.this.
+ txtKeystoreFile.getText());
+ }
+ });
+
+ this.btnBrowse = new Button(this.grpKeystore, SWT.NONE);
+ fd_txtKeystoreFile.right = new FormAttachment(this.btnBrowse, -5);
+
+ FontData[] fD_btnBrowse = this.btnBrowse.getFont().getFontData();
+ fD_btnBrowse[0].setHeight(Constants.TEXT_SIZE_BUTTON);
+ this.btnBrowse.setFont(new Font(Display.getCurrent(), fD_btnBrowse[0]));
+
+ FormData fd_btnBrowse = new FormData();
+ fd_btnBrowse.top = new FormAttachment(this.lblKeystoreFile, 5);
+ fd_btnBrowse.right = new FormAttachment(100, -5);
+ this.btnBrowse.setLayoutData(fd_btnBrowse);
+
+ this.btnBrowse.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(
+ KeystoreConfigurationComposite.this.getShell(), SWT.OPEN);
+ dialog.setFilterExtensions(new String[] {
+ "*.p12;*.pkcs12;*.pfx;*.ks;*.jks", "*.p12;*.pkcs12;*.pfx;", "*.ks;*.jks*.", "*" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ dialog.setFilterNames(new String[] {
+ Messages.getString("common.KeystoreExtension_Description"), //$NON-NLS-1$
+ Messages.getString("common.PKCS12Extension_Description"), //$NON-NLS-1$
+ Messages.getString("common.KSExtension_Description"), //$NON-NLS-1$
+ Messages.getString("common.AllExtension_Description") }); //$NON-NLS-1$
+ String fileName = dialog.open();
+ File file = null;
+ if (fileName != null) {
+ file = new File(fileName);
+ if (file.exists()) {
+ performKeystoreFileChanged(fileName);
+ }
+ }
+ }
+ });
+
+ this.lblKeystoreType = new Label(this.grpKeystore, SWT.NONE);
+ FormData fd_lblKeystoreType = new FormData();
+ fd_lblKeystoreType.top = new FormAttachment(this.txtKeystoreFile, 5);
+ fd_lblKeystoreType.left = new FormAttachment(0, 5);
+ this.lblKeystoreType.setLayoutData(fd_lblKeystoreType);
+
+ FontData[] fD_lblKeystoreType = this.lblKeystoreType.getFont()
+ .getFontData();
+ fD_lblKeystoreType[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.lblKeystoreType.setFont(new Font(Display.getCurrent(),
+ fD_lblKeystoreType[0]));
+
+ this.cmbKeystoreType = new Combo(this.grpKeystore, SWT.READ_ONLY);
+ FormData fd_cmbKeystoreType = new FormData();
+ fd_cmbKeystoreType.right = new FormAttachment(100, -5);
+ fd_cmbKeystoreType.top = new FormAttachment(this.lblKeystoreType, 5);
+ fd_cmbKeystoreType.left = new FormAttachment(0, 15);
+ this.cmbKeystoreType.setLayoutData(fd_cmbKeystoreType);
+
+ FontData[] fD_cmbKeystoreType = this.cmbKeystoreType.getFont()
+ .getFontData();
+ fD_cmbKeystoreType[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.cmbKeystoreType.setFont(new Font(Display.getCurrent(),
+ fD_cmbKeystoreType[0]));
+
+ initKeystoreTypes();
+ this.cmbKeystoreType.setItems(this.keystoreTypes.keySet().toArray(new String[0]));
+ this.cmbKeystoreType.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ performKeystoreTypeChanged(
+ KeystoreConfigurationComposite.this.cmbKeystoreType.getItem(
+ KeystoreConfigurationComposite.this.cmbKeystoreType.getSelectionIndex()));
+ }
+ });
+
+ this.lblKeystoreStorePass = new Label(this.grpKeystore, SWT.NONE);
+ FormData fd_lblKeystoreStorePass = new FormData();
+ fd_lblKeystoreStorePass.top = new FormAttachment(this.cmbKeystoreType, 5);
+ fd_lblKeystoreStorePass.left = new FormAttachment(0, 5);
+ this.lblKeystoreStorePass.setLayoutData(fd_lblKeystoreStorePass);
+
+ FontData[] fD_lblKeystoreStorePass = this.lblKeystoreStorePass.getFont()
+ .getFontData();
+ fD_lblKeystoreStorePass[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.lblKeystoreStorePass.setFont(new Font(Display.getCurrent(),
+ fD_lblKeystoreStorePass[0]));
+
+ this.txtKeystoreStorePass = new Text(this.grpKeystore, SWT.BORDER | SWT.PASSWORD);
+ FormData fd_txtKeystoreStorePass = new FormData();
+ fd_txtKeystoreStorePass.top = new FormAttachment(this.lblKeystoreStorePass, 5);
+ fd_txtKeystoreStorePass.left = new FormAttachment(0, 15);
+ this.txtKeystoreStorePass.setLayoutData(fd_txtKeystoreStorePass);
+
+ FontData[] fD_txtKeystoreStorePass = this.txtKeystoreStorePass.getFont()
+ .getFontData();
+ fD_txtKeystoreStorePass[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.txtKeystoreStorePass.setFont(new Font(Display.getCurrent(),
+ fD_txtKeystoreStorePass[0]));
+
+ this.txtKeystoreStorePass.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ performKeystoreStorePassChanged(KeystoreConfigurationComposite.
+ this.txtKeystoreStorePass.getText());
+ }
+ });
+
+ this.btnLoad = new Button(this.grpKeystore, SWT.NONE);
+ fd_txtKeystoreStorePass.right = new FormAttachment(this.btnLoad, -5);
+
+ FontData[] fD_btnLoad = this.btnLoad.getFont().getFontData();
+ fD_btnLoad[0].setHeight(Constants.TEXT_SIZE_BUTTON);
+ this.btnLoad.setFont(new Font(Display.getCurrent(), fD_btnLoad[0]));
+
+ FormData fd_btnLoad = new FormData();
+ fd_btnLoad.top = new FormAttachment(this.lblKeystoreStorePass, 5);
+ fd_btnLoad.right = new FormAttachment(100, -5);
+ this.btnLoad.setLayoutData(fd_btnLoad);
+
+ this.btnLoad.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ File f = new File(KeystoreConfigurationComposite.this
+ .configurationContainer.getKeyStoreFile());
+ try {
+ loadKeystore();
+ } catch (KeyStoreException ex) {
+ log.error("Error loading keystore", ex); //$NON-NLS-1$
+ showErrorDialog(Messages.getString("error.KeyStore")); //$NON-NLS-1$
+ } catch (FileNotFoundException ex) {
+ log.error("Error loading keystore", ex); //$NON-NLS-1$
+ showErrorDialog(String.format(Messages.getString(
+ "error.FileNotExist"), f.getName())); //$NON-NLS-1$
+ } catch (NoSuchAlgorithmException ex) {
+ log.error("Error loading keystore", ex); //$NON-NLS-1$
+ showErrorDialog(Messages.getString("error.KeyStore")); //$NON-NLS-1$
+ } catch (CertificateException ex) {
+ log.error("Error loading keystore", ex); //$NON-NLS-1$
+ showErrorDialog(Messages.getString("error.KeyStore")); //$NON-NLS-1$
+ } catch (IOException ex) {
+ log.error("Error loading keystore", ex); //$NON-NLS-1$
+ showErrorDialog(Messages.getString("error.KeyStore")); //$NON-NLS-1$
+ }
+
+ }
+ });
+
+ this.lblKeystoreAlias = new Label(this.grpKeystore, SWT.NONE);
+ FormData fd_lblKeystoreAlias = new FormData();
+ fd_lblKeystoreAlias.top = new FormAttachment(this.txtKeystoreStorePass, 5);
+ fd_lblKeystoreAlias.left = new FormAttachment(0, 5);
+ this.lblKeystoreAlias.setLayoutData(fd_lblKeystoreAlias);
+
+ FontData[] fD_lblKeystoreAlias = this.lblKeystoreAlias.getFont()
+ .getFontData();
+ fD_lblKeystoreAlias[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.lblKeystoreAlias.setFont(new Font(Display.getCurrent(),
+ fD_lblKeystoreAlias[0]));
+
+ this.cmbKeystoreAlias = new Combo(this.grpKeystore, SWT.READ_ONLY);
+ FormData fd_cmbKeystoreAlias = new FormData();
+ fd_cmbKeystoreAlias.right = new FormAttachment(100, -5);
+ fd_cmbKeystoreAlias.top = new FormAttachment(this.lblKeystoreAlias, 5);
+ fd_cmbKeystoreAlias.left = new FormAttachment(0, 15);
+ this.cmbKeystoreAlias.setLayoutData(fd_cmbKeystoreAlias);
+
+ FontData[] fD_cmbKeystoreAlias = this.cmbKeystoreAlias.getFont()
+ .getFontData();
+ fD_cmbKeystoreAlias[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.cmbKeystoreAlias.setFont(new Font(Display.getCurrent(),
+ fD_cmbKeystoreAlias[0]));
+
+ this.cmbKeystoreAlias.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ performKeystoreAliasChanged(
+ KeystoreConfigurationComposite.this.cmbKeystoreAlias.getItem(
+ KeystoreConfigurationComposite.this.cmbKeystoreAlias.getSelectionIndex()));
+ }
+ });
+
+ this.lblKeystoreKeyPass = new Label(this.grpKeystore, SWT.NONE);
+ FormData fd_lblKeystoreKeyPass = new FormData();
+ fd_lblKeystoreKeyPass.top = new FormAttachment(this.cmbKeystoreAlias, 5);
+ fd_lblKeystoreKeyPass.left = new FormAttachment(0, 5);
+ this.lblKeystoreKeyPass.setLayoutData(fd_lblKeystoreKeyPass);
+
+ FontData[] fD_lblKeystoreKeyPass = this.lblKeystoreKeyPass.getFont()
+ .getFontData();
+ fD_lblKeystoreKeyPass[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.lblKeystoreKeyPass.setFont(new Font(Display.getCurrent(),
+ fD_lblKeystoreKeyPass[0]));
+
+ this.txtKeystoreKeyPass = new Text(this.grpKeystore, SWT.BORDER | SWT.PASSWORD);
+ FormData fd_txtKeystoreKeyPass = new FormData();
+ fd_txtKeystoreKeyPass.top = new FormAttachment(this.lblKeystoreKeyPass, 5);
+ fd_txtKeystoreKeyPass.left = new FormAttachment(0, 15);
+ fd_txtKeystoreKeyPass.right = new FormAttachment(100, -5);
+ this.txtKeystoreKeyPass.setLayoutData(fd_txtKeystoreKeyPass);
+
+ FontData[] fD_txtKeystoreKeyPass = this.txtKeystoreKeyPass.getFont()
+ .getFontData();
+ fD_txtKeystoreKeyPass[0].setHeight(Constants.TEXT_SIZE_NORMAL);
+ this.txtKeystoreKeyPass.setFont(new Font(Display.getCurrent(),
+ fD_txtKeystoreKeyPass[0]));
+
+ this.txtKeystoreKeyPass.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ performKeystoreKeyPassChanged(KeystoreConfigurationComposite.
+ this.txtKeystoreKeyPass.getText());
+ }
+ });
+
// Load localized strings
reloadResources();
}
+ void showErrorDialog(String error) {
+ ErrorDialog e = new ErrorDialog(getShell(), error, BUTTONS.OK);
+ e.open();
+ }
+
+ void loadKeystore() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
+ ConfigurationContainer config =
+ KeystoreConfigurationComposite.this.configurationContainer;
+ File f = new File(config.getKeyStoreFile());
+ KeyStore ks = KeyStore.getInstance(config.getKeyStoreType());
+ FileInputStream fis = new FileInputStream(f);
+ ks.load(fis, config.getKeyStoreStorePass().toCharArray());
+ this.cmbKeystoreAlias.removeAll();
+ Enumeration<String> aliases = ks.aliases();
+ while (aliases.hasMoreElements())
+ this.cmbKeystoreAlias.add(aliases.nextElement());
+ }
+
+ private void initKeystoreTypes() {
+ this.keystoreTypes = new HashMap<String, String>();
+ this.keystoreTypes_i = new HashMap<String, String>();
+ this.keystoreTypes.put(Messages.getString("keystore_config.KeystoreType_PKCS12"), "PKCS12"); //$NON-NLS-1$ //$NON-NLS-2$
+ this.keystoreTypes_i.put("PKCS12", Messages.getString("keystore_config.KeystoreType_PKCS12")); //$NON-NLS-1$ //$NON-NLS-2$
+ this.keystoreTypes.put(Messages.getString("keystore_config.KeystoreType_JKS"), "JCEKS"); //$NON-NLS-1$ //$NON-NLS-2$
+ this.keystoreTypes_i.put("JCEKS", Messages.getString("keystore_config.KeystoreType_JKS")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
/**
- *
+ * @param fileName
*/
- private final class KeystoreFileBrowser extends SelectionAdapter {
- /**
- *
- */
- public KeystoreFileBrowser() {
- // Nothing to do
+ protected void performKeystoreFileChanged(String fileName) {
+ log.debug("Selected keystore file: " + fileName); //$NON-NLS-1$
+ this.configurationContainer.setKeyStoreFile(fileName);
+ KeystoreConfigurationComposite.this.txtKeystoreFile.setText(fileName);
+ int i = fileName.lastIndexOf('.');
+ if (i > 0) {
+ String ext = fileName.substring(i+1);
+ if (
+ ext.equalsIgnoreCase("p12") || //$NON-NLS-1$
+ ext.equalsIgnoreCase("pkcs12") || //$NON-NLS-1$
+ ext.equalsIgnoreCase("pfx")) //$NON-NLS-1$
+ performKeystoreTypeChanged(this.keystoreTypes_i.get("PKCS12")); //$NON-NLS-1$
+ else if (
+ ext.equalsIgnoreCase("ks") || //$NON-NLS-1$
+ ext.equalsIgnoreCase("jks")) //$NON-NLS-1$
+ performKeystoreTypeChanged(this.keystoreTypes_i.get("JCEKS")); //$NON-NLS-1$
}
+ }
- @Override
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(
- KeystoreConfigurationComposite.this.getShell(), SWT.OPEN);
- dialog.setFilterExtensions(new String[] {
- "*.p12;*.pkcs12;*.ks;*.jks", "*.p12;*.pkcs12", "*.ks;*.jks*.", "*" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- dialog.setFilterNames(new String[] {
- Messages.getString("common.KeystoreExtension_Description"), //$NON-NLS-1$
- Messages.getString("common.PKCS12Extension_Description"), //$NON-NLS-1$
- Messages.getString("common.KSExtension_Description"), //$NON-NLS-1$
- Messages.getString("common.AllExtension_Description") }); //$NON-NLS-1$
- String fileName = dialog.open();
- File file = null;
- if (fileName != null) {
- file = new File(fileName);
- if (file.exists()) {
- //processEmblemChanged(fileName);
- }
+ /**
+ * @param type
+ */
+ protected void performKeystoreTypeChanged(String type) {
+ log.debug("Selected keystore type: " + type); //$NON-NLS-1$
+ this.configurationContainer.setKeyStoreType(
+ this.keystoreTypes.get(type));
+ for (int i = 0; i < this.cmbKeystoreType.getItemCount(); ++i) {
+ if (this.cmbKeystoreType.getItem(i).equals(type)) {
+ this.cmbKeystoreType.select(i);
+ break;
}
}
}
+ /**
+ * @param storepass
+ */
+ protected void performKeystoreStorePassChanged(String storepass) {
+ log.debug("Changed keystore store password"); //$NON-NLS-1$
+ this.configurationContainer.setKeyStoreStorePass(storepass);
+ this.txtKeystoreStorePass.setText(storepass);
+ }
+
+ /**
+ * @param alias
+ */
+ protected void performKeystoreAliasChanged(String alias) {
+ log.debug("Selected keystore alias: " + alias); //$NON-NLS-1$
+ this.configurationContainer.setKeyStoreAlias(alias);
+ for (int i = 0; i < this.cmbKeystoreAlias.getItemCount(); ++i) {
+ if (this.cmbKeystoreAlias.getItem(i).equals(alias)) {
+ this.cmbKeystoreAlias.select(i);
+ break;
+ }
+ }
+ }
+
+ /**
+ * @param keypass
+ */
+ protected void performKeystoreKeyPassChanged(String keypass) {
+ log.debug("Changed keystore key password"); //$NON-NLS-1$
+ this.configurationContainer.setKeyStoreKeyPass(keypass);
+ this.txtKeystoreKeyPass.setText(keypass);
+ }
+
/*
* (non-Javadoc)
*
@@ -158,6 +467,7 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
*/
@Override
protected void signerChanged() {
+ // Nothing to do here (yet)
}
/*
@@ -196,6 +506,21 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
@Override
public void loadConfiguration() {
// Initialize form fields from configuration Container
+ performKeystoreFileChanged(
+ this.configurationContainer.getKeyStoreFile());
+ performKeystoreTypeChanged(
+ this.configurationContainer.getKeyStoreType());
+ performKeystoreStorePassChanged(
+ this.configurationContainer.getKeyStoreStorePass());
+ try {
+ loadKeystore();
+ } catch (Exception e) {
+ log.error("Error loading keystore", e); //$NON-NLS-1$
+ }
+ performKeystoreAliasChanged(
+ this.configurationContainer.getKeyStoreAlias());
+ performKeystoreKeyPassChanged(
+ this.configurationContainer.getKeyStoreKeyPass());
}
/* (non-Javadoc)
@@ -220,6 +545,20 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
*/
@Override
public void validateSettings(int resumeFrom) throws Exception {
+ switch (resumeFrom) {
+ case 0:
+ File f = new File(this.configurationContainer.getKeyStoreFile());
+ if (!f.exists() || !f.isFile())
+ throw new KeystoreDoesntExistException(f, 2); //skip next check
+ // Fall through
+ case 1:
+ try {
+ loadKeystore();
+ } catch (Exception e) {
+ throw new CantLoadKeystoreException(e, 2);
+ }
+ // Fall through
+ }
}
/*
@@ -231,5 +570,25 @@ public class KeystoreConfigurationComposite extends BaseConfigurationComposite {
public void reloadResources() {
this.grpKeystore.setText(Messages
.getString("keystore_config.Keystore_Title")); //$NON-NLS-1$
+ this.lblKeystoreFile.setText(Messages
+ .getString("keystore_config.KeystoreFile")); //$NON-NLS-1$
+ this.btnBrowse.setText(Messages.getString("common.browse")); //$NON-NLS-1$
+ this.txtKeystoreFile.setToolTipText(Messages
+ .getString("keystore_config.KeystoreFile_ToolTip")); //$NON-NLS-1$
+ this.lblKeystoreType.setText(Messages
+ .getString("keystore_config.KeystoreType")); //$NON-NLS-1$
+ this.lblKeystoreStorePass.setText(Messages
+ .getString("keystore_config.KeystoreStorePass")); //$NON-NLS-1$
+ this.txtKeystoreStorePass.setToolTipText(Messages
+ .getString("keystore_config.KeystoreStorePass_ToolTip")); //$NON-NLS-1$
+ this.btnLoad.setText(Messages.getString("keystore_config.Load")); //$NON-NLS-1$
+ this.btnLoad.setToolTipText(Messages
+ .getString("keystore_config.Load_ToolTip")); //$NON-NLS-1$
+ this.lblKeystoreAlias.setText(Messages
+ .getString("keystore_config.KeystoreAlias")); //$NON-NLS-1$
+ this.lblKeystoreKeyPass.setText(Messages
+ .getString("keystore_config.KeystoreKeyPass")); //$NON-NLS-1$
+ this.txtKeystoreKeyPass.setToolTipText(Messages
+ .getString("keystore_config.KeystoreKeyPass_ToolTip")); //$NON-NLS-1$
}
}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java
new file mode 100644
index 00000000..cb13c804
--- /dev/null
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/CantLoadKeystoreException.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://joinup.ec.europa.eu/software/page/eupl
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ */
+package at.asit.pdfover.gui.exceptions;
+
+import at.asit.pdfover.gui.utils.Messages;
+
+/**
+ *
+ */
+public class CantLoadKeystoreException extends ResumableException {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7554121273052104624L;
+
+ /**
+ * @param resumeIndex The resume Index
+ * @param cause The original exception
+ */
+ public CantLoadKeystoreException(Throwable cause, int resumeIndex) {
+ super(Messages.getString("error.KeyStore"), cause, resumeIndex); //$NON-NLS-1$
+ }
+}
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java
new file mode 100644
index 00000000..f0b4f8f0
--- /dev/null
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/exceptions/KeystoreDoesntExistException.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012 by A-SIT, Secure Information Technology Center Austria
+ *
+ * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
+ * the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ * You may obtain a copy of the Licence at:
+ * http://joinup.ec.europa.eu/software/page/eupl
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and
+ * limitations under the Licence.
+ */
+package at.asit.pdfover.gui.exceptions;
+
+import java.io.File;
+
+import at.asit.pdfover.gui.utils.Messages;
+
+/**
+ *
+ */
+public class KeystoreDoesntExistException extends ResumableException {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8213496549933275086L;
+
+ /**
+ * @param keystore The keystore file
+ * @param resumeIndex The resume Index
+ */
+ public KeystoreDoesntExistException(final File keystore, int resumeIndex) {
+ super(String.format(Messages.getString("error.FileNotExist"), keystore.getPath()), resumeIndex); //$NON-NLS-1$
+ }
+}
diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
index b987b77a..52ae3d6a 100644
--- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
+++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages.properties
@@ -110,7 +110,7 @@ error.InvalidBKU=Invalid CCE selection. Please check.
error.InvalidLocale=Locale not valid
error.InvalidPhoneNumber=Given phone number is invalid\! Example\: +43664123456789
error.InvalidSettings=Invalid settings are still present. Please check your input.
-error.KeyStore=Error loading they keystore
+error.KeyStore=Error loading they keystore. Wrong password?
error.LocalBKU=Please check if a local CCE (citizen card environment) is running\n\nYou need a CCE to access your citizen card. Further information under www.buergerkarte.at
error.MayNotBeAPDF=This may not be a PDF file
error.NoTan=No TAN entered
@@ -134,7 +134,23 @@ exception.PasswordTooLong=Given password is too long\!
exception.PasswordTooShort=Given password is too short\!
exception.PathNotDirectory=Path %s does not denote a directory\!
exception.PathNotExist=Path %s does not exist\!
+keystore.KeystoreStorePassEntry=Please enter keystore password:
+keystore.KeystoreKeyPassEntry=Please enter key password:
keystore_config.Keystore_Title=Keystore
+keystore_config.KeystoreAlias=Key alias
+keystore_config.KeystoreFile=Keystore file
+keystore_config.KeystoreFile_ToolTip=Path to the keystore file
+keystore_config.KeystoreFile.Dialog=Choose the keystore
+keystore_config.KeystoreFile.Dialog_Title=Keystore selection
+keystore_config.KeystoreKeyPass=Key password
+keystore_config.KeystoreKeyPass_ToolTip=Warning: The password is stored in plain text. Leave empty to get prompted for password during signing.
+keystore_config.KeystoreStorePass=Keystore password
+keystore_config.KeystoreStorePass_ToolTip=Warning: The password is stored in plain text. Leave empty to get prompted for password during signing.
+keystore_config.KeystoreType=Keystore type
+keystore_config.KeystoreType_JKS=Java keystore
+keystore_config.KeystoreType_PKCS12=PKCS12
+keystore_config.Load=Load keystore
+keystore_config.Load_Tooltip=Load keystore to show available key aliases
main.about=About %s
main.configuration=Configuration
main.done=Finish
diff --git a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
index 613f1ee5..8c02616a 100644
--- a/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
+++ b/pdf-over-gui/src/main/resources/at/asit/pdfover/gui/messages_de.properties
@@ -16,7 +16,7 @@ advanced_config.LocaleSelection_Title=S&prachauswahl
advanced_config.LocaleSelection_ToolTip=W\u00E4hlen Sie die Sprache f\u00FCr das Benutzerinterface
advanced_config.OutputFolder=Standard-Ausgabeordner\:
advanced_config.OutputFolder.Dialog=W\u00E4hlen Sie einen Ordner
-advanced_config.OutputFolder.Dialog_Title=Ausgabeordner W\u00E4hlen
+advanced_config.OutputFolder.Dialog_Title=Ausgabeordner w\u00E4hlen
advanced_config.OutputFolder_Title=Ausgabe&ort
advanced_config.OutputFolder_ToolTip=W\u00E4hlen Sie einen Ordner, in dem signierte Dokumente automatisch abgelegt werden (deaktivert, wenn das Feld leer ist; ein einzelner Punkt (".") w\u00E4hlt das Verzeichnis des Ursprungsdokuments)
advanced_config.PdfACompat=PDF/A-Kompatibilit\u00E4t
@@ -110,7 +110,7 @@ error.InvalidBKU=Ung\u00FCltige BKU-Auswahl. Bitte \u00FCberpr\u00FCfen.
error.InvalidLocale=Ung\u00FCltige Sprache
error.InvalidPhoneNumber=Telefonnummer ung\u00FCltig\! Beispiel\: +43664123456789
error.InvalidSettings=Ung\u00FCltige Einstellungen vorhanden. Bitte \u00FCberpr\u00FCfen.
-error.KeyStore=Fehler beim Laden des KeyStores
+error.KeyStore=Fehler beim Laden des KeyStores. Falsches Passwort?
error.LocalBKU=Bitte pr\u00FCfen sie, ob Ihre lokale BKU (B\u00FCrgerkartenumgebung) l\u00E4uft\n\nSie ben\u00F6tigen eine BKU, um auf Ihre B\u00FCrgerkarte zuzugreifen. Weitere Informationen unter www.buergerkarte.at
error.MayNotBeAPDF=Dies ist m\u00F6glicherweise keine PDF-Datei
error.NoTan=Keine TAN eingeben
@@ -134,7 +134,23 @@ exception.PasswordTooLong=Eingegebenes Passwort ist zu lange\!
exception.PasswordTooShort=Eingegebenes Passwort ist zu kurz\!
exception.PathNotDirectory=Pfad %s ist kein g\u00FCltiger Ordner\!
exception.PathNotExist=Pfad %s existiert nicht\!
+keystore.KeystoreStorePassEntry=Keystore-Passwort eingeben:
+keystore.KeystoreKeyPassEntry=Schl\u00FCssel-Passwort eingeben:
keystore_config.Keystore_Title=Keystore
+keystore_config.KeystoreAlias=Schl\u00FCssel-Alias
+keystore_config.KeystoreFile=Keystore-Datei
+keystore_config.KeystoreFile_ToolTip=Pfad zur Keystore-Datei
+keystore_config.KeystoreFile.Dialog=W\u00E4hlen Sie den Keystore
+keystore_config.KeystoreFile.Dialog_Title=Keystore w\u00E4hlen
+keystore_config.KeystoreKeyPass=Schl\u00FCssel-Passwort
+keystore_config.KeystoreKeyPass_ToolTip=Achtung: das Passwort wird im Klartext gespeichert. Leer lassen, um beim Signieren zur Eingabe aufgefordert zu werden.
+keystore_config.KeystoreStorePass=Keystore-Passwort
+keystore_config.KeystoreStorePass_ToolTip=Achtung: das Passwort wird im Klartext gespeichert. Leer lassen, um beim Signieren zur Eingabe aufgefordert zu werden.
+keystore_config.KeystoreType=Keystore-Typ
+keystore_config.KeystoreType_JKS=Java-Keystore
+keystore_config.KeystoreType_PKCS12=PKCS12
+keystore_config.Load=Keystore laden
+keystore_config.Load_ToolTip=Keystore laden, um die verf\u00FCgbaren Schl\u00FCssel-Aliases anzuzeigen
main.about=\u00DCber %s
main.configuration=Konfiguration
main.done=Fertig