From 50f7be0c55da14e1b73c39aa18db9808949387bc Mon Sep 17 00:00:00 2001 From: tkellner Date: Mon, 2 Apr 2012 16:38:53 +0000 Subject: Person Identity Link Extension: for Webstart and Applet version git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@1040 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../egiz/bku/smccstal/IdentityLinkExtractor.java | 86 +++++++++++++++ .../smccstal/PersonIdentityLinkRequestHandler.java | 117 +++++++++++++++++++++ 2 files changed, 203 insertions(+) create mode 100644 smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/IdentityLinkExtractor.java create mode 100644 smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/PersonIdentityLinkRequestHandler.java (limited to 'smccSTALExt/src/main/java') diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/IdentityLinkExtractor.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/IdentityLinkExtractor.java new file mode 100644 index 00000000..b1aa9326 --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/IdentityLinkExtractor.java @@ -0,0 +1,86 @@ +/* + * 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 java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import iaik.me.asn1.ASN1; + +public class IdentityLinkExtractor { + + private static final Logger log = LoggerFactory.getLogger(IdentityLinkExtractor.class); + + private static ASN1 getPersonData(ASN1 identityLink) throws IOException + { + if(identityLink.getSize() > 4 ) + { + ASN1 data = identityLink.getElementAt(4).gvASN1(); + if(data.getTagClass() != 0) + { + log.error("CorporateBodyData currently not supported."); + return null; + } + return data; + } + else + { + log.error("IdentityLink ASN1 invalid size = " + identityLink.getSize()); + return null; + } + } + + public static String getPersonFirstName(ASN1 identityLink) throws IOException + { + ASN1 personData = getPersonData(identityLink); + if(personData != null) + { + return personData.getElementAt(1).gvString(); + } + return null; + } + + public static String getPersonLastName(ASN1 identityLink) throws IOException + { + ASN1 personData = getPersonData(identityLink); + if(personData != null) + { + return personData.getElementAt(2).gvString(); + } + return null; + } + + public static String getPersonDateOfBirth(ASN1 identityLink) throws IOException + { + ASN1 personData = getPersonData(identityLink); + if(personData != null) + { + return personData.getElementAt(3).gvString(); + } + return null; + } +} diff --git a/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/PersonIdentityLinkRequestHandler.java b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/PersonIdentityLinkRequestHandler.java new file mode 100644 index 00000000..d8af52ee --- /dev/null +++ b/smccSTALExt/src/main/java/at/gv/egiz/bku/smccstal/PersonIdentityLinkRequestHandler.java @@ -0,0 +1,117 @@ +/* + * 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 iaik.me.asn1.ASN1; + +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.bku.gui.PINManagementGUIFacade; +import at.gv.egiz.bku.gui.PersonIdentityLinkGUIFacade; +import at.gv.egiz.bku.pin.gui.VerifyPINGUI; +import at.gv.egiz.smcc.SignatureCardException; +import at.gv.egiz.stal.ErrorResponse; +import at.gv.egiz.stal.STALRequest; +import at.gv.egiz.stal.STALResponse; +import at.gv.egiz.stal.ext.PersonIdentityLinkRequest; +import at.gv.egiz.stal.ext.PersonIdentityLinkResponse; + +/** + * + * @author Andreas Fitzek + */ +public class PersonIdentityLinkRequestHandler extends AbstractRequestHandler { + + private final static String IdentityInfoBox = "IdentityLink"; + + private final Logger log = LoggerFactory.getLogger(PersonIdentityLinkRequestHandler.class); + + //PersonIdentityLinkGUIFacade person_gui = (PersonIdentityLinkGUIFacade) this.gui; + + @Override + public boolean requireCard() { + return true; + } + + @Override + public STALResponse handleRequest(STALRequest request) + throws InterruptedException { + if(request instanceof PersonIdentityLinkRequest) + { + try + { + byte[] identity_asn1 = card.getInfobox(IdentityInfoBox, new VerifyPINGUI(gui), ""); + + ASN1 identity_object = new ASN1(identity_asn1); + + String firstname = IdentityLinkExtractor.getPersonFirstName(identity_object); + String lastname = IdentityLinkExtractor.getPersonLastName(identity_object); + String dateofBirth = IdentityLinkExtractor.getPersonDateOfBirth(identity_object); + + // TODO: correct error handling ... + PersonIdentityLinkGUIFacade person_gui = null; + + if(gui instanceof PersonIdentityLinkGUIFacade) + { + person_gui = (PersonIdentityLinkGUIFacade) gui; + } + + if(person_gui == null) + { + log.warn("Failed to cast gui to PersonIdentityLinkGUIFacade!"); + return new ErrorResponse(1000); + } + + person_gui.showPersonIdentityLinkInformationDialog(this, "ok_action", + firstname, + lastname, + dateofBirth); + + waitForAction(); + + return new PersonIdentityLinkResponse(); + } + catch(SignatureCardException ex) + { + log.error(ex.getMessage(), ex); + //gui.showErrorDialog(errorMsgKey, errorMsgParams) + //waitForAction(); + return new ErrorResponse(1000); + } catch (IOException ex) { + log.error(ex.getMessage(), ex); + //gui.showErrorDialog(errorMsgKey, errorMsgParams) + //waitForAction(); + return new ErrorResponse(1000); + } + } + else + { + log.error("Got unexpected STAL request: {}.", request); + return new ErrorResponse(1000); + } + } +} -- cgit v1.2.3