summaryrefslogtreecommitdiff
path: root/BKULocal/src/main/java/at/gv/egiz/bku
diff options
context:
space:
mode:
Diffstat (limited to 'BKULocal/src/main/java/at/gv/egiz/bku')
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/accesscontroller/SpringSecurityManager.java65
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/conf/SpringConfigurator.java142
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/gui/GUIProxy.java2
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/gui/LocalHelpListener.java58
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTAL.java76
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTALFactory.java65
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalBKUWorker.java2
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSTALFactory.java69
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java24
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java9
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/BKURequestHandler.java135
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/MoccaContextListener.java93
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/PINManagementServlet.java12
-rw-r--r--BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/SpringBKUServlet.java9
14 files changed, 422 insertions, 339 deletions
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/accesscontroller/SpringSecurityManager.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/accesscontroller/SpringSecurityManager.java
deleted file mode 100644
index 3f50fc78..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/accesscontroller/SpringSecurityManager.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.bku.local.accesscontroller;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.context.ResourceLoaderAware;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-
-import at.gv.egiz.bku.accesscontroller.SecurityManagerFacade;
-import at.gv.egiz.bku.conf.Configurator;
-
-public class SpringSecurityManager extends SecurityManagerFacade implements
- ResourceLoaderAware {
-
- private ResourceLoader resourceLoader;
-
- private static Log log = LogFactory.getLog(SpringSecurityManager.class);
-
- protected Configurator config;
-
- public void setConfig(Configurator config) {
- this.config = config;
- }
-
- public void init() {
- String noMatch = config.getProperty("AccessController.acceptNoMatch");
- if (noMatch != null) {
- log.debug("Setting allow now match to: " + noMatch);
- setAllowUnmatched(Boolean.getBoolean(noMatch));
- }
- String policy = config.getProperty("AccessController.policyResource");
- policy = policy.replace("${user.home}", System.getProperty("user.home"));
- log.info("Loading resource: " + policy);
- try {
- Resource res = resourceLoader.getResource(policy);
- init(res.getInputStream());
- } catch (IOException e) {
- log.error(e);
- }
- }
-
- @Override
- public void setResourceLoader(ResourceLoader loader) {
- this.resourceLoader = loader;
- }
-
-}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/conf/SpringConfigurator.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/conf/SpringConfigurator.java
deleted file mode 100644
index 7b2641ff..00000000
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/conf/SpringConfigurator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.bku.local.conf;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.context.ResourceLoaderAware;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-
-import at.gv.egiz.bku.conf.Configurator;
-import at.gv.egiz.bku.local.webapp.SpringBKUServlet;
-import at.gv.egiz.bku.slexceptions.SLRuntimeException;
-
-public class SpringConfigurator extends Configurator implements
- ResourceLoaderAware {
-
- private final static Log log = LogFactory.getLog(SpringConfigurator.class);
-
- private ResourceLoader resourceLoader;
-
- public SpringConfigurator() {
- // File configDir = new File(System.getProperty("user.home") +
- // "/.bku/conf");
- // if (configDir.exists()) {
- // log.debug("Found existing config directory: " + configDir);
- // } else {
- // log.info("Config dir not existing, creating new");
- // if (!configDir.mkdirs()) {
- // log.error("Cannot create directory: " + configDir);
- // }
- // }
- }
-
- public void setResource(Resource resource) {
- log.debug("Loading config from: " + resource);
- if (resource != null) {
- Properties props = new Properties();
- try {
- props.load(resource.getInputStream());
- super.setConfiguration(props);
- } catch (IOException e) {
- log.error("Cannot load config", e);
- }
- } else {
- log.warn("Cannot load properties, resource: " + resource);
- }
- }
-
- @Override
- public void configure() {
- if (properties == null) {
- defaultInit();
- }
- super.configure();
- SpringBKUServlet.setConfigurator(this);
- }
-
- public void defaultInit() {
- Properties props = new Properties();
- try {
- props.load(new FileInputStream(System.getProperty("user.home")
- + "/.mocca/war/mocca.war"));
- super.setConfiguration(props);
- } catch (IOException e) {
- log.error("Cannot load config", e);
- }
- }
-
- @Override
- public void setResourceLoader(ResourceLoader loader) {
- this.resourceLoader = loader;
- }
-
- private File getDirectory(String property) {
- property = property
- .replace("${user.home}", System.getProperty("user.home"));
- if (property != null) {
- Resource certDirRes = resourceLoader.getResource(property);
- File certDir;
- try {
- certDir = certDirRes.getFile();
- } catch (IOException e) {
- log.error("Cannot get cert directory", e);
- throw new SLRuntimeException(e);
- }
- if (!certDir.isDirectory()) {
- log.error("Expecting directory as SSL.certDirectory parameter");
- throw new SLRuntimeException(
- "Expecting directory as SSL.certDirectory parameter");
- }
- return certDir;
- }
- return null;
-
- }
-
- @Override
- protected File getCADir() {
- String caDirectory = getProperty("SSL.caDirectory");
- return getDirectory(caDirectory);
- }
-
- @Override
- protected File getCertDir() {
- String certDirectory = getProperty("SSL.certDirectory");
- return getDirectory(certDirectory);
- }
-
- @Override
- protected InputStream getManifest() {
- Resource r = resourceLoader.getResource("META-INF/MANIFEST.MF");
- if ((r != null) && r.isReadable()) {
- try {
- return r.getInputStream();
- } catch (IOException e) {
- log.error("Cannot read manifest data: " + e);
- }
- }
- return null;
- }
-} \ No newline at end of file
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/GUIProxy.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/GUIProxy.java
index 38dd04d9..a9f21087 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/GUIProxy.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/GUIProxy.java
@@ -30,7 +30,7 @@ public class GUIProxy implements InvocationHandler {
JFrame frame;
BKUGUIFacade delegate;
- static public Object newInstance(BKUGUIFacade gui, JFrame frame, Class[] interfaces) {
+ static public Object newInstance(BKUGUIFacade gui, JFrame frame, Class<?>[] interfaces) {
return java.lang.reflect.Proxy.newProxyInstance(gui.getClass().getClassLoader(),
interfaces,
new GUIProxy(gui, frame));
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/LocalHelpListener.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/LocalHelpListener.java
index c957e132..ced47d6c 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/LocalHelpListener.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/gui/LocalHelpListener.java
@@ -16,46 +16,62 @@
*/
package at.gv.egiz.bku.local.gui;
-import at.gv.egiz.bku.gui.AbstractHelpListener;
-import at.gv.egiz.bku.gui.DefaultHelpListener;
+import at.gv.egiz.bku.gui.ViewerHelpListener;
import java.awt.Desktop;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.net.URI;
import java.util.Locale;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
- * Open help document in browser, fallback to default (swing dialog) if Java Desktop API not supported.
+ * Open help document in browser, fallback to help viewer (swing dialog) if Java Desktop API not supported.
*
* @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
*/
-public class LocalHelpListener extends AbstractHelpListener {
+public class LocalHelpListener extends ViewerHelpListener {
+ private final Logger log = LoggerFactory.getLogger(LocalHelpListener.class);
+
protected Desktop desktop;
- protected DefaultHelpListener fallback;
- public LocalHelpListener(URL baseURL, Locale locale) {
- super(baseURL, locale);
- if (Desktop.isDesktopSupported()) {
+ public LocalHelpListener(String helpURL, Locale locale) {
+ super(helpURL, locale);
+ if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
desktop = Desktop.getDesktop();
} else {
- log.info("Java Desktop API not available on current platform (libgnome installed?), falling back to DefaultHelpListener");
- fallback = new DefaultHelpListener(baseURL, locale);
+ log.warn("Java Desktop API not available on current platform (libgnome installed?), " +
+ "falling back to help viewer");
+ }
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (desktop != null) {
+ try {
+ desktop.browse(new URI(getHelpURL()));
+ } catch (Exception ex) {
+ log.error("Failed display help document {}.", getHelpURL(), ex);
+ super.mouseClicked(e);
+ }
+ } else {
+ super.mouseClicked(e);
}
}
@Override
- public void showDocument(URL helpDocument, String helpTopic) throws IOException, URISyntaxException {
+ public void keyPressed(KeyEvent e) {
if (desktop != null) {
- if (!desktop.isSupported(Desktop.Action.BROWSE)) {
- log.error("Failed to open default browser: The system provides the Desktop API, but does not support the BROWSE action");
- } else {
- Desktop.getDesktop().browse(helpDocument.toURI());
+ try {
+ desktop.browse(new URI(getHelpURL()));
+ } catch (Exception ex) {
+ log.error("Failed display help document {}.", getHelpURL(), ex);
+ super.keyPressed(e);
}
- } else if (fallback != null) {
- fallback.showDocument(helpDocument, helpTopic);
} else {
- log.error("failed to display help document");
+ super.keyPressed(e);
}
}
}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTAL.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTAL.java
new file mode 100644
index 00000000..0b8511e3
--- /dev/null
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTAL.java
@@ -0,0 +1,76 @@
+/*
+* Copyright 2009 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.bku.local.stal;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.stal.ErrorResponse;
+import at.gv.egiz.stal.STAL;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+
+public class ExclusiveAccessSTAL implements STAL {
+
+ private final Logger log = LoggerFactory.getLogger(ExclusiveAccessSTAL.class);
+
+ private Lock lock = new ReentrantLock(true);
+
+ private long timeout = 30;
+
+ private STAL stal;
+
+ public ExclusiveAccessSTAL(STAL stal) {
+ if (stal == null) {
+ throw new NullPointerException("Argument 'stal' must not be null.");
+ }
+ this.stal = stal;
+ }
+
+ @Override
+ public List<STALResponse> handleRequest(
+ List<? extends STALRequest> aRequestList) {
+
+ try {
+ if (lock.tryLock(timeout, TimeUnit.SECONDS)) {
+ try {
+ return stal.handleRequest(aRequestList);
+ } finally {
+ lock.unlock();
+ }
+ } else {
+ // time out
+ log.info("Timeout while waiting for exclusive access to STAL.");
+ ErrorResponse response = new ErrorResponse(6000);
+ return Collections.singletonList((STALResponse) response);
+ }
+ } catch (InterruptedException e) {
+ // interrupted
+ ErrorResponse response = new ErrorResponse(6000);
+ return Collections.singletonList((STALResponse) response);
+ }
+
+ }
+
+}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTALFactory.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTALFactory.java
new file mode 100644
index 00000000..1dee8e2b
--- /dev/null
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/ExclusiveAccessSTALFactory.java
@@ -0,0 +1,65 @@
+/*
+* Copyright 2009 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.bku.local.stal;
+
+import java.util.Locale;
+
+import at.gv.egiz.stal.STAL;
+import at.gv.egiz.stal.STALFactory;
+
+public class ExclusiveAccessSTALFactory implements STALFactory {
+
+ private STALFactory stalFactory;
+
+ private ExclusiveAccessSTAL stal;
+
+ private Locale locale;
+
+ /**
+ * @return the stalFactory
+ */
+ public STALFactory getStalFactory() {
+ return stalFactory;
+ }
+
+ /**
+ * @param stalFactory the stalFactory to set
+ */
+ public synchronized void setStalFactory(STALFactory stalFactory) {
+ this.stalFactory = stalFactory;
+ stalFactory.setLocale(locale);
+ }
+
+ @Override
+ public synchronized STAL createSTAL() {
+ if (stal == null && stalFactory != null) {
+ STAL delegate = stalFactory.createSTAL();
+ stal = new ExclusiveAccessSTAL(delegate);
+ }
+ return stal;
+ }
+
+ @Override
+ public synchronized void setLocale(Locale locale) {
+ this.locale = locale;
+ if (stalFactory != null) {
+ stalFactory.setLocale(locale);
+ }
+ }
+
+}
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 1e3f9a1d..d2e49039 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
@@ -49,7 +49,7 @@ public class LocalBKUWorker extends AbstractBKUWorker {
public List<STALResponse> handleRequest(List<? extends STALRequest> requestList) {
signatureCard = null;
List<STALResponse> responses = super.handleRequest(requestList);
- container.setVisible(false);
+ container.setVisible(false);
return responses;
}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSTALFactory.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSTALFactory.java
index 44322a07..a703ad5c 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSTALFactory.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSTALFactory.java
@@ -19,7 +19,6 @@ 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.util.Locale;
@@ -31,10 +30,11 @@ 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 java.net.URL;
import javax.swing.JFrame;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+
+import org.apache.commons.configuration.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Creates a PINManagementGUI and a LocalBKUWorker, which in turn registers
@@ -44,55 +44,45 @@ import org.apache.commons.logging.LogFactory;
*/
public class LocalSTALFactory implements STALFactory {
- protected static final Log log = LogFactory.getLog(LocalSTALFactory.class);
+ private final Logger log = LoggerFactory.getLogger(LocalSTALFactory.class);
protected static final Dimension PREFERRED_SIZE = new Dimension(318, 200);
protected String helpURL;
protected Locale locale;
+
+ protected Configuration configuration;
+
+
@Override
public STAL createSTAL() {
- LocalBKUWorker stal;
+ 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");
- if (log.isTraceEnabled()) {
- log.debug("alwaysOnTop supported: " + dialog.isAlwaysOnTopSupported());
- }
+ log.debug("AlwaysOnTop supported: {}.", dialog.isAlwaysOnTopSupported());
// [#439] make mocca dialog alwaysOnTop
dialog.setAlwaysOnTop(true);
dialog.setIconImages(BKUIcons.icons);
- dialog.setUndecorated(true);
+// dialog.setUndecorated(true);
// dialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
-// dialog.addWindowListener(new WindowAdapter() {
-//
-// @Override
-// public void windowClosing(WindowEvent e) {
-// super.windowClosing(e);
-// log.debug("closing window ********************");
-// }
-//
-// });
+
if (locale != null) {
dialog.setLocale(locale);
}
LocalHelpListener helpListener = null;
- try {
- if (helpURL != null) {
- helpListener = new LocalHelpListener(new URL(helpURL), locale);
- } else {
- log.warn("no HELP URL configured, help system disabled");
- }
- } catch (MalformedURLException ex) {
- log.error("failed to configure help listener: " + ex.getMessage(), ex);
+ if (helpURL != null) {
+ helpListener = new LocalHelpListener(helpURL, locale);
+ } else {
+ log.warn("No HELP URL configured, help system disabled.");
}
PINManagementGUIFacade gui = new PINManagementGUI(dialog.getContentPane(),
dialog.getLocale(),
BKUGUIFacade.Style.advanced,
null,
new ResourceFontLoader(),
- helpListener,
+ helpListener,
null);
BKUGUIFacade proxy = (BKUGUIFacade) GUIProxy.newInstance(gui, dialog, new Class[] { PINManagementGUIFacade.class} );
stal = new LocalBKUWorker(proxy, dialog);
@@ -116,11 +106,26 @@ public class LocalSTALFactory implements STALFactory {
this.locale = locale;
}
- public String getHelpURL() {
- return helpURL;
- }
-
+ /**
+ * spring injects helpURL
+ * @param helpURL
+ */
public void setHelpURL(String helpURL) {
this.helpURL = 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/LocalSecureViewer.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java
index ae58526c..749a455a 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSecureViewer.java
@@ -31,8 +31,8 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
*
@@ -40,8 +40,8 @@ import org.apache.commons.logging.LogFactory;
*/
public class LocalSecureViewer implements SecureViewer {
- private static final Log log = LogFactory.getLog(LocalSignRequestHandler.class);
- private List<HashDataInput> hashDataInputs = Collections.EMPTY_LIST;
+ private final Logger log = LoggerFactory.getLogger(LocalSignRequestHandler.class);
+ private List<HashDataInput> hashDataInputs = Collections.emptyList();
protected BKUGUIFacade gui;
@@ -63,8 +63,8 @@ public class LocalSecureViewer implements SecureViewer {
ActionListener okListener, String okCommand)
throws Exception {
if (signedInfo.getReference().size() == 0) {
- log.error("No hashdata input selected to be displayed: null");
- throw new Exception("No HashData Input selected to be displayed");
+ log.error("No hashdata input selected to be displayed: null.");
+ throw new Exception("No HashData Input selected to be displayed.");
}
ArrayList<HashDataInput> selectedHashDataInputs = new ArrayList<HashDataInput>();
@@ -76,8 +76,8 @@ public class LocalSecureViewer implements SecureViewer {
boolean hdiAvailable = false;
for (HashDataInput hashDataInput : hashDataInputs) {
if (dsigRefId.equals(hashDataInput.getReferenceId())) {
- log.debug("display hashdata input for dsig:SignedReference " +
- dsigRefId);
+ log.debug("Display hashdata input for dsig:SignedReference {}.",
+ dsigRefId);
selectedHashDataInputs.add(
ensureCachedHashDataInput(hashDataInput));
hdiAvailable = true;
@@ -85,7 +85,7 @@ public class LocalSecureViewer implements SecureViewer {
}
}
if (!hdiAvailable) {
- log.error("no hashdata input for dsig:SignedReference " + dsigRefId);
+ log.error("No hashdata input for dsig:SignedReference {}.", dsigRefId);
throw new Exception(
"No HashDataInput available for dsig:SignedReference " + dsigRefId);
}
@@ -97,8 +97,8 @@ public class LocalSecureViewer implements SecureViewer {
}
if (selectedHashDataInputs.size() < 1) {
- log.error("dsig:SignedInfo does not contain a data reference");
- throw new Exception("dsig:SignedInfo does not contain a data reference");
+ log.error("dsig:SignedInfo does not contain a data reference.");
+ throw new Exception("dsig:SignedInfo does not contain a data reference.");
}
gui.showSecureViewer(selectedHashDataInputs, okListener, okCommand);
}
@@ -108,7 +108,7 @@ public class LocalSecureViewer implements SecureViewer {
throws IOException {
if (!(hashDataInput instanceof DataObjectHashDataInput)) {
- log.warn("expected DataObjectHashDataInput for LocalSignRequestHandler, got " +
+ log.warn("Expected DataObjectHashDataInput for LocalSignRequestHandler, got {}.",
hashDataInput.getClass().getName());
InputStream hdIs = hashDataInput.getHashDataInput();
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
index 9ae1d9b9..a1f77a85 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/stal/LocalSignRequestHandler.java
@@ -16,8 +16,8 @@
*/
package at.gv.egiz.bku.local.stal;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import at.gv.egiz.bku.smccstal.SignRequestHandler;
import at.gv.egiz.stal.ErrorResponse;
@@ -31,7 +31,7 @@ import at.gv.egiz.stal.SignRequest;
*/
public class LocalSignRequestHandler extends SignRequestHandler {
- private static final Log log = LogFactory.getLog(LocalSignRequestHandler.class);
+ private final Logger log = LoggerFactory.getLogger(LocalSignRequestHandler.class);
public LocalSignRequestHandler(LocalSecureViewer secureViewer) {
super(secureViewer);
@@ -44,7 +44,6 @@ public class LocalSignRequestHandler extends SignRequestHandler {
* @param request
* @return
*/
- @SuppressWarnings("unchecked")
@Override
public STALResponse handleRequest(STALRequest request)
throws InterruptedException {
@@ -54,7 +53,7 @@ public class LocalSignRequestHandler extends SignRequestHandler {
((LocalSecureViewer) secureViewer).setDataToBeSigned(signReq.getHashDataInput());
return super.handleRequest(request);
} else {
- log.fatal("Got unexpected STAL request: " + request);
+ log.error("Got unexpected STAL request: {}.", request);
return new ErrorResponse(1000);
}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/BKURequestHandler.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/BKURequestHandler.java
index 98be4047..cd81b592 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/BKURequestHandler.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/BKURequestHandler.java
@@ -16,98 +16,139 @@
*/
package at.gv.egiz.bku.local.webapp;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
+import java.util.concurrent.ExecutionException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import at.gv.egiz.bku.binding.HTTPBindingProcessor;
+import at.gv.egiz.bku.binding.BindingProcessorFuture;
+import at.gv.egiz.bku.binding.BindingProcessorManager;
+import at.gv.egiz.bku.binding.HTTPBindingProcessorImpl;
import at.gv.egiz.bku.binding.HttpUtil;
-import at.gv.egiz.bku.conf.Configurator;
+import at.gv.egiz.bku.binding.Id;
+import at.gv.egiz.bku.binding.IdFactory;
+import at.gv.egiz.bku.binding.InputDecoderFactory;
import at.gv.egiz.org.apache.tomcat.util.http.AcceptLanguage;
public class BKURequestHandler extends SpringBKUServlet {
- public final static String ENCODING = "UTF-8";
+ private static final long serialVersionUID = 1L;
- protected Log log = LogFactory.getLog(BKURequestHandler.class);
+ public final static String ENCODING = "UTF-8";
+ private final Logger log = LoggerFactory.getLogger(BKURequestHandler.class);
+
+ @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
- log.debug("Received SecurityLayer request");
-
String acceptLanguage = req.getHeader("Accept-Language");
Locale locale = AcceptLanguage.getLocale(acceptLanguage);
- log.debug("Accept-Language locale: " + locale);
+ log.info("Received request. Accept-Language locale: {}.", locale);
- HTTPBindingProcessor bindingProcessor;
- bindingProcessor = (HTTPBindingProcessor) getBindingProcessorManager()
- .createBindingProcessor(req.getRequestURL().toString(), null, locale);
+ BindingProcessorManager bindingProcessorManager = getBindingProcessorManager();
+
+ HTTPBindingProcessorImpl bindingProcessor;
+ bindingProcessor = (HTTPBindingProcessorImpl) bindingProcessorManager
+ .createBindingProcessor("HTTP", locale);
Map<String, String> headerMap = new HashMap<String, String>();
- for (Enumeration<String> headerName = req.getHeaderNames(); headerName
+ for (Enumeration<?> headerName = req.getHeaderNames(); headerName
.hasMoreElements();) {
- String header = headerName.nextElement();
+ String header = (String) headerName.nextElement();
if (header != null) {
headerMap.put(header, req.getHeader(header));
}
}
- String charset = req.getCharacterEncoding();
- String contentType = req.getContentType();
- if (charset != null) {
- contentType += ";" + charset;
+
+ InputStream inputStream;
+ String charset;
+ if (req.getMethod().equals("POST")) {
+ charset = req.getCharacterEncoding();
+ String contentType = req.getContentType();
+ if (charset != null) {
+ contentType += ";" + charset;
+ }
+ headerMap.put(HttpUtil.HTTP_HEADER_CONTENT_TYPE, contentType);
+ inputStream = req.getInputStream();
+ } else {
+ charset = "UTF-8";
+ headerMap.put(HttpUtil.HTTP_HEADER_CONTENT_TYPE,
+ InputDecoderFactory.URL_ENCODED);
+ String queryString = req.getQueryString();
+ if (queryString != null) {
+ inputStream = new ByteArrayInputStream(queryString.getBytes(charset));
+ } else {
+ inputStream = new ByteArrayInputStream(new byte[] {});
+ }
}
- headerMap.put(HttpUtil.HTTP_HEADER_CONTENT_TYPE, contentType);
bindingProcessor.setHTTPHeaders(headerMap);
- bindingProcessor.consumeRequestStream(req.getInputStream());
+ bindingProcessor.consumeRequestStream(req.getRequestURL().toString(), inputStream);
+ req.getInputStream().close();
- // fixxme just for testing
- bindingProcessor.run();
- if (bindingProcessor.getRedirectURL() != null) {
- resp.sendRedirect(bindingProcessor.getRedirectURL());
- return;
- }
+ String redirectURL = bindingProcessor.getRedirectURL();
+
+ Id id = IdFactory.getInstance().createId();
+ BindingProcessorFuture bindingProcessorFuture = bindingProcessorManager
+ .process(id, bindingProcessor);
+
+ if (redirectURL != null) {
+ // send redirect and return
+ resp.sendRedirect(redirectURL);
+ return;
+ }
+
+ // wait for the binding processor to finish processing
+ try {
+ bindingProcessorFuture.get();
+ } catch (InterruptedException e) {
+ resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
+ return;
+ } catch (ExecutionException e) {
+ log.error("Request processing failed.", e);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
+
resp.setStatus(bindingProcessor.getResponseCode());
- for (Iterator<String> it = bindingProcessor.getResponseHeaders().keySet()
- .iterator(); it.hasNext();) {
- String header = it.next();
- resp.setHeader(header, bindingProcessor.getResponseHeaders().get(header));
+
+ // set response headers
+ Map<String, String> responseHeaders = bindingProcessor.getResponseHeaders();
+ for (String header : responseHeaders.keySet()) {
+ resp.setHeader(header, responseHeaders.get(header));
}
- String version = configurator.getProperty(Configurator.SIGNATURE_LAYOUT);
- if ((version != null) && (!"".equals(version.trim()))) {
- log.debug("setting SignatureLayout header to " + version);
- resp.setHeader(Configurator.SIGNATURE_LAYOUT, version);
- } else {
- log.debug("do not set SignatureLayout header");
+ String serverHeader = bindingProcessor.getServerHeaderValue();
+ if (serverHeader != null && !serverHeader.isEmpty()) {
+ resp.setHeader(HttpUtil.HTTP_HEADER_SERVER, serverHeader);
+ }
+ String signatureLayout = bindingProcessor.getSignatureLayoutHeaderValue();
+ if (signatureLayout != null && !signatureLayout.isEmpty()) {
+ resp.setHeader("SignatureLayout", signatureLayout);
}
-
- if (configurator.getProperty(Configurator.USERAGENT_CONFIG_P) != null) {
- resp.setHeader(HttpUtil.HTTP_HEADER_SERVER, configurator
- .getProperty(Configurator.USERAGENT_CONFIG_P));
- } else {
- resp.setHeader(HttpUtil.HTTP_HEADER_SERVER,
- Configurator.USERAGENT_DEFAULT);
- }
resp.setContentType(bindingProcessor.getResultContentType());
resp.setCharacterEncoding(ENCODING);
bindingProcessor.writeResultTo(resp.getOutputStream(), ENCODING);
- req.getInputStream().close();
+
resp.getOutputStream().flush();
resp.getOutputStream().close();
- log.debug("Finished Request");
+ log.debug("Finished Request.");
}
+ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
doPost(req, resp);
}
+
+
}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/MoccaContextListener.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/MoccaContextListener.java
new file mode 100644
index 00000000..428190eb
--- /dev/null
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/MoccaContextListener.java
@@ -0,0 +1,93 @@
+/*
+* Copyright 2009 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.bku.local.webapp;
+
+import iaik.security.ecc.provider.ECCProvider;
+import iaik.security.provider.IAIK;
+import iaik.xml.crypto.XSecProvider;
+
+import java.security.Provider;
+import java.security.Security;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MoccaContextListener implements ServletContextListener {
+
+ private Logger log = LoggerFactory.getLogger(MoccaContextListener.class);
+
+ @Override
+ public void contextDestroyed(ServletContextEvent sce) {
+ }
+
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
+
+ log.info("Registering security providers ...");
+
+ registerProviders();
+
+ if (log.isDebugEnabled()) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Registered providers: ");
+ int i = 1;
+ for (Provider prov : Security.getProviders()) {
+ sb.append("\n" + (i++) + ". : " + prov);
+ }
+ log.debug(sb.toString());
+ }
+ }
+
+ protected void registerProvider(Provider provider, int position) {
+ String name = provider.getName();
+ if (Security.getProvider(name) == null) {
+ // register IAIK provider at first position
+ try {
+ Security.insertProviderAt(provider, position);
+ } catch (SecurityException e) {
+ log.info("Failed to register required security Provider.", e);
+ }
+ } else {
+ log.info("Required security Provider {} already registered.", name);
+ }
+
+ }
+
+ protected void registerProviders() {
+
+ registerProvider(new IAIK(), 1);
+ registerProvider(new ECCProvider(false), 2);
+
+ final String name = XSecProvider.NAME;
+ if (Security.getProvider(XSecProvider.NAME) == null) {
+ // register XML Security provider
+ try {
+ XSecProvider.addAsProvider(false);
+ } catch (SecurityException e) {
+ log.info("Failed to register required security Provider.", e);
+ }
+ } else {
+ log.info("Required security Provider {} already registered.", name);
+ }
+
+ }
+
+}
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/PINManagementServlet.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/PINManagementServlet.java
index 0c35f1c9..ab41634e 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/PINManagementServlet.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/PINManagementServlet.java
@@ -29,8 +29,8 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* PINManagementBKUWorker for non-applet version
@@ -38,7 +38,9 @@ import org.apache.commons.logging.LogFactory;
*/
public class PINManagementServlet extends HttpServlet {
- private static final Log log = LogFactory.getLog(PINManagementServlet.class);
+ private static final long serialVersionUID = 1L;
+
+ private final Logger log = LoggerFactory.getLogger(PINManagementServlet.class);
LocalSTALFactory stalFactory;
@@ -59,9 +61,7 @@ public class PINManagementServlet extends HttpServlet {
STAL pinMgmtSTAL = stalFactory.createSTAL();
List<STALResponse> stalResps = pinMgmtSTAL.handleRequest(Collections.singletonList(new PINManagementRequest()));
- if (log.isDebugEnabled()) {
- log.debug("received STAL reponse " + stalResps.get(0).getClass());
- }
+ log.debug("Received STAL reponse {}.", stalResps.get(0).getClass());
pinMgmtSTAL.handleRequest(Collections.singletonList(new QuitRequest()));
String redirect = request.getParameter("redirect");
diff --git a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/SpringBKUServlet.java b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/SpringBKUServlet.java
index 3bd50ba7..62f393a8 100644
--- a/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/SpringBKUServlet.java
+++ b/BKULocal/src/main/java/at/gv/egiz/bku/local/webapp/SpringBKUServlet.java
@@ -19,21 +19,16 @@ package at.gv.egiz.bku.local.webapp;
import javax.servlet.http.HttpServlet;
import at.gv.egiz.bku.binding.BindingProcessorManager;
-import at.gv.egiz.bku.conf.Configurator;
public abstract class SpringBKUServlet extends HttpServlet {
- public final static String BEAN_NAME = "bindingProcessorManager";
+ private static final long serialVersionUID = 1L;
- protected static Configurator configurator;
+ public final static String BEAN_NAME = "bindingProcessorManager";
protected BindingProcessorManager getBindingProcessorManager() {
return (BindingProcessorManager) getServletContext()
.getAttribute(BEAN_NAME);
}
- public static void setConfigurator(Configurator conf) {
- configurator = conf;
- }
-
}