diff options
36 files changed, 2156 insertions, 19 deletions
diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateApplet.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateApplet.java new file mode 100644 index 00000000..4a46f397 --- /dev/null +++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateApplet.java @@ -0,0 +1,61 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.online.applet; + +import java.awt.Container; +import java.net.URL; +import java.util.Locale; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.GetCertificateGUI; +import at.gv.egiz.bku.gui.GetCertificateGUIFacade; +import at.gv.egiz.bku.gui.HelpListener; +import at.gv.egiz.bku.gui.SwitchFocusListener; +import at.gv.egiz.bku.gui.viewer.FontProvider; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETCertificateApplet extends BKUApplet { + + private static final long serialVersionUID = 1L; + + @Override + protected BKUGUIFacade createGUI(Container contentPane, Locale locale, + BKUGUIFacade.Style guiStyle, URL backgroundImgURL, + FontProvider fontProvider, HelpListener helpListener, + SwitchFocusListener switchFocusListener) { + return new GetCertificateGUI(contentPane, locale, + backgroundImgURL, fontProvider, helpListener, + switchFocusListener); + } + + @Override + protected AppletBKUWorker createBKUWorker(BKUApplet applet, BKUGUIFacade gui) { + return new GETCertificateBKUWorker(applet, (GetCertificateGUIFacade) gui); + } + +} diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateBKUWorker.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateBKUWorker.java new file mode 100644 index 00000000..5b04e28b --- /dev/null +++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/GETCertificateBKUWorker.java @@ -0,0 +1,100 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.online.applet; + +import java.util.Collections; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.GetCertificateGUIFacade; +import at.gv.egiz.bku.smccstal.GETCertificateRequestHandler; +import at.gv.egiz.stal.ErrorResponse; +import at.gv.egiz.stal.InfoboxReadRequest; +import at.gv.egiz.stal.QuitRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.SignRequest; +import at.gv.egiz.stal.ext.GETCertificateRequest; +import at.gv.egiz.stal.ext.GETCertificateResponse; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETCertificateBKUWorker extends AppletBKUWorker { + + private final Logger log = LoggerFactory.getLogger(GETCertificateBKUWorker.class); + + public GETCertificateBKUWorker(BKUApplet applet, GetCertificateGUIFacade gui) { + super(applet, gui); + removeRequestHandler(InfoboxReadRequest.class); + removeRequestHandler(SignRequest.class); + addRequestHandler(GETCertificateRequest.class, new GETCertificateRequestHandler()); + } + + @Override + public void run() { + gui.showMessageDialog(BKUGUIFacade.TITLE_WELCOME, + BKUGUIFacade.MESSAGE_WELCOME); + + try { + + List<STALResponse> responses = handleRequest(Collections.singletonList(new GETCertificateRequest())); + handleRequest(Collections.singletonList(new QuitRequest())); + + if (responses.size() == 1) { + STALResponse response = responses.get(0); + if (response instanceof GETCertificateResponse) { + log.debug("GET certificate dialog terminated."); + } else if (response instanceof ErrorResponse) { + log.debug("GET certificate dialog terminated with error."); + } else { + throw new RuntimeException("Invalid STAL response: " + response.getClass().getName()); + } + } else { + throw new RuntimeException("invalid number of STAL responses: " + responses.size()); + } + + } catch (RuntimeException ex) { + log.error(ex.getMessage()); + Throwable cause = ex.getCause(); + if (cause != null) { // && cause instanceof InterruptedException) { + log.info(cause.getMessage()); + } + showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, null); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + showErrorDialog(BKUGUIFacade.ERR_UNKNOWN_WITH_PARAM, ex); + } finally { + if (signatureCard != null) { + signatureCard.disconnect(false); + } + } + + applet.sendRedirect(); + } +} diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoApplet.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoApplet.java new file mode 100644 index 00000000..18397613 --- /dev/null +++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoApplet.java @@ -0,0 +1,59 @@ +/* + * Copyright 2012 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.online.applet; + +import java.awt.Container; +import java.net.URL; +import java.util.Locale; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.GetHardwareInfoGUI; +import at.gv.egiz.bku.gui.GetHardwareInfoGUIFacade; +import at.gv.egiz.bku.gui.HelpListener; +import at.gv.egiz.bku.gui.SwitchFocusListener; +import at.gv.egiz.bku.gui.viewer.FontProvider; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class HardwareInfoApplet extends BKUApplet { + private static final long serialVersionUID = 1L; + + @Override + protected BKUGUIFacade createGUI(Container contentPane, Locale locale, + BKUGUIFacade.Style guiStyle, URL backgroundImgURL, + FontProvider fontProvider, HelpListener helpListener, + SwitchFocusListener switchFocusListener) { + return new GetHardwareInfoGUI(contentPane, locale, + backgroundImgURL, fontProvider, helpListener, + switchFocusListener); + } + + @Override + protected AppletBKUWorker createBKUWorker(BKUApplet applet, BKUGUIFacade gui) { + return new HardwareInfoBKUWorker(applet, (GetHardwareInfoGUIFacade) gui); + } +} diff --git a/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoBKUWorker.java b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoBKUWorker.java new file mode 100644 index 00000000..bfa4d71e --- /dev/null +++ b/BKUAppletExt/src/main/java/at/gv/egiz/bku/online/applet/HardwareInfoBKUWorker.java @@ -0,0 +1,100 @@ +/* + * Copyright 2012 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.online.applet; + +import java.util.Collections; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.GetHardwareInfoGUIFacade; +import at.gv.egiz.bku.smccstal.GETHardwareInfoRequestHandler; +import at.gv.egiz.stal.ErrorResponse; +import at.gv.egiz.stal.InfoboxReadRequest; +import at.gv.egiz.stal.QuitRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.SignRequest; +import at.gv.egiz.stal.ext.GETHardwareInfoRequest; +import at.gv.egiz.stal.ext.GETHardwareInfoResponse; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class HardwareInfoBKUWorker extends AppletBKUWorker { + private final Logger log = LoggerFactory.getLogger(HardwareInfoBKUWorker.class); + + public HardwareInfoBKUWorker(BKUApplet applet, GetHardwareInfoGUIFacade gui) { + super(applet, gui); + removeRequestHandler(InfoboxReadRequest.class); + removeRequestHandler(SignRequest.class); + addRequestHandler(GETHardwareInfoRequest.class, new GETHardwareInfoRequestHandler()); + } + + @Override + public void run() { + gui.showMessageDialog(BKUGUIFacade.TITLE_WELCOME, + BKUGUIFacade.MESSAGE_WELCOME); + + try { + + List<STALResponse> responses = handleRequest(Collections.singletonList(new GETHardwareInfoRequest())); + handleRequest(Collections.singletonList(new QuitRequest())); + + if (responses.size() == 1) { + STALResponse response = responses.get(0); + if (response instanceof GETHardwareInfoResponse) { + log.debug("hardware-info dialog terminated."); + } else if (response instanceof ErrorResponse) { + log.debug("hardware-info dialog terminated with error."); + } else { + throw new RuntimeException("Invalid STAL response: " + response.getClass().getName()); + } + } else { + throw new RuntimeException("invalid number of STAL responses: " + responses.size()); + } + + } catch (RuntimeException ex) { + log.error(ex.getMessage()); + Throwable cause = ex.getCause(); + if (cause != null) { // && cause instanceof InterruptedException) { + log.info(cause.getMessage()); + } + showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, null); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + showErrorDialog(BKUGUIFacade.ERR_UNKNOWN_WITH_PARAM, ex); + } finally { + if (signatureCard != null) { + signatureCard.disconnect(false); + } + } + + applet.sendRedirect(); + } + +} diff --git a/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUI.java b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUI.java new file mode 100644 index 00000000..3fb0bde4 --- /dev/null +++ b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUI.java @@ -0,0 +1,216 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.gui; + +import java.awt.Container; +import java.awt.event.ActionListener; +import java.io.File; +import java.net.URL; +import java.text.MessageFormat; +import java.util.Locale; + +import javax.swing.GroupLayout; +import javax.swing.JButton; +import javax.swing.JFileChooser; +import javax.swing.LayoutStyle; +import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileFilter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.viewer.FontProvider; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GetCertificateGUI extends CardMgmtGUI implements + GetCertificateGUIFacade { + + private final Logger log = LoggerFactory.getLogger(GetCertificateGUI.class); + + protected JButton getSimCertButton; + protected JButton getQualCertButton; + + public GetCertificateGUI(Container contentPane, Locale locale, + URL backgroundImgURL, FontProvider fontProvider, + HelpListener helpListener, SwitchFocusListener switchFocusListener) { + super(contentPane, locale, Style.advanced, backgroundImgURL, fontProvider, + helpListener, switchFocusListener); + + + } + + @Override + public void showGETCertificateDialog(final ActionListener certificateListener, + final String showGetQualCert, final String showGetSimCert, + final ActionListener cancelListener, final String cancelCmd) { + + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + + mainPanel.removeAll(); + buttonPanel.removeAll(); + + titleLabel.setText(getMessage(TITLE_GETCERTIFICATE)); + + getSimCertButton = new JButton(); + getSimCertButton.setFont(okButton.getFont().deriveFont(okButton.getFont().getStyle()& ~java.awt.Font.BOLD)); + getSimCertButton.setText(getMessage(BUTTON_SIM_CERT)); + getSimCertButton.setActionCommand(showGetSimCert); + getSimCertButton.addActionListener(certificateListener); + getSimCertButton.setEnabled(true); + + getQualCertButton = new JButton(); + getQualCertButton.setFont(okButton.getFont().deriveFont(okButton.getFont().getStyle()& ~java.awt.Font.BOLD)); + getQualCertButton.setText(getMessage(BUTTON_QUAL_CERT)); + getQualCertButton.setActionCommand(showGetQualCert); + getQualCertButton.addActionListener(certificateListener); + getQualCertButton.setEnabled(true); + + cancelButton.setFont(cancelButton.getFont().deriveFont(cancelButton.getFont().getStyle()& ~java.awt.Font.BOLD)); + cancelButton.setText(getMessage(BUTTON_CLOSE)); + cancelButton.setActionCommand(cancelCmd); + cancelButton.addActionListener(cancelListener); + cancelButton.setEnabled(true); + + GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel); + buttonPanel.setLayout(buttonPanelLayout); + + //--------------------------------------------------------------------------------------------------------- + + GroupLayout mainPanelLayout = new GroupLayout(mainPanel); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(GroupLayout.Alignment.CENTER) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() + .addComponent(getQualCertButton, GroupLayout.DEFAULT_SIZE, + GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(12)) + .addGroup(GroupLayout.Alignment.TRAILING, mainPanelLayout.createSequentialGroup() + .addGap(1) + .addComponent(getSimCertButton, GroupLayout.DEFAULT_SIZE, + getQualCertButton.getSize().width, Short.MAX_VALUE) + .addContainerGap()))) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(getSimCertButton, GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(getQualCertButton, GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE) + )); + + mainPanel.setLayout(mainPanelLayout); + //--------------------------------------------------------------------------------------------------------- + + + GroupLayout.ParallelGroup buttonHorizontal = buttonPanelLayout + .createParallelGroup(GroupLayout.Alignment.CENTER) + .addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE); + + GroupLayout.Group buttonVertical = buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(cancelButton); + + buttonPanelLayout.setHorizontalGroup(buttonHorizontal); + buttonPanelLayout.setVerticalGroup(buttonVertical); + + + + if (windowCloseAdapter != null) { + windowCloseAdapter.registerListener(cancelListener, cancelCmd); + } + + contentPanel.validate(); + + resize(); + } + }); + } + + @Override + public void resize() { + + log.debug("Resizing Get-Certificate Applet ..."); + + float factor = getResizeFactor(); + + if (getQualCertButton != null) { + + getQualCertButton.setFont(getQualCertButton.getFont().deriveFont( + (float) (baseFontSize * factor))); + + } + + if (getSimCertButton != null) { + + getSimCertButton.setFont(getSimCertButton.getFont().deriveFont( + (float) (baseFontSize * factor))); + + } + + + super.resize(); + } + + public File showSaveDialog(String defaultfilename) { + + + JFileChooser filechooser = new JFileChooser(); + + filechooser.setMultiSelectionEnabled(false); + filechooser.setDialogTitle(getMessage(TITEL_FILESAVE)); + filechooser.setSelectedFile(new File(defaultfilename)); + filechooser.setFileFilter( new FileFilter() + { + @Override public boolean accept( File f ) + { + return f.isDirectory() || + f.getName().toLowerCase().endsWith( ".cer" ); + } + @Override public String getDescription() + { + return getMessage(FILE_TYPE_NAME); + } + } ); + + int state = filechooser.showSaveDialog(contentPane); + + if (state == JFileChooser.APPROVE_OPTION) { + return filechooser.getSelectedFile(); + + } else { + log.info("Save certificate dialog canceled"); + return null; + } + } + +} diff --git a/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUIFacade.java b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUIFacade.java new file mode 100644 index 00000000..b327f385 --- /dev/null +++ b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetCertificateGUIFacade.java @@ -0,0 +1,51 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.gui; + +import java.awt.event.ActionListener; +import java.io.File; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public interface GetCertificateGUIFacade extends BKUGUIFacade { + + public static final String BUTTON_SIM_CERT = "button.simple.certificate"; + public static final String BUTTON_QUAL_CERT = "button.qualified.certificate"; + public static final String FILE_TYPE_NAME = "file.certificate"; + public static final String TITEL_FILESAVE = "title.certificate.save"; + public static final String TITLE_GETCERTIFICATE = "title.get.certificate"; + + public static final String FILENAME_QUAL_CERT = "qualified.cer"; + public static final String FILENAME_SIM_CERT = "simple.cer"; + + + public void showGETCertificateDialog(ActionListener certificateListener, String showGetQualCert, + String showGetSimCert, ActionListener cancelListener, String cancelCmd); + + public File showSaveDialog(String defaultfilename); + +} diff --git a/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUI.java b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUI.java new file mode 100644 index 00000000..1088545d --- /dev/null +++ b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUI.java @@ -0,0 +1,306 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.gui; + +import java.awt.Container; +import java.awt.Font; +import java.awt.event.ActionListener; +import java.net.URL; +import java.util.Locale; + +import javax.swing.GroupLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.TitledBorder; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.viewer.FontProvider; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GetHardwareInfoGUI extends CardMgmtGUI implements + GetHardwareInfoGUIFacade { + + private final Logger log = LoggerFactory.getLogger(GetHardwareInfoGUI.class); + + protected JLabel lblTyp; + protected JLabel lblAtr; + protected JLabel lblNewLabel; + protected JLabel lblNewLabel_1; + protected JLabel lblNewLabel_2; + protected JPanel cardpanel; + protected JPanel readerpanel; + protected TitledBorder readerpanel_border; + protected TitledBorder cardpanel_border; + + + public GetHardwareInfoGUI(Container contentPane, Locale locale, + URL backgroundImgURL, FontProvider fontProvider, + HelpListener helpListener, SwitchFocusListener switchFocusListener) { + super(contentPane, locale, Style.advanced, backgroundImgURL, fontProvider, + helpListener, switchFocusListener); + } + + + @Override + public void showHardwareInfoDialog(final ActionListener hardwareinfolistener, final String backcmd, + final String showcardreadername, final String showsmartcardname, + final String showsmartcardATR) { + + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + + headerPanel.removeAll(); + mainPanel.removeAll(); + buttonPanel.removeAll(); + + backButton.setFont(backButton.getFont().deriveFont(backButton.getFont().getStyle()& ~java.awt.Font.BOLD)); + backButton.setText(getMessage(BUTTON_BACK)); + backButton.setActionCommand(backcmd); + backButton.addActionListener(hardwareinfolistener); + backButton.setEnabled(true); + + //------------------------------------------------------------------------------------ + + readerpanel_border = new TitledBorder(null, getMessage(LABEL_CARDREADER), TitledBorder.LEADING, TitledBorder.TOP, null, null); + readerpanel_border.setTitleFont(readerpanel_border.getTitleFont().deriveFont( + readerpanel_border.getTitleFont().getStyle() + & java.awt.Font.BOLD)); + readerpanel = new JPanel(); + readerpanel.setBorder(readerpanel_border); + + + + cardpanel_border = new TitledBorder(null, getMessage(LABEL_SMARTCARD), TitledBorder.LEADING, TitledBorder.TOP, null, null); + cardpanel_border.setTitleFont(cardpanel_border.getTitleFont().deriveFont( + cardpanel_border.getTitleFont().getStyle() + & java.awt.Font.BOLD)); + cardpanel = new JPanel(); + cardpanel.setBorder(cardpanel_border); + cardpanel.setFont(cardpanel.getFont().deriveFont( + cardpanel.getFont().getStyle() + & java.awt.Font.BOLD)); + + GroupLayout gl_contentPane = new GroupLayout(mainPanel); + gl_contentPane.setHorizontalGroup( + gl_contentPane.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(gl_contentPane.createSequentialGroup() + .addContainerGap() + .addGroup(gl_contentPane.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(cardpanel, GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE) + .addComponent(readerpanel, GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE))) + ); + gl_contentPane.setVerticalGroup( + gl_contentPane.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(gl_contentPane.createSequentialGroup() + .addComponent(readerpanel, GroupLayout.DEFAULT_SIZE, 45, Short.MAX_VALUE) + .addGap(8) + .addComponent(cardpanel, GroupLayout.PREFERRED_SIZE, 89, Short.MAX_VALUE) + .addContainerGap()) + ); + + lblTyp = new JLabel(getMessage(LABEL_SMARTCARD_TYPE)); + lblTyp.setFont(lblTyp.getFont().deriveFont( + lblTyp.getFont().getStyle() + & java.awt.Font.BOLD)); + + + lblAtr = new JLabel(getMessage(LABEL_SMARTCARD_ATR)); + lblAtr.setFont(lblAtr.getFont().deriveFont( + lblAtr.getFont().getStyle() + & java.awt.Font.BOLD)); + + lblNewLabel_1 = new JLabel(showsmartcardname); + lblNewLabel_1.setFont(lblNewLabel_1.getFont().deriveFont( + lblNewLabel_1.getFont().getStyle() + & ~java.awt.Font.BOLD)); + + + lblNewLabel_2 = new JLabel(makeATRString(showsmartcardATR, 40)); + lblNewLabel_2.setVerticalAlignment(SwingConstants.CENTER); + lblNewLabel_2.setFont(lblNewLabel_2.getFont().deriveFont( + lblNewLabel_2.getFont().getStyle() + & ~java.awt.Font.BOLD)); + + GroupLayout gl_cardpanel = new GroupLayout(cardpanel); + gl_cardpanel.setHorizontalGroup( + gl_cardpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(gl_cardpanel.createSequentialGroup() + .addContainerGap() + .addGroup(gl_cardpanel.createParallelGroup(GroupLayout.Alignment.TRAILING) + .addComponent(lblTyp, GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE) + .addComponent(lblAtr, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addGroup(gl_cardpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(lblNewLabel_1, GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE) + .addComponent(lblNewLabel_2, GroupLayout.DEFAULT_SIZE, 233, Short.MAX_VALUE))) + ); + gl_cardpanel.setVerticalGroup( + gl_cardpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(gl_cardpanel.createSequentialGroup() + .addGroup(gl_cardpanel.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addGroup(gl_cardpanel.createSequentialGroup() + .addGap(2) + .addComponent(lblTyp, GroupLayout.DEFAULT_SIZE, 21, Short.MAX_VALUE)) + .addComponent(lblNewLabel_1, GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)) + .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_cardpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(lblNewLabel_2, GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE) + .addGroup(gl_cardpanel.createSequentialGroup() + .addComponent(lblAtr, GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE) + .addGap(6))) + .addGap(3)) + ); + cardpanel.setLayout(gl_cardpanel); + + lblNewLabel = new JLabel(showcardreadername); + lblNewLabel.setVerticalAlignment(SwingConstants.CENTER); + lblNewLabel.setFont(lblNewLabel.getFont().deriveFont( + lblNewLabel.getFont().getStyle() + & ~java.awt.Font.BOLD)); + + GroupLayout gl_readerpanel = new GroupLayout(readerpanel); + gl_readerpanel.setHorizontalGroup( + gl_readerpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(gl_readerpanel.createSequentialGroup() + .addContainerGap() + .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 276, Short.MAX_VALUE)) + ); + gl_readerpanel.setVerticalGroup( + gl_readerpanel.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(lblNewLabel, GroupLayout.DEFAULT_SIZE, 15, Short.MAX_VALUE) + ); + readerpanel.setLayout(gl_readerpanel); + mainPanel.setLayout(gl_contentPane); + + //------------------------------------------------------------------------------------ + + GroupLayout buttonPanelLayout = new GroupLayout(buttonPanel); + buttonPanel.setLayout(buttonPanelLayout); + + GroupLayout.ParallelGroup buttonHorizontal = buttonPanelLayout + .createParallelGroup(GroupLayout.Alignment.CENTER) + .addComponent(backButton, GroupLayout.PREFERRED_SIZE, buttonSize, GroupLayout.PREFERRED_SIZE); + + GroupLayout.Group buttonVertical = buttonPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(backButton); + + + buttonPanelLayout.setHorizontalGroup(buttonHorizontal); + buttonPanelLayout.setVerticalGroup(buttonVertical); + + + if (windowCloseAdapter != null) { + windowCloseAdapter.registerListener(hardwareinfolistener, backcmd); + } + + contentPanel.validate(); + + resize(); + } + }); + } + + @Override + public void resize() { + + log.debug("Resizing Hardware-Info Applet ..."); + + float factor = getResizeFactor(); + + + if (lblTyp != null) { + lblTyp.setFont(lblTyp.getFont().deriveFont( + (float) ((baseFontSize - 2)* factor))); + } + + if (lblAtr != null) { + lblAtr.setFont(lblAtr.getFont().deriveFont( + (float) ((baseFontSize - 2)* factor))); + } + + if (lblNewLabel != null) { + lblNewLabel.setFont(lblNewLabel.getFont().deriveFont( + (float) ((baseFontSize - 2)* factor))); + } + + if (lblNewLabel_1 != null) { + lblNewLabel_1.setFont(lblNewLabel_1.getFont().deriveFont( + (float) ((baseFontSize - 2)* factor))); + } + + if (lblNewLabel_2 != null) { + lblNewLabel_2.setFont(lblNewLabel_2.getFont().deriveFont( + (float) ((baseFontSize - 2)* factor))); + } + + if (cardpanel_border != null) { + cardpanel_border.setTitleFont(cardpanel_border.getTitleFont().deriveFont( + (float) ((baseFontSize)* factor))); + } + + if (readerpanel_border != null) { + readerpanel_border.setTitleFont(readerpanel_border.getTitleFont().deriveFont( + (float) ((baseFontSize)* factor))); + } + + if (backButton != null) { + + backButton.setFont(backButton.getFont().deriveFont( + (float) (baseFontSize * factor))); + + } + + super.resize(); + } + + private String makeATRString(String ATR, int width) { + + String line = new String(); + + if (ATR.length() > width) { + + line = line.concat("<html><body>"); + line = line.concat(ATR.substring(1, width)); + line = line.concat("<br>"); + line = line.concat(ATR.substring(width,ATR.length()-1)); + line = line.concat("</body></html>"); + + return line; + } + else + return ATR; + } + +} diff --git a/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUIFacade.java b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUIFacade.java new file mode 100644 index 00000000..c121417e --- /dev/null +++ b/BKUGuiExt/src/main/java/at/gv/egiz/bku/gui/GetHardwareInfoGUIFacade.java @@ -0,0 +1,43 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.gui; + +import java.awt.event.ActionListener; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public interface GetHardwareInfoGUIFacade extends BKUGUIFacade { + + public static final String LABEL_CARDREADER = "label.hardwareinfo.cardreader"; + public static final String LABEL_SMARTCARD = "label.hardwareinfo.smartcard"; + public static final String LABEL_SMARTCARD_TYPE = "label.hardwareinfo.smartcard.type"; + public static final String LABEL_SMARTCARD_ATR = "label.hardwareinfo.smartcard.atr"; + + public void showHardwareInfoDialog(final ActionListener hardwareinfolistener, final String backcmd, final String showcardreadername, + final String showsmartcardname, final String showsmartcardATR); + +} diff --git a/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages.properties b/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages.properties index a5e582a1..eefd451b 100644 --- a/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages.properties +++ b/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages.properties @@ -29,6 +29,8 @@ title.activate.success=<html>Success</html> title.change.success=<html>Success</html> title.unblock.success=<html>Success</html> title.identity=<html>Person Identity Link</html> +title.certificate.save=Save certificate +title.get.certificate=Save certificates # removed message.* prefix to reuse keys as help keys pin.mgmt=<html>{0} PINs available @@ -69,11 +71,21 @@ label.puk=<html>{0} PUK:</html> label.new.pin=<html>New {0}:</html> label.repeat.pin=<html>Confirmation:</html> +label.hardwareinfo.cardreader = Cardreader +label.hardwareinfo.smartcard = Smartcard +label.hardwareinfo.smartcard.type = Type: +label.hardwareinfo.smartcard.atr = ATR: + +file.certificate = Certificate + button.activate=Activate button.change=Change button.unblock=Unblock button.verify=Query +button.qualified.certificate = qualified certificate +button.simple.certificate = basic certificate + help.activation=help.activation help.pin.mgmt=help.pin.mgmt diff --git a/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages_de.properties b/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages_de.properties index 1935d31b..30a80e6f 100644 --- a/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages_de.properties +++ b/BKUGuiExt/src/main/resources/at/gv/egiz/bku/gui/ActivationMessages_de.properties @@ -35,6 +35,8 @@ identity.button=<html>Abbrechen</html> identity.firstname=<html>Vorname</html> identity.dateofbirth=<html>Geburtsdatum</html> identity.lastname=<html>Nachname</html> +title.certificate.save=Zertifikat speichern +title.get.certificate=Zertifikate speichern # removed message.* prefix to reuse keys as help keys pin.mgmt=<html>Die Karte verf\u00FCgt \u00FCber {0} PINs</html> @@ -69,11 +71,21 @@ label.puk=<html>{0} PUK:</html> label.new.pin=<html>Neue {0}:</html> label.repeat.pin=<html>Best\u00E4tigung:</html> +label.hardwareinfo.cardreader = Kartenlesegerät +label.hardwareinfo.smartcard = Chipkarte +label.hardwareinfo.smartcard.type = Typ: +label.hardwareinfo.smartcard.atr = ATR: + +file.certificate = Zertifikat + button.activate=Aktivieren button.change=\u00C4ndern button.unblock=Entsperren button.verify=Abfragen +button.qualified.certificate = Qualifiziertes Zertifikat +button.simple.certificate = Einfaches Zertifikat + help.activation=help.activation help.pin.mgmt=help.pin.mgmt diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java index c41ac234..27a5d8ca 100644 --- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java @@ -26,6 +26,8 @@ package at.gv.egiz.bku.local.stal; import at.gv.egiz.bku.gui.BKUGUIFacade; import at.gv.egiz.bku.smccstal.AbstractBKUWorker; +import at.gv.egiz.bku.smccstal.GETCertificateRequestHandler; +import at.gv.egiz.bku.smccstal.GETHardwareInfoRequestHandler; import at.gv.egiz.bku.smccstal.PINManagementRequestHandler; import at.gv.egiz.bku.smccstal.PersonIdentityLinkRequestHandler; import at.gv.egiz.stal.QuitRequest; @@ -34,6 +36,8 @@ import at.gv.egiz.stal.STALResponse; import at.gv.egiz.stal.SignRequest; import at.gv.egiz.stal.ext.PersonIdentityLinkRequest; +import at.gv.egiz.stal.ext.GETCertificateRequest; +import at.gv.egiz.stal.ext.GETHardwareInfoRequest; import at.gv.egiz.stal.ext.PINManagementRequest; import java.util.List; import javax.swing.JFrame; @@ -53,6 +57,8 @@ public class LocalBKUWorker extends AbstractBKUWorker { new LocalSignRequestHandler(new LocalSecureViewer(gui))); addRequestHandler(PINManagementRequest.class, new PINManagementRequestHandler()); addRequestHandler(PersonIdentityLinkRequest.class, new PersonIdentityLinkRequestHandler()); + addRequestHandler(GETCertificateRequest.class, new GETCertificateRequestHandler()); + addRequestHandler(GETHardwareInfoRequest.class, new GETHardwareInfoRequestHandler()); } /** does not change container's visibility (use quit request to close) */ diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGETCertificateSTALFactory.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGETCertificateSTALFactory.java new file mode 100644 index 00000000..50c6c632 --- /dev/null +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGETCertificateSTALFactory.java @@ -0,0 +1,136 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.local.stal; + +import at.gv.egiz.bku.viewer.ResourceFontLoader; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Locale; + + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.BKUIcons; +import at.gv.egiz.bku.gui.GetCertificateGUI; +import at.gv.egiz.bku.gui.GetCertificateGUIFacade; +import at.gv.egiz.bku.local.gui.GUIProxy; +import at.gv.egiz.bku.local.gui.LocalHelpListener; +import at.gv.egiz.stal.STAL; +import at.gv.egiz.stal.STALFactory; +import javax.swing.JFrame; + +import org.apache.commons.configuration.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class LocalGETCertificateSTALFactory implements STALFactory { + + private final Logger log = LoggerFactory.getLogger(LocalGETCertificateSTALFactory.class); + protected static final Dimension PREFERRED_SIZE = new Dimension(318, 200); + protected URL helpURL; + protected Locale locale; + + protected Configuration configuration; + + @Override + public STAL createSTAL() { + final LocalBKUWorker stal; + //http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html + // use undecorated JFrame instead of JWindow, + // which creates an invisible owning frame and therefore cannot getFocusInWindow() + JFrame dialog = new JFrame("Bürgerkarte"); + log.debug("AlwaysOnTop supported: {}.", dialog.isAlwaysOnTopSupported()); + // [#439] make mocca dialog alwaysOnTop + dialog.setAlwaysOnTop(true); + dialog.setIconImages(BKUIcons.icons); +// dialog.setUndecorated(true); +// dialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE); + + if (locale != null) { + dialog.setLocale(locale); + } + LocalHelpListener helpListener = null; + if (helpURL != null) { + helpListener = new LocalHelpListener(helpURL, locale); + } else { + log.warn("No HELP URL configured, help system disabled."); + } + GetCertificateGUIFacade gui = new GetCertificateGUI(dialog.getContentPane(), + dialog.getLocale(), + null, + new ResourceFontLoader(), + helpListener, + null); + BKUGUIFacade proxy = (BKUGUIFacade) GUIProxy.newInstance(gui, dialog, new Class[] { GetCertificateGUIFacade.class, } ); + stal = new LocalBKUWorker(proxy, dialog); + dialog.setPreferredSize(PREFERRED_SIZE); + dialog.pack(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension frameSize = dialog.getSize(); + if (frameSize.height > screenSize.height) { + frameSize.height = screenSize.height; + } + if (frameSize.width > screenSize.width) { + frameSize.width = screenSize.width; + } + dialog.setLocation((screenSize.width - frameSize.width) / 2, + (screenSize.height - frameSize.height) / 2); + + return stal; + } + + @Override + public void setLocale(Locale locale) { + this.locale = locale; + } + + /** + * spring injects helpURL + * @param helpURL + * @throws MalformedURLException if helpURL is not a valid URL + */ + public void setHelpURL(String helpURL) throws MalformedURLException { + this.helpURL = new URL(helpURL); + } + + /** + * @return the configuration + */ + public Configuration getConfiguration() { + return configuration; + } + + /** + * @param configuration the configuration to set + */ + public void setConfiguration(Configuration configuration) { + this.configuration = configuration; + } +} diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGetHardwareInfoSTALFactory.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGetHardwareInfoSTALFactory.java new file mode 100644 index 00000000..1caccf6f --- /dev/null +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalGetHardwareInfoSTALFactory.java @@ -0,0 +1,136 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.local.stal; + +import java.awt.Dimension; +import java.awt.Toolkit; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Locale; + +import javax.swing.JFrame; + +import org.apache.commons.configuration.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.BKUGUIFacade; +import at.gv.egiz.bku.gui.BKUIcons; +import at.gv.egiz.bku.gui.GetHardwareInfoGUI; +import at.gv.egiz.bku.gui.GetHardwareInfoGUIFacade; +import at.gv.egiz.bku.local.gui.GUIProxy; +import at.gv.egiz.bku.local.gui.LocalHelpListener; +import at.gv.egiz.bku.viewer.ResourceFontLoader; +import at.gv.egiz.stal.STAL; +import at.gv.egiz.stal.STALFactory; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class LocalGetHardwareInfoSTALFactory implements STALFactory { + + private final Logger log = LoggerFactory.getLogger(LocalGetHardwareInfoSTALFactory.class); + protected static final Dimension PREFERRED_SIZE = new Dimension(320, 270); + protected URL helpURL; + protected Locale locale; + + protected Configuration configuration; + + @Override + public STAL createSTAL() { + final LocalBKUWorker stal; + //http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html + // use undecorated JFrame instead of JWindow, + // which creates an invisible owning frame and therefore cannot getFocusInWindow() + JFrame dialog = new JFrame("Bürgerkarte"); + log.debug("AlwaysOnTop supported: {}.", dialog.isAlwaysOnTopSupported()); + // [#439] make mocca dialog alwaysOnTop + dialog.setAlwaysOnTop(true); + dialog.setIconImages(BKUIcons.icons); +// dialog.setUndecorated(true); +// dialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE); + + if (locale != null) { + dialog.setLocale(locale); + } + LocalHelpListener helpListener = null; + if (helpURL != null) { + helpListener = new LocalHelpListener(helpURL, locale); + } else { + log.warn("No HELP URL configured, help system disabled."); + } + GetHardwareInfoGUIFacade gui = new GetHardwareInfoGUI(dialog.getContentPane(), + dialog.getLocale(), + null, + new ResourceFontLoader(), + helpListener, + null); + BKUGUIFacade proxy = (BKUGUIFacade) GUIProxy.newInstance(gui, dialog, new Class[] { GetHardwareInfoGUIFacade.class, } ); + stal = new LocalBKUWorker(proxy, dialog); + dialog.setPreferredSize(PREFERRED_SIZE); + dialog.pack(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension frameSize = dialog.getSize(); + if (frameSize.height > screenSize.height) { + frameSize.height = screenSize.height; + } + if (frameSize.width > screenSize.width) { + frameSize.width = screenSize.width; + } + dialog.setLocation((screenSize.width - frameSize.width) / 2, + (screenSize.height - frameSize.height) / 2); + + return stal; + } + + @Override + public void setLocale(Locale locale) { + this.locale = locale; + } + + /** + * spring injects helpURL + * @param helpURL + * @throws MalformedURLException if helpURL is not a valid URL + */ + public void setHelpURL(String helpURL) throws MalformedURLException { + this.helpURL = new URL(helpURL); + } + + /** + * @return the configuration + */ + public Configuration getConfiguration() { + return configuration; + } + + /** + * @param configuration the configuration to set + */ + public void setConfiguration(Configuration configuration) { + this.configuration = configuration; + } +} diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GETCertificateServlet.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GETCertificateServlet.java new file mode 100644 index 00000000..d23937f9 --- /dev/null +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GETCertificateServlet.java @@ -0,0 +1,133 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.local.webapp; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.local.stal.LocalGETCertificateSTALFactory; +import at.gv.egiz.stal.QuitRequest; +import at.gv.egiz.stal.STAL; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETCertificateRequest; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETCertificateServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + private final Logger log = LoggerFactory.getLogger(GETCertificateServlet.class); + + LocalGETCertificateSTALFactory stalFactory; + + public GETCertificateServlet() { + log.debug("Constuctor: " + GETCertificateServlet.class); + stalFactory = new LocalGETCertificateSTALFactory(); + try { + stalFactory.setHelpURL("http://localhost:3495/help/"); + } catch (MalformedURLException e) { + log.info("Failed to set help URL.", e); + } + } + + /** + * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + STAL getCerTificateSTAL = stalFactory.createSTAL(); + + List<STALResponse> stalResps = getCerTificateSTAL.handleRequest(Collections.singletonList(new GETCertificateRequest())); + + log.debug("Received STAL reponse {}.", stalResps.get(0).getClass()); + + getCerTificateSTAL.handleRequest(Collections.singletonList(new QuitRequest())); + + String redirect = request.getParameter("redirect"); + if (redirect != null) { + String referer = request.getHeader("Referer"); + if (referer != null) { + redirect = new URL(new URL(referer), redirect).toExternalForm(); + } + response.sendRedirect(redirect); + } else { + response.setStatus(HttpServletResponse.SC_OK); + } + } + + // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> + /** + * Handles the HTTP <code>GET</code> method. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP <code>POST</code> method. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + } +} diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GetHardwareInfoServlet.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GetHardwareInfoServlet.java new file mode 100644 index 00000000..dc7762a8 --- /dev/null +++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/GetHardwareInfoServlet.java @@ -0,0 +1,133 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.local.webapp; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.local.stal.LocalGetHardwareInfoSTALFactory; +import at.gv.egiz.stal.QuitRequest; +import at.gv.egiz.stal.STAL; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETHardwareInfoRequest; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GetHardwareInfoServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + private final Logger log = LoggerFactory.getLogger(GetHardwareInfoServlet.class); + + LocalGetHardwareInfoSTALFactory stalFactory; + + public GetHardwareInfoServlet() { + log.debug("Constuctor: " + GetHardwareInfoServlet.class); + stalFactory = new LocalGetHardwareInfoSTALFactory(); + try { + stalFactory.setHelpURL("http://localhost:3495/help/"); + } catch (MalformedURLException e) { + log.info("Failed to set help URL.", e); + } + } + + /** + * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + STAL getHardwareInfoSTAL = stalFactory.createSTAL(); + + List<STALResponse> stalResps = getHardwareInfoSTAL.handleRequest(Collections.singletonList(new GETHardwareInfoRequest())); + + log.debug("Received STAL reponse {}.", stalResps.get(0).getClass()); + + getHardwareInfoSTAL.handleRequest(Collections.singletonList(new QuitRequest())); + + String redirect = request.getParameter("redirect"); + if (redirect != null) { + String referer = request.getHeader("Referer"); + if (referer != null) { + redirect = new URL(new URL(referer), redirect).toExternalForm(); + } + response.sendRedirect(redirect); + } else { + response.setStatus(HttpServletResponse.SC_OK); + } + } + + // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> + /** + * Handles the HTTP <code>GET</code> method. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP <code>POST</code> method. + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + * @return a String containing servlet description + */ + @Override + public String getServletInfo() { + return "Short description"; + } +} diff --git a/BKULocal/src/main/webapp/WEB-INF/web.xml b/BKULocal/src/main/webapp/WEB-INF/web.xml index 628bb044..41d5ab37 100644 --- a/BKULocal/src/main/webapp/WEB-INF/web.xml +++ b/BKULocal/src/main/webapp/WEB-INF/web.xml @@ -51,6 +51,14 @@ <servlet-name>IdentityLinkServlet</servlet-name> <servlet-class>at.gv.egiz.bku.local.webapp.IdentityLinkServlet</servlet-class> </servlet> + <servlet> + <servlet-name>GETCertificateServlet</servlet-name> + <servlet-class>at.gv.egiz.bku.local.webapp.GETCertificateServlet</servlet-class> + </servlet> + <servlet> + <servlet-name>GETHardwareInfoServlet</servlet-name> + <servlet-class>at.gv.egiz.bku.local.webapp.GetHardwareInfoServlet</servlet-class> + </servlet> <servlet-mapping> <servlet-name>BKUServlet</servlet-name> <url-pattern>/http-security-layer-request</url-pattern> @@ -60,7 +68,6 @@ <url-pattern>/https-security-layer-request</url-pattern> </servlet-mapping> <!-- Begin BKU Config --> - <servlet-mapping> <servlet-name>PINManagementServlet</servlet-name> <url-pattern>/PINManagement</url-pattern> @@ -69,6 +76,14 @@ <servlet-name>IdentityLinkServlet</servlet-name> <url-pattern>/IdentityLink</url-pattern> </servlet-mapping> + <servlet-mapping> + <servlet-name>GETCertificateServlet</servlet-name> + <url-pattern>/GETCertificate</url-pattern> + </servlet-mapping> + <servlet-mapping> + <servlet-name>GETHardwareInfoServlet</servlet-name> + <url-pattern>/GETHardwareinfo</url-pattern> + </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java index b507ea70..e6a79e97 100644 --- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java +++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java @@ -61,7 +61,8 @@ public class MoccaParameterBean { public static final String[] VALUES_APPLET_GUI_STYLE = new String[] {"tiny", "simple", "advanced"}; public static final String PARAM_APPLET_EXTENSION = "appletExtension"; - public static final String[] VALUES_APPLET_EXTENSION = new String[] {"pin", "activation", "identity"}; + public static final String[] VALUES_APPLET_EXTENSION = new String[] {"pin", "activation", + "getcertificate", "hardwareinfo", "identity"}; public static final String PARAM_LOCALE = "locale"; public static final Pattern PATTERN_LOCALE = Pattern.compile("[a-zA-Z][a-zA-Z](_[a-zA-Z][a-zA-Z]){0,2}"); diff --git a/BKUOnline/src/main/webapp/SLRequestForm.html b/BKUOnline/src/main/webapp/SLRequestForm.html index fb910264..cdfc4508 100644 --- a/BKUOnline/src/main/webapp/SLRequestForm.html +++ b/BKUOnline/src/main/webapp/SLRequestForm.html @@ -200,11 +200,13 @@ <label for="appletPage">Locale</label> <input value="de_AT" name="locale"/> </p> + <p> <label for="appletExtension">Extensions</label> <input type="radio" name="appletExtension" value="pin" onclick="setAppletDimension(295, 235)">PIN Management Applet <input type="radio" name="appletExtension" value="identity" onclick="setAppletDimension(295, 235)">Identity Link Applet - <!--<input type="checkbox" name="appletExtension" value="pin" onclick="setAppletDimension(295, 235)">PIN Management Applet--> + <input type="radio" name="appletExtension" value="getcertificate" onclick="setAppletDimension(295, 235)">Get Certificate Applet + <input type="radio" name="appletExtension" value="hardwareinfo" onclick="setAppletDimension(295, 235)">Hardwareinfo Applet </p> <!-- diff --git a/BKUOnline/src/main/webapp/applet.jsp b/BKUOnline/src/main/webapp/applet.jsp index bf657a9e..f6b07e7f 100644 --- a/BKUOnline/src/main/webapp/applet.jsp +++ b/BKUOnline/src/main/webapp/applet.jsp @@ -65,6 +65,14 @@ <c:set var="appletArchive" value="BKUAppletExt-single.jar"/> <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.IdentityLinkApplet.class"/> </c:when> + <c:when test="${requestScope.moccaParam.extension == 'getcertificate'}"> + <c:set var="appletArchive" value="BKUAppletExt-single.jar"/> + <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.GETCertificateApplet.class"/> + </c:when> + <c:when test="${requestScope.moccaParam.extension == 'hardwareinfo'}"> + <c:set var="appletArchive" value="BKUAppletExt-single.jar"/> + <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.HardwareInfoApplet.class"/> + </c:when> <c:otherwise> <c:set var="appletArchive" value="BKUApplet-single.jar"/> <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.BKUApplet.class"/> diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/GetCertificateInvoker.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/GetCertificateInvoker.java new file mode 100644 index 00000000..888206a6 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/GetCertificateInvoker.java @@ -0,0 +1,76 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.webstart; + +import java.io.IOException; +import java.net.HttpURLConnection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.webstart.gui.StatusNotifier; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GetCertificateInvoker implements Runnable { + + private static final Logger log = LoggerFactory.getLogger(GetCertificateInvoker.class); + + StatusNotifier status; + + public GetCertificateInvoker(StatusNotifier status) { + this.status = status; + } + + @Override + public void run() { + HttpURLConnection connection = null; + try { + log.debug("Connecting to: " + Launcher.GETCERTIFICATE_URL); + + connection = (HttpURLConnection) Launcher.GETCERTIFICATE_URL.openConnection(); + + connection.setRequestMethod("GET"); + connection.setReadTimeout(0); + connection.connect(); + + if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { + log.debug("get-certificate dialog returned"); + } else { + log.error("unexpected response from get-certificate dialog: " + connection.getResponseMessage()); + } + } catch (IOException ex) { + log.error("Failed to connect to get-certificate dialog", ex); + status.error(StatusNotifier.ERROR_PIN); + } finally { + if (connection != null) { + connection.disconnect(); + } + } + } + +} diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/HardwareInfoInvoker.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/HardwareInfoInvoker.java new file mode 100644 index 00000000..6baabfe1 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/HardwareInfoInvoker.java @@ -0,0 +1,76 @@ +/* + * Copyright 2012 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.webstart; + +import java.io.IOException; +import java.net.HttpURLConnection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.webstart.gui.StatusNotifier; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class HardwareInfoInvoker implements Runnable { + + private static final Logger log = LoggerFactory.getLogger(HardwareInfoInvoker.class); + + StatusNotifier status; + + public HardwareInfoInvoker(StatusNotifier status) { + this.status = status; + } + + @Override + public void run() { + HttpURLConnection connection = null; + try { + log.debug("Connecting to: " + Launcher.HARDWAREINFO_URL); + + connection = (HttpURLConnection) Launcher.HARDWAREINFO_URL.openConnection(); + + connection.setRequestMethod("GET"); + connection.setReadTimeout(0); + connection.connect(); + + if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { + log.debug("hardware-info dialog returned"); + } else { + log.error("unexpected response from hardware-info dialog: " + connection.getResponseMessage()); + } + } catch (IOException ex) { + log.error("Failed to connect to hardware-info dialog", ex); + status.error(StatusNotifier.ERROR_PIN); + } finally { + if (connection != null) { + connection.disconnect(); + } + } + } + +} diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java index 2719e990..0e510e2f 100644 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/Launcher.java @@ -66,19 +66,25 @@ public class Launcher implements BKUControllerInterface { public static final URL INSTALL_CERT_URL; public static final URL PIN_MANAGEMENT_URL; public static final URL IDENTITY_LINK_URL; + public static final URL GETCERTIFICATE_URL; public static final URL HELP_URL; + public static final URL HARDWAREINFO_URL; static { URL http = null; URL https = null; URL pin = null; URL ident = null; + URL getcertificate = null; + URL hardwareinfo = null; URL cert = null; URL help = null; try { http = new URL("http://localhost:" + Integer.getInteger(Container.HTTPS_PORT_PROPERTY, 3495).intValue() + '/'); https = new URL("https://localhost:" + Integer.getInteger(Container.HTTPS_PORT_PROPERTY, 3496).intValue() + '/'); pin = new URL(http, "/PINManagement"); + getcertificate = new URL(http, "/GETCertificate"); + hardwareinfo = new URL(http, "/GETHardwareinfo"); cert = new URL(http, "/ca.crt"); help = new URL(http, "/help/"); ident = new URL(http, "/IdentityLink"); @@ -89,6 +95,8 @@ public class Launcher implements BKUControllerInterface { HTTPS_SECURITY_LAYER_URL = https; PIN_MANAGEMENT_URL = pin; IDENTITY_LINK_URL = ident; + GETCERTIFICATE_URL = getcertificate; + HARDWAREINFO_URL = hardwareinfo; INSTALL_CERT_URL = cert; HELP_URL = help; } @@ -316,4 +324,14 @@ public class Launcher implements BKUControllerInterface { public void personIdentityLink(Locale locale) { new Thread(new PersonIdentityLinkInvoker(status)).start(); } + + @Override + public void getCertificate(Locale locale) { + new Thread(new GetCertificateInvoker(status)).start(); + } + + @Override + public void hardwareInfo(Locale locale) { + new Thread(new HardwareInfoInvoker(status)).start(); + } } diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java index 2d91f2f2..8c05f137 100644 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/BKUControllerInterface.java @@ -35,9 +35,13 @@ public interface BKUControllerInterface { public void showHelp(Locale locale); public void pinManagement(Locale locale); + + public void getCertificate(Locale locale); public void personIdentityLink(Locale locale); + public void hardwareInfo(Locale locale); + /** * Check if MOCCA Autostart is possible * @return autostart possibility diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java index 3c6fe6f0..f0b60877 100644 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java @@ -48,6 +48,8 @@ import org.slf4j.LoggerFactory; /** * @author clemenso * @author tkellner + * @author tlenz + * @author afitzek */ public class MOCCAIcon implements StatusNotifier, ActionListener, ItemListener { @@ -57,14 +59,17 @@ public class MOCCAIcon implements StatusNotifier, ActionListener, ItemListener { public static final String LABEL_ABOUT = "tray.label.about"; public static final String LABEL_SETTINGS = "tray.label.settings"; public static final String LABEL_AUTOSTART = "tray.label.autostart"; - public static final String LABEL_IDENTITYLINK = "tray.label.identitylink"; - public static final String LABEL_INFOMENU = "tray.label.infomenu"; public static final String TOOLTIP_DEFAULT = "tray.tooltip.default"; + public static final String LABEL_CARD = "tray.label.card"; + public static final String LABEL_GETCERTIFICATE = "tray.label.getcertificate"; + public static final String LABEL_INFO = "tray.label.info"; + public static final String LABEL_IDENTITYLINK = "tray.label.identitylink"; + public static final String LABEL_HARDWAREINFO = "tray.label.hardwareinfo"; /** action commands for tray menu */ private static enum COMMANDS { - SHUTDOWN_COMMAND, PIN_COMMAND, ABOUT_COMMAND, - HELP_COMMAND, AUTOSTART_COMMAND, IDENTITYLINK_COMMAND + SHUTDOWN_COMMAND, PIN_COMMAND, ABOUT_COMMAND, HELP_COMMAND, AUTOSTART_COMMAND, + GETCERTIFICATE_COMMAND, HARDWAREINFO_COMMAND, IDENTITYLINK_COMMAND }; private static final Logger log = LoggerFactory.getLogger(MOCCAIcon.class); @@ -107,19 +112,33 @@ public class MOCCAIcon implements StatusNotifier, ActionListener, ItemListener { helpItem.addActionListener(this); helpItem.setActionCommand(COMMANDS.HELP_COMMAND.name()); menu.add(helpItem); - - Menu infoMenu = new Menu(messages.getString(LABEL_INFOMENU)); - - MenuItem identityLinkItem = new MenuItem(messages.getString(LABEL_IDENTITYLINK)); - identityLinkItem.addActionListener(this); - identityLinkItem.setActionCommand(COMMANDS.IDENTITYLINK_COMMAND.name()); - infoMenu.add(identityLinkItem); + Menu cardMenu = new Menu(messages.getString(LABEL_CARD)); + menu.add(cardMenu); + MenuItem pinItem = new MenuItem(messages.getString(LABEL_PIN)); pinItem.addActionListener(this); pinItem.setActionCommand(COMMANDS.PIN_COMMAND.name()); - menu.add(pinItem); + cardMenu.add(pinItem); + + MenuItem getcertificateItem = new MenuItem(messages.getString(LABEL_GETCERTIFICATE)); + getcertificateItem.addActionListener(this); + getcertificateItem.setActionCommand(COMMANDS.GETCERTIFICATE_COMMAND.name()); + cardMenu.add(getcertificateItem); + + Menu infoMenu = new Menu(messages.getString(LABEL_INFO)); + menu.add(infoMenu); + MenuItem identitylinkItem = new MenuItem(messages.getString(LABEL_IDENTITYLINK)); + identitylinkItem.addActionListener(this); + identitylinkItem.setActionCommand(COMMANDS.IDENTITYLINK_COMMAND.name()); + infoMenu.add(identitylinkItem); + + MenuItem hardwareinfoItem = new MenuItem(messages.getString(LABEL_HARDWAREINFO)); + hardwareinfoItem.addActionListener(this); + hardwareinfoItem.setActionCommand(COMMANDS.HARDWAREINFO_COMMAND.name()); + infoMenu.add(hardwareinfoItem); + MenuItem aboutItem = new MenuItem( messages.getString(LABEL_ABOUT)); aboutItem.setActionCommand(COMMANDS.ABOUT_COMMAND.name()); @@ -239,6 +258,16 @@ public class MOCCAIcon implements StatusNotifier, ActionListener, ItemListener { controller.pinManagement(messages.getLocale()); break; + case GETCERTIFICATE_COMMAND: + log.debug("get-certificate dialog requested via tray menu"); + controller.getCertificate(messages.getLocale()); + break; + + case HARDWAREINFO_COMMAND: + log.debug("hardware-info dialog requested via tray menu"); + controller.hardwareInfo(messages.getLocale()); + break; + case HELP_COMMAND: log.debug("help page requested via tray menu"); controller.showHelp(messages.getLocale()); diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages.properties b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages.properties index 6069874f..3a01570e 100644 --- a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages.properties +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages.properties @@ -38,9 +38,14 @@ tray.label.pin=PIN management tray.label.help=Help tray.label.about=About... tray.label.settings=Settings -tray.label.infomenu=Infos tray.label.autostart=Autostart -tray.label.identitylink=IdentityLink + +tray.label.card=Card +tray.label.getcertificate=Save certificate +tray.label.info=Info +tray.label.identitylink=Identitylink +tray.label.hardwareinfo=Hardware + tray.tooltip.default=CitizenCard about.frame.title=CitizenCard about.title=<html>CitizenCard Environment diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages_de.properties b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages_de.properties index a07abb63..da4ff47d 100644 --- a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages_de.properties +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/messages_de.properties @@ -38,11 +38,17 @@ tray.label.help=Hilfe tray.label.about=\u00DCber... tray.label.settings=Einstellungen tray.label.autostart=Autostart -tray.label.infomenu=Informationen + +tray.label.card=Karte +tray.label.getcertificate=Zertifikat speichern +tray.label.info=Infos tray.label.identitylink=Personenbindung +tray.label.hardwareinfo=Hardware + tray.tooltip.default=B\u00FCrgerkartenumgebung about.frame.title=B\u00FCrgerkarte about.title=<html>B\u00FCrgerkartenumgebung about.version=<html>Version: {0} button.ok=Best\u00E4tigen button.close=Schlie\u00DFen + diff --git a/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateRequest.java b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateRequest.java new file mode 100644 index 00000000..7d488170 --- /dev/null +++ b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateRequest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.stal.ext; + +import at.gv.egiz.stal.STALRequest; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETCertificateRequest extends STALRequest { + +} diff --git a/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateResponse.java b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateResponse.java new file mode 100644 index 00000000..bb95cc5b --- /dev/null +++ b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETCertificateResponse.java @@ -0,0 +1,35 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.stal.ext; + +import at.gv.egiz.stal.STALResponse; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETCertificateResponse extends STALResponse { + +} diff --git a/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoRequest.java b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoRequest.java new file mode 100644 index 00000000..e4204a9e --- /dev/null +++ b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoRequest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.stal.ext; + +import at.gv.egiz.stal.STALRequest; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETHardwareInfoRequest extends STALRequest { + +} diff --git a/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoResponse.java b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoResponse.java new file mode 100644 index 00000000..cbe5c965 --- /dev/null +++ b/STALExt/src/main/java/at/gv/egiz/stal/ext/GETHardwareInfoResponse.java @@ -0,0 +1,35 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.stal.ext; + +import at.gv.egiz.stal.STALResponse; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETHardwareInfoResponse extends STALResponse { + +} diff --git a/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java b/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java index 0104cdb3..deed447d 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java @@ -43,6 +43,7 @@ public abstract class AbstractSignatureCard implements SignatureCard { protected Locale locale = Locale.getDefault(); private Card card_; + private String cardterminalname; protected CardReader reader; @@ -67,6 +68,7 @@ public abstract class AbstractSignatureCard implements SignatureCard { public void init(Card card, CardTerminal cardTerminal) { this.card_ = card; this.reader = ReaderFactory.getReader(card, cardTerminal); + this.cardterminalname = cardTerminal.getName(); } @Override @@ -74,6 +76,10 @@ public abstract class AbstractSignatureCard implements SignatureCard { return card_; } + public String getTerminalName() { + return(cardterminalname); + } + protected CardChannel getCardChannel() { if(card_.getProtocol().equalsIgnoreCase("T=0")) { diff --git a/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java b/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java index 33f4019b..7150c8b4 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java @@ -121,6 +121,10 @@ public class SWCard implements SignatureCard { return null; } + public String getTerminalName() { + return null; + } + private String getFileName(String fileName) { String fs = System.getProperty("file.separator"); return swCardDir + fs + fileName; diff --git a/smcc/src/main/java/at/gv/egiz/smcc/SignatureCard.java b/smcc/src/main/java/at/gv/egiz/smcc/SignatureCard.java index 56ae7b74..b3cbaec8 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/SignatureCard.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/SignatureCard.java @@ -85,6 +85,8 @@ public interface SignatureCard { public Card getCard(); + public String getTerminalName(); + public byte[] getCertificate(KeyboxName keyboxName, PINGUI pinGUI) throws SignatureCardException, InterruptedException; diff --git a/smccSTAL/src/test/java/at/gv/egiz/smcc/AbstractSMCCSTALTest.java b/smccSTAL/src/test/java/at/gv/egiz/smcc/AbstractSMCCSTALTest.java index 993b8425..a9e5bce3 100644 --- a/smccSTAL/src/test/java/at/gv/egiz/smcc/AbstractSMCCSTALTest.java +++ b/smccSTAL/src/test/java/at/gv/egiz/smcc/AbstractSMCCSTALTest.java @@ -110,7 +110,13 @@ public class AbstractSMCCSTALTest extends AbstractSMCCSTAL implements public void reset() throws SignatureCardException {
// TODO Auto-generated method stub
- }
+ } + + @Override + public String getTerminalName() { + // TODO Auto-generated method stub + return null; + }
};
return false;
}
diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java new file mode 100644 index 00000000..d564b735 --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETCertificateRequestHandler.java @@ -0,0 +1,129 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.smccstal; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.GetCertificateGUIFacade; +import at.gv.egiz.bku.pin.gui.VerifyPINGUI; +import at.gv.egiz.smcc.SignatureCard; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.stal.STALRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETCertificateRequest; +import at.gv.egiz.stal.ext.GETCertificateResponse; + +public class GETCertificateRequestHandler extends AbstractRequestHandler { + + private final Logger log = LoggerFactory.getLogger(GETCertificateRequestHandler.class); + + @Override + public boolean requireCard() { + return true; + } + + @Override + public STALResponse handleRequest(STALRequest request) + throws InterruptedException { + + log.debug("handle a GETCertificateRequest"); + + if (request instanceof GETCertificateRequest) { + + GetCertificateGUIFacade gui = (GetCertificateGUIFacade) this.gui; + + gui.showGETCertificateDialog(this, "getqualcert", "getsimcert", this, "cancel"); + + while (true) { + + waitForAction(); + + try { + + if ("cancel".equals(actionCommand)) { + log.debug("get certificate response cancel."); + return new GETCertificateResponse(); + + } else if ("getqualcert".equals(actionCommand)) { + + File file = gui.showSaveDialog(GetCertificateGUIFacade.FILENAME_QUAL_CERT); + byte[] cert = card.getCertificate(SignatureCard.KeyboxName.SECURE_SIGNATURE_KEYPAIR, + new VerifyPINGUI(gui)); + + FileOutputStream fstream = new FileOutputStream(file); + fstream.write(cert); + fstream.close(); + + log.debug("qualified certificate are saved to | " + file.getAbsolutePath() + "."); + + return new GETCertificateResponse(); + + } else if ("getsimcert".equals(actionCommand)) { + + File file = gui.showSaveDialog(GetCertificateGUIFacade.FILENAME_SIM_CERT); + + FileOutputStream fstream = new FileOutputStream(file); + fstream.write(card.getCertificate(SignatureCard.KeyboxName.CERTIFIED_KEYPAIR, + new VerifyPINGUI(gui))); + fstream.close(); + + log.debug("simple certificate are saved to | " + file.getAbsolutePath() + "."); + + return new GETCertificateResponse(); + } + else { + log.info("unknown command resolved."); + } + + } catch (FileNotFoundException e) { + log.error("file to save the certificate could not be found.", e); + + } catch (SignatureCardException e) { + log.error("Card not activated or certificate is not available.", e); + gui.showErrorDialog(GetCertificateGUIFacade.ERR_CARD_NOTACTIVATED, + null, this, "cancel"); + + } catch (NullPointerException e) { + log.error("save certificate file selection aborted.", e); + + } catch (Exception e) { + log.error("a general error occur during the certificate save operation.", e); + } + } + } + + return new GETCertificateResponse(); + } + +} diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java new file mode 100644 index 00000000..d2b3b050 --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/GETHardwareInfoRequestHandler.java @@ -0,0 +1,106 @@ +/* + * Copyright 2011 by Graz University of Technology, Austria + * MOCCA has been developed by the E-Government Innovation Center EGIZ, a joint + * initiative of the Federal Chancellery Austria and Graz University of Technology. + * + * 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://www.osor.eu/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. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.gv.egiz.bku.smccstal; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.GetHardwareInfoGUIFacade; +import at.gv.egiz.stal.STALRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.GETHardwareInfoRequest; +import at.gv.egiz.stal.ext.GETHardwareInfoResponse; + +/** +* +* @author Thomas Lenz <thomas.lenz@iaik.tugraz.at> +*/ + +public class GETHardwareInfoRequestHandler extends AbstractRequestHandler { + + private final Logger log = LoggerFactory.getLogger(GETHardwareInfoRequestHandler.class); + + @Override + public boolean requireCard() { + return true; + } + + @Override + public STALResponse handleRequest(STALRequest request) + throws InterruptedException { + + log.debug("handle a get-hardware info request"); + + if (request instanceof GETHardwareInfoRequest) { + + try { + String terminal = card.getTerminalName(); + String smartcard = card.toString(); + String smartcard_ATR = toString(card.getCard().getATR().getBytes()); + + } catch (SignatureCardException e) { + log.error("Some error occur during card communication.", e); + gui.showErrorDialog(GetHardwareInfoGUIFacade.ERR_CARD_NOTACTIVATED, + null, this, "cancel"); + } + + + + GetHardwareInfoGUIFacade gui = (GetHardwareInfoGUIFacade) this.gui; + + gui.showHardwareInfoDialog(this, "back", terminal, smartcard, smartcard_ATR); + + while (true) { + + waitForAction(); + + if ("back".equals(actionCommand)) { + log.debug("show hardware info response back."); + return new GETHardwareInfoResponse(); + + } else { + log.info("unknown command resolved."); + } + } + } + return new GETHardwareInfoResponse(); + } + + private static String toString(byte[] b) { + StringBuffer sb = new StringBuffer(); + sb.append('['); + if (b != null && b.length > 0) { + sb.append(Integer.toHexString((b[0] & 240) >> 4)); + sb.append(Integer.toHexString(b[0] & 15)); + for (int i = 1; i < b.length; i++) { + sb.append((i % 32 == 0) ? '\n' : ':'); + sb.append(Integer.toHexString((b[i] & 240) >> 4)); + sb.append(Integer.toHexString(b[i] & 15)); + } + } + sb.append(']'); + return sb.toString(); + } + +} |