diff options
13 files changed, 149 insertions, 14 deletions
diff --git a/BKULocal/src/main/webapp/WEB-INF/applicationContext.xml b/BKULocal/src/main/webapp/WEB-INF/applicationContext.xml index 2ddd46a1..b219fdd8 100644 --- a/BKULocal/src/main/webapp/WEB-INF/applicationContext.xml +++ b/BKULocal/src/main/webapp/WEB-INF/applicationContext.xml @@ -98,6 +98,11 @@ <property name="resource" value="file:${user.home}/.mocca/conf/defaultConf.properties"/>
<property name="certValidator" ref="certValidator"></property>
</bean>
-
-
+
+ <!-- Begin MOCCA Configuration [REFACTORED]
+ | Configuration beans (no conf properties file) should be injected directly to module configurators.
+ | Currently, only the ReaderFactory configuration is considered.
+ |-->
+ <import resource="file:${user.home}/.mocca/conf/mocca-conf.xml"/>
+
</beans>
\ No newline at end of file diff --git a/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml b/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml index 6a234b73..5681fa89 100644 --- a/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml +++ b/BKUOnline/src/main/webapp/WEB-INF/applicationContext.xml @@ -103,4 +103,11 @@ <bean id="shutdown" class="at.gv.egiz.bku.online.webapp.ShutdownHandler">
<property name="bindingProcessorManager" ref="bindingProcessorManager"></property>
</bean>
+
+ <!-- Begin MOCCA Configuration [REFACTORED]
+ | Configuration beans (no conf properties file) should be injected directly to module configurators.
+ | Currently, only the ReaderFactory configuration is considered.
+ |-->
+ <import resource="mocca-conf.xml"/>
+
</beans>
\ No newline at end of file diff --git a/BKUOnline/src/main/webapp/WEB-INF/mocca-conf.xml b/BKUOnline/src/main/webapp/WEB-INF/mocca-conf.xml new file mode 100644 index 00000000..54e08e9b --- /dev/null +++ b/BKUOnline/src/main/webapp/WEB-INF/mocca-conf.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2008 Federal Chancellery Austria and + Graz University of Technology + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- + | User configuration file. (defaultConf.properties is migrated to this file) +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> + + <!-- + | ReaderFactory configuration not available in Applet + | + <bean id="smccConfiguration" class="at.gv.egiz.smcc.conf.SMCCConfiguration"> + <property name="disablePinpad" value="true"/> + </bean> + + <bean id="readerFactory" class="at.gv.egiz.smcc.ccid.ReaderFactory" factory-method="getInstance"> + <property name="configuration" ref="smccConfiguration"/> + </bean> + |--> + +</beans> diff --git a/BKUOnline/src/main/webapp/WEB-INF/web.xml b/BKUOnline/src/main/webapp/WEB-INF/web.xml index a164a384..e41e2265 100644 --- a/BKUOnline/src/main/webapp/WEB-INF/web.xml +++ b/BKUOnline/src/main/webapp/WEB-INF/web.xml @@ -111,7 +111,7 @@ <!-- End STAL Config --> <!-- Begin BKU Web Start Config - | (activate 'include-webstart' profile) + | (activate 'include-webstart' profile) <servlet> <servlet-name>JnlpDownloadServlet</servlet-name> <servlet-class>jnlp.sample.servlet.JnlpDownloadServlet</servlet-class> diff --git a/BKUOnline/src/main/webapp/index.html b/BKUOnline/src/main/webapp/index.html index e5180aa9..2ec41746 100644 --- a/BKUOnline/src/main/webapp/index.html +++ b/BKUOnline/src/main/webapp/index.html @@ -39,7 +39,7 @@ </div> <!-- MOCCA Web Start - | (activate 'include-webstart' profile) + | (activate 'include-webstart' profile) <div id="animDiv" class="box"> <p> <h1>MOCCA Web Start</h1> diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java index 36c9cbb2..5e4ab634 100644 --- a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/BKULauncher.java @@ -56,8 +56,8 @@ public class BKULauncher implements BKUControllerInterface { /** configurations with less than this (major) version will be backuped and updated */
public static final String MIN_CONFIG_VERSION = "1.0.3";
public static final String CONFIG_DIR = ".mocca/conf/";
- public static final String CONF_TEMPLATE_FILE = "template.zip";
- public static final String CONF_TEMPLATE_RESOURCE = "at/gv/egiz/bku/webstart/conf/template.zip";
+ public static final String CONF_TEMPLATE_FILE = "configuration.zip";
+ public static final String CONF_TEMPLATE_RESOURCE = "at/gv/egiz/bku/webstart/conf/configuration.zip";
public static final String WEBAPP_RESOURCE = "BKULocal.war";
public static final String WEBAPP_FILE = "BKULocal.war";
public static final String KEYSTORE_FILE = "keystore.ks";
diff --git a/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/conf/configuration.zip b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/conf/configuration.zip Binary files differnew file mode 100644 index 00000000..74465445 --- /dev/null +++ b/BKUWebStart/src/main/resources/at/gv/egiz/bku/webstart/conf/configuration.zip 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 7dd3ee78..f0f8b8c8 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/AbstractSignatureCard.java @@ -455,7 +455,7 @@ public abstract class AbstractSignatureCard implements SignatureCard { @Override public void init(Card card, CardTerminal cardTerminal) { this.card_ = card; - this.reader = ReaderFactory.getReader(card, cardTerminal); + this.reader = ReaderFactory.getInstance().getReader(card, cardTerminal); ATR atr = card.getATR(); byte[] atrBytes = atr.getBytes(); if (atrBytes.length >= 6) { 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 2ed1fe64..da084e0d 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/SWCard.java @@ -483,6 +483,11 @@ public class SWCard implements SignatureCard { public byte[] modifyPinDirect(byte[] PIN_MODIFY) throws CardException { throw new UnsupportedOperationException("Not supported yet."); } + + @Override + public void setDisablePinpad(boolean disable) { + throw new UnsupportedOperationException("Not supported yet."); + } }; } } diff --git a/smcc/src/main/java/at/gv/egiz/smcc/ccid/CCID.java b/smcc/src/main/java/at/gv/egiz/smcc/ccid/CCID.java index 56ebaffe..2972f3b8 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/ccid/CCID.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/ccid/CCID.java @@ -62,6 +62,8 @@ public interface CCID { Card connect() throws CardException; + void setDisablePinpad(boolean disable); + boolean hasFeature(Byte feature); /** diff --git a/smcc/src/main/java/at/gv/egiz/smcc/ccid/DefaultReader.java b/smcc/src/main/java/at/gv/egiz/smcc/ccid/DefaultReader.java index 0de6bb17..580b9379 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/ccid/DefaultReader.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/ccid/DefaultReader.java @@ -55,6 +55,7 @@ public class DefaultReader implements CCID { protected Card icc; protected CardTerminal ct; + protected boolean disablePinpad = false; /** * supported features and respective control codes @@ -78,6 +79,11 @@ public class DefaultReader implements CCID { log.debug("setting max pin length: " + getwPINMaxExtraDigitL()); } + @Override + public void setDisablePinpad(boolean disable) { + disablePinpad = disable; + } + /** * * @return the card terminals name @@ -137,7 +143,7 @@ public class DefaultReader implements CCID { @Override public boolean hasFeature(Byte feature) { - if (features != null) { + if (features != null && !disablePinpad) { return features.containsKey(feature); } return false; diff --git a/smcc/src/main/java/at/gv/egiz/smcc/ccid/ReaderFactory.java b/smcc/src/main/java/at/gv/egiz/smcc/ccid/ReaderFactory.java index ae21e5e0..5b94de05 100644 --- a/smcc/src/main/java/at/gv/egiz/smcc/ccid/ReaderFactory.java +++ b/smcc/src/main/java/at/gv/egiz/smcc/ccid/ReaderFactory.java @@ -17,8 +17,11 @@ package at.gv.egiz.smcc.ccid; +import at.gv.egiz.smcc.conf.SMCCConfiguration; import javax.smartcardio.Card; import javax.smartcardio.CardTerminal; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * @@ -26,9 +29,33 @@ import javax.smartcardio.CardTerminal; */ public class ReaderFactory { - public static CCID getReader(Card icc, CardTerminal ct) { + protected final static Log log = LogFactory.getLog(ReaderFactory.class); + + protected SMCCConfiguration configuration; + private static ReaderFactory instance; + + private ReaderFactory() { + } + + public static ReaderFactory getInstance() { + if (instance == null) { + instance = new ReaderFactory(); + } + return instance; + } + + /** + * @param configuration the configuration to set + */ + public void setConfiguration(SMCCConfiguration configuration) { + this.configuration = configuration; + } + + public CCID getReader(Card icc, CardTerminal ct) { + CCID reader; String name = ct.getName(); if (name != null) { + log.info("creating reader " + name); name = name.toLowerCase(); //ReinerSCT: http://support.reiner-sct.de/downloads/LINUX // http://www.linux-club.de/viewtopic.php?f=61&t=101287&start=0 @@ -36,15 +63,26 @@ public class ReaderFactory { //new (CCID): 0C4B/0300 Reiner-SCT cyberJack pinpad(a) 00 00 //display: REINER SCT CyberJack 00 00 if(name.startsWith("gemplus gempc pinpad")) { - return new GemplusGemPCPinpad(icc, ct); + reader = new GemplusGemPCPinpad(icc, ct); } else if (name.startsWith("omnikey cardman 3621")) { - return new OMNIKEYCardMan3621(icc, ct); + reader = new OMNIKEYCardMan3621(icc, ct); } else if (name.startsWith("scm microsystems inc. sprx32 usb smart card reader")) { - return new SCMMicrosystemsSPRx32(icc, ct); + reader = new SCMMicrosystemsSPRx32(icc, ct); } else if (name.startsWith("cherry smartboard xx44")) { - return new CherrySmartBoardXX44(icc, ct); + reader = new CherrySmartBoardXX44(icc, ct); + } else { + log.info("no suitable implementation found, using default"); + reader = new DefaultReader(icc, ct); } + } else { + reader = new DefaultReader(icc, ct); + } + + if (configuration != null) { + String disablePinpad = configuration.getProperty(SMCCConfiguration.DISABLE_PINPAD_P); + log.debug("setting disablePinpad to " + Boolean.parseBoolean(disablePinpad)); + reader.setDisablePinpad(Boolean.parseBoolean(disablePinpad)); } - return new DefaultReader(icc, ct); + return reader; } } diff --git a/smcc/src/main/java/at/gv/egiz/smcc/conf/SMCCConfiguration.java b/smcc/src/main/java/at/gv/egiz/smcc/conf/SMCCConfiguration.java new file mode 100644 index 00000000..8ea49ca6 --- /dev/null +++ b/smcc/src/main/java/at/gv/egiz/smcc/conf/SMCCConfiguration.java @@ -0,0 +1,33 @@ +/* + * Copyright 2008 Federal Chancellery Austria and + * Graz University of Technology + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package at.gv.egiz.smcc.conf; + +import java.util.Properties; + +/** + * + * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at> + */ +public class SMCCConfiguration extends Properties { + + public static final String DISABLE_PINPAD_P = "disable.pinpad"; + + public void setDisablePinpad(String value) { + this.setProperty(DISABLE_PINPAD_P, value); + } +} |