summaryrefslogtreecommitdiff
path: root/BKUOnline/src
diff options
context:
space:
mode:
authormcentner <mcentner@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2010-07-14 15:22:56 +0000
committermcentner <mcentner@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>2010-07-14 15:22:56 +0000
commit5e10b6b575993c78ac22191849c464b618c4fa8a (patch)
tree55911c2b6d69e787dd408d63c1e641d6db39c5dc /BKUOnline/src
parentdc95c76a126b4f3135645d3e20b152134d201244 (diff)
downloadmocca-5e10b6b575993c78ac22191849c464b618c4fa8a.tar.gz
mocca-5e10b6b575993c78ac22191849c464b618c4fa8a.tar.bz2
mocca-5e10b6b575993c78ac22191849c464b618c4fa8a.zip
MOCCA Online HTTP binding refactored.
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@762 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'BKUOnline/src')
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AbstractWebRequestHandler.java327
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AppletDispatcher.java112
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/BKURequestHandler.java52
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java210
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/RequestIdFilter.java58
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/ResultServlet.java144
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SessionListener.java3
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SpringBKUServlet.java33
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/UIServlet.java106
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/WebRequestHandler.java137
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/mocca/id/DataURLServerServlet.java63
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLBindingProcessorImpl.java2
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLRequestHandler.java33
-rw-r--r--BKUOnline/src/main/resources/web.properties26
-rw-r--r--BKUOnline/src/main/resources/web_de.properties26
-rw-r--r--BKUOnline/src/main/webapp/WEB-INF/web.xml263
-rw-r--r--BKUOnline/src/main/webapp/applet.jsp391
-rw-r--r--BKUOnline/src/main/webapp/css/applet.css15
-rw-r--r--BKUOnline/src/main/webapp/css/appletAlternative.css12
-rw-r--r--BKUOnline/src/main/webapp/expired.jsp (renamed from BKUOnline/src/main/webapp/expired.html)24
-rw-r--r--BKUOnline/src/main/webapp/img/dec.pngbin6311 -> 309 bytes
-rw-r--r--BKUOnline/src/main/webapp/img/help.pngbin303 -> 185 bytes
-rw-r--r--BKUOnline/src/main/webapp/img/inc.pngbin7198 -> 344 bytes
-rw-r--r--BKUOnline/src/main/webapp/js/deployJava_orig.js725
-rw-r--r--BKUOnline/src/main/webapp/local.jsp104
25 files changed, 1065 insertions, 1801 deletions
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AbstractWebRequestHandler.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AbstractWebRequestHandler.java
deleted file mode 100644
index 3cd6dd85..00000000
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AbstractWebRequestHandler.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
-* 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.online.webapp;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
-
-import at.gv.egiz.bku.binding.HTTPBindingProcessor;
-import at.gv.egiz.bku.binding.HttpUtil;
-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.bku.utils.StreamUtil;
-import at.gv.egiz.org.apache.tomcat.util.http.AcceptLanguage;
-
-public abstract class AbstractWebRequestHandler extends SpringBKUServlet {
-
- private static final long serialVersionUID = 1L;
-
- public static final String APPLET_PAGE_P = "appletPage";
- public static final String APPLET_PAGE_DEFAULT = "applet.jsp";
-
- public static final String PARAM_APPLET_WIDTH = "appletWidth";
- public static final String ATTR_APPLET_WIDTH = "appletWidth";
-
- public static final String PARAM_APPLET_HEIGHT = "appletHeight";
- public static final String ATTR_APPLET_HEIGHT = "appletHeight";
-
- public static final String PARAM_APPLET_BACKGROUND = "appletBackground";
- public static final String ATTR_APPLET_BACKGROUND = "appletBackground";
-
- public static final String PARAM_APPLET_BACKGROUND_COLOR = "appletBackgroundColor";
- public static final String ATTR_APPLET_BACKGROUND_COLOR = "appletBackgroundColor";
-
- public static final Pattern PATTERM_APPLET_BACKGROUND_COLOR = Pattern.compile("\\#[0-9a-fA-F]{6}");
- public static final String PARAM_APPLET_GUI_STYLE = "appletGuiStyle";
- public static final String ATTR_APPLET_GUI_STYLE = "appletGuiStyle";
-
- 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 ATTR_APPLET_EXTENSION = "appletExtension";
-
- public static final String[] VALUES_APPLET_EXTENSION = new String[] {"pin", "activation"};
- public static final String PARAM_LOCALE = "locale";
- public static final String ATTR_LOCALE = "locale";
-
- public static final Pattern PATTERN_LOCALE = Pattern.compile("[a-zA-Z][a-zA-Z](_[a-zA-Z][a-zA-Z]){0,2}");
- public static final String REDIRECT_URL_SESSION_ATTRIBUTE = "redirectUrl";
-
- private final Logger log = LoggerFactory.getLogger(BKURequestHandler.class);
-
- protected static String getStringFromStream(InputStream is, String encoding)
- throws IOException {
- if (is == null) {
- return null;
- }
- if (encoding == null) {
- encoding = HttpUtil.DEFAULT_CHARSET;
- }
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- StreamUtil.copyStream(is, os);
- return new String(os.toByteArray(), encoding);
- }
-
- protected abstract String getRequestProtocol(HttpServletRequest req);
-
- protected HTTPBindingProcessor getBindingProcessor(Id id, HttpServletRequest req, Locale locale) {
-
- // remove existing binding processor if present
- getBindingProcessorManager().removeBindingProcessor(id);
-
- // create new binding processor
- return (HTTPBindingProcessor) getBindingProcessorManager().createBindingProcessor(getRequestProtocol(req), locale);
-
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
- java.io.IOException {
-
- String msg = (req.getSession(false) == null) ? "New session created."
- : "Session already established.";
-
- Id id = IdFactory.getInstance().createId(req.getSession().getId());
- MDC.put("id", id.toString());
-
- String acceptLanguage = req.getHeader("Accept-Language");
- Locale locale = AcceptLanguage.getLocale(acceptLanguage);
-
- if (log.isInfoEnabled()) {
- log.info("Recieved request (Accept-Language locale: {}). {}", locale, msg);
- }
-
- try {
-
- HTTPBindingProcessor bindingProcessor = getBindingProcessor(id, req, locale);
-
- Map<String, String> headerMap = new HashMap<String, String>();
- for (Enumeration<?> headerName = req.getHeaderNames(); headerName
- .hasMoreElements();) {
- String header = (String) headerName.nextElement();
- if (header != null) {
- headerMap.put(header, req.getHeader(header));
- }
- }
-
- 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[] {});
- }
- }
- bindingProcessor.setHTTPHeaders(headerMap);
- bindingProcessor.consumeRequestStream(req.getRequestURL().toString(),
- inputStream);
-
- req.getInputStream().close();
- getBindingProcessorManager().process(id, bindingProcessor);
-
- HttpSession session = req.getSession();
-
- log.trace("Looking for applet parameters in request.");
-
- // appletWidth
- String width = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_WIDTH), charset);
- if (width != null && !width.isEmpty()) {
- try {
- // must be a valid integer
- session.setAttribute(ATTR_APPLET_WIDTH, Integer.parseInt(width));
- log.debug("Found parameter " + PARAM_APPLET_WIDTH + "='{}'.", width);
- } catch (NumberFormatException nfe) {
- log.warn("Parameter " + PARAM_APPLET_WIDTH
- + " does not contain a valid value.", nfe);
- }
- }
-
- // appletHeight
- String height = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_HEIGHT), charset);
- if (height != null && !height.isEmpty()) {
- try {
- // must be a valid integer
- session.setAttribute(ATTR_APPLET_HEIGHT, Integer.parseInt(height));
- log.debug("Found parameter " + PARAM_APPLET_HEIGHT + "='{}'.", height);
- } catch (NumberFormatException nfe) {
- log.warn("Parameter " + PARAM_APPLET_HEIGHT
- + " does not contain a valid value.", nfe);
- }
- }
-
- // appletBackground
- String background = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_BACKGROUND), charset);
- if (background != null && !background.isEmpty()) {
- session.setAttribute(ATTR_APPLET_BACKGROUND, background);
- try {
- // must be a valid http or https URL
- URI backgroundURL = new URI(background);
- if ("http".equals(backgroundURL.getScheme())
- || "https".equals(backgroundURL.getScheme())) {
- session.setAttribute(ATTR_APPLET_BACKGROUND, backgroundURL
- .toASCIIString());
- log.debug("Found parameter " + PARAM_APPLET_BACKGROUND + "='{}'.",
- backgroundURL.toASCIIString());
- } else {
- log.warn("Parameter " + PARAM_APPLET_BACKGROUND
- + "='{}' is not a valid http/https URL.", background);
- }
- } catch (URISyntaxException e) {
- log.warn("Parameter " + PARAM_APPLET_BACKGROUND
- + "='{}' is not a valid http/https URL.", background, e);
- }
- }
-
- // appletBackgroundColor
- String backgroundColor = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_BACKGROUND_COLOR), charset);
- if (backgroundColor != null && !backgroundColor.isEmpty()) {
- // must be a valid color definition
- if (PATTERM_APPLET_BACKGROUND_COLOR.matcher(backgroundColor).matches()) {
- session.setAttribute(ATTR_APPLET_BACKGROUND_COLOR, backgroundColor);
- log.debug("Faund parameter " + PARAM_APPLET_BACKGROUND_COLOR
- + "='{}'.", backgroundColor);
- } else {
- log.warn("Parameter " + PARAM_APPLET_BACKGROUND_COLOR
- + "='{}' is not a valid color definition "
- + "(must be of form '#hhhhhh').", backgroundColor);
- }
- }
-
- // appletGuiStyle
- String guiStyle = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_GUI_STYLE), charset);
- if (guiStyle != null && !guiStyle.isEmpty()) {
- // must be one of VALUES_APPLET_GUI_STYLE
- String style = guiStyle.toLowerCase();
- if (Arrays.asList(VALUES_APPLET_GUI_STYLE).contains(style)) {
- session.setAttribute(ATTR_APPLET_GUI_STYLE, style);
- log.debug("Found parameter " + PARAM_APPLET_GUI_STYLE + "='{}'.", style);
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Parameter ").append(PARAM_APPLET_GUI_STYLE).append(
- "='").append(guiStyle).append("' is not valid (must be one of ")
- .append(Arrays.toString(VALUES_APPLET_GUI_STYLE)).append(").");
- log.warn(sb.toString());
- }
- }
-
- // appletExtension
- String extension = getStringFromStream(bindingProcessor
- .getFormData(PARAM_APPLET_EXTENSION), charset);
- if (extension != null && !extension.isEmpty()) {
- // must be one of VALUES_APPLET_EXTENSION
- String ext = extension.toLowerCase();
- if (Arrays.asList(VALUES_APPLET_EXTENSION).contains(ext)) {
- session.setAttribute(ATTR_APPLET_EXTENSION, ext);
- log.debug("Found parameter " + PARAM_APPLET_EXTENSION + "='{}'.", ext);
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append("Parameter ").append(PARAM_APPLET_EXTENSION).append(
- "='").append(extension).append("' is not valid (must be one of ")
- .append(Arrays.toString(VALUES_APPLET_EXTENSION)).append(").");
- log.warn(sb.toString());
- }
- }
-
- // locale
- String localeFormParam = getStringFromStream(bindingProcessor
- .getFormData(PARAM_LOCALE), charset);
- if (localeFormParam != null && !localeFormParam.isEmpty()) {
- // must be a valid locale
- if (PATTERN_LOCALE.matcher(localeFormParam).matches()) {
- locale = new Locale(localeFormParam);
- log.debug("Override accept-language header locale {} "
- + "with form param {}.", locale, localeFormParam);
- } else {
- log.warn("Parameter " + PARAM_LOCALE
- + "='{}' is not a valid locale definition.", localeFormParam);
- }
- }
- if (locale != null) {
- log.debug("Using locale {}.", locale);
- session.setAttribute(ATTR_LOCALE, locale.toString());
- }
-
- beforeAppletPage(req, bindingProcessor);
-
- String appletPage = getStringFromStream(bindingProcessor
- .getFormData(APPLET_PAGE_P), charset);
- if (appletPage == null || appletPage.isEmpty()) {
- appletPage = APPLET_PAGE_DEFAULT;
- }
- log.debug("Sending redirect to UI page '{}'.", appletPage + ";jsessionid=" + id);
- resp.sendRedirect(appletPage + ";jsessionid=" + id);
-
- } finally {
- MDC.remove("id");
- }
- }
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException {
- doPost(req, resp);
- }
-
- /**
- * Called before the request is forwarded or redirected to the Applet page.
- *
- * @param req
- * @param bindingProcessor
- */
- protected void beforeAppletPage(HttpServletRequest req,
- HTTPBindingProcessor bindingProcessor) {
- }
-
-}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AppletDispatcher.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AppletDispatcher.java
deleted file mode 100644
index 9e455621..00000000
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/AppletDispatcher.java
+++ /dev/null
@@ -1,112 +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.online.webapp;
-
-import java.io.IOException;
-import java.util.regex.Pattern;
-import javax.servlet.RequestDispatcher;
-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;
-
-/**
- * prevent applet caching,
- * could be removed once applet is loaded via jnlp
- *
- * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
- */
-public class AppletDispatcher extends HttpServlet {
-
- private static final long serialVersionUID = 1L;
-
- private final Logger log = LoggerFactory.getLogger(AppletDispatcher.class);
-
- public static final String DISPATCH_CTX = "dispatch/";
- public static final String RAND_PREFIX = "__";
- public static final String RAND_ATTRIBUTE = "rand";
- public static final Pattern ctxPattern = Pattern.compile(DISPATCH_CTX);
- public static final Pattern archivePattern = Pattern.compile(RAND_PREFIX + "[a-zA-Z0-9]*\\.jar$");
-
- /**
- * 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 {
-
- String uri = request.getRequestURI();
-// log.trace("request URI " + uri);
-
- uri = uri.substring(request.getContextPath().length());
-// log.trace("removing contextPath " + uri);
-
- uri = ctxPattern.matcher(uri).replaceAll("");
-// log.trace("removing dispatch context " + uri);
-
- uri = archivePattern.matcher(uri).replaceAll(".jar");
-// log.trace("removing random suffix " + uri);
-
- log.trace("Dispatching request URI {} to {}.", request.getRequestURI(), uri);
-
- RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(uri);
- dispatcher.forward(request, response);
- }
-
- // <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";
- }// </editor-fold>
-
-}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/BKURequestHandler.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/BKURequestHandler.java
deleted file mode 100644
index d42f911c..00000000
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/BKURequestHandler.java
+++ /dev/null
@@ -1,52 +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.online.webapp;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import at.gv.egiz.bku.binding.HTTPBindingProcessor;
-import at.gv.egiz.bku.binding.HTTPBindingProcessorImpl;
-
-/**
- * Handles SL requests and instantiates BindingProcessors
- *
- */
-public class BKURequestHandler extends AbstractWebRequestHandler {
-
- private static final long serialVersionUID = 1L;
-
- private final Logger log = LoggerFactory.getLogger(BKURequestHandler.class);
-
- @Override
- protected void beforeAppletPage(HttpServletRequest req, HTTPBindingProcessor bindingProcessor) {
- // handle server side redirect url after processing
- String redirectUrl = ((HTTPBindingProcessorImpl) bindingProcessor).getRedirectURL();
- if ( redirectUrl != null) {
- log.info("Got redirect URL '{}'. Deferring browser redirect.", redirectUrl);
- req.getSession().setAttribute(REDIRECT_URL_SESSION_ATTRIBUTE, redirectUrl);
- }
- }
-
- @Override
- protected String getRequestProtocol(HttpServletRequest req) {
- return "HTTP";
- }
-
-}
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
new file mode 100644
index 00000000..0d2f847e
--- /dev/null
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/MoccaParameterBean.java
@@ -0,0 +1,210 @@
+/*
+ * 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.online.webapp;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.regex.Pattern;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.bku.binding.HTTPBindingProcessor;
+import at.gv.egiz.bku.utils.StreamUtil;
+
+public class MoccaParameterBean {
+
+ private final Logger log = LoggerFactory.getLogger(MoccaParameterBean.class);
+
+ public static final String PARAM_UI_PAGE_P = "appletPage";
+
+ public static final String PARAM_APPLET_WIDTH = "appletWidth";
+
+ public static final String PARAM_APPLET_HEIGHT = "appletHeight";
+
+ public static final String PARAM_APPLET_BACKGROUND = "appletBackground";
+
+ public static final String PARAM_APPLET_BACKGROUND_COLOR = "appletBackgroundColor";
+ public static final Pattern PATTERM_APPLET_BACKGROUND_COLOR = Pattern.compile("\\#[0-9a-fA-F]{6}");
+
+ public static final String PARAM_APPLET_GUI_STYLE = "appletGuiStyle";
+ 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"};
+
+ 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}");
+
+ private Charset charset = Charset.forName("ISO-8859-1");
+
+ private HTTPBindingProcessor bindingProcessor;
+
+ public MoccaParameterBean(HTTPBindingProcessor bindingProcessor) {
+ this.bindingProcessor = bindingProcessor;
+ }
+
+ public Charset getCharset() {
+ return charset;
+ }
+
+ public void setCharset(Charset charset) {
+ this.charset = (charset != null) ? Charset.forName("ISO-8859-1") : charset;
+ }
+
+ public String getUIPage(String defaultValue) {
+ String uiPage = getString(PARAM_UI_PAGE_P);
+ return (uiPage != null) ? uiPage : defaultValue;
+ }
+
+ public Integer getAppletWidth() {
+ return getInteger(PARAM_APPLET_WIDTH);
+ }
+
+ public Integer getAppletHeight() {
+ return getInteger(PARAM_APPLET_HEIGHT);
+ }
+
+ public String getAppletBackground() {
+ String background = getString(PARAM_APPLET_BACKGROUND);
+ if (background != null && !background.isEmpty()) {
+ try {
+ // must be a valid http or https URL
+ URI backgroundURL = new URI(background);
+ if ("http".equals(backgroundURL.getScheme())
+ || "https".equals(backgroundURL.getScheme())) {
+ return background.toString();
+ } else {
+ log.warn("Parameter " + PARAM_APPLET_BACKGROUND
+ + "='{}' is not a valid http/https URL.", background);
+ }
+ } catch (URISyntaxException e) {
+ log.warn("Parameter " + PARAM_APPLET_BACKGROUND
+ + "='{}' is not a valid http/https URL.", background, e);
+ }
+ }
+ return null;
+ }
+
+ public String getAppletBackgroundColor() {
+ String backgroundColor = getString(PARAM_APPLET_BACKGROUND_COLOR);
+ if (backgroundColor != null && !backgroundColor.isEmpty()) {
+ // must be a valid color definition
+ if (PATTERM_APPLET_BACKGROUND_COLOR.matcher(backgroundColor).matches()) {
+ return backgroundColor;
+ } else {
+ log.warn("Parameter " + PARAM_APPLET_BACKGROUND_COLOR
+ + "='{}' is not a valid color definition "
+ + "(must be of form '#hhhhhh').", backgroundColor);
+ }
+ }
+ return null;
+ }
+
+ public String getGuiStyle() {
+ String guiStyle = getString(PARAM_APPLET_GUI_STYLE);
+ if (guiStyle != null && !guiStyle.isEmpty()) {
+ // must be one of VALUES_APPLET_GUI_STYLE
+ String style = guiStyle.toLowerCase();
+ if (Arrays.asList(VALUES_APPLET_GUI_STYLE).contains(style)) {
+ return style;
+ } else {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Parameter ").append(PARAM_APPLET_GUI_STYLE).append(
+ "='").append(guiStyle).append("' is not valid (must be one of ")
+ .append(Arrays.toString(VALUES_APPLET_GUI_STYLE)).append(").");
+ log.warn(sb.toString());
+ }
+ }
+ return null;
+ }
+
+ public String getExtension() {
+ String extension = getString(PARAM_APPLET_EXTENSION);
+ if (extension != null && !extension.isEmpty()) {
+ // must be one of VALUES_APPLET_EXTENSION
+ String ext = extension.toLowerCase();
+ if (Arrays.asList(VALUES_APPLET_EXTENSION).contains(ext)) {
+ log.debug("Found parameter " + PARAM_APPLET_EXTENSION + "='{}'.", ext);
+ return ext;
+ } else {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Parameter ").append(PARAM_APPLET_EXTENSION).append(
+ "='").append(extension).append("' is not valid (must be one of ")
+ .append(Arrays.toString(VALUES_APPLET_EXTENSION)).append(").");
+ log.warn(sb.toString());
+ }
+ }
+ return null;
+ }
+
+ public Locale getLocale() {
+ String locale = getString(PARAM_LOCALE);
+ if (locale != null && !locale.isEmpty()) {
+ // must be a valid locale
+ if (PATTERN_LOCALE.matcher(locale).matches()) {
+ log.debug("Found parameter " + PARAM_LOCALE + "='{}'.", locale);
+ return new Locale(locale);
+ } else {
+ log.warn("Parameter " + PARAM_LOCALE
+ + "='{}' is not a valid locale definition.", locale);
+ }
+ }
+ return null;
+ }
+
+ public Integer getInteger(String parameterName) {
+ String string = getString(parameterName);
+ if (string == null || string.isEmpty()) {
+ return null;
+ } else {
+ try {
+ return Integer.parseInt(string);
+ } catch (NumberFormatException e) {
+ log.warn("Parameter {} does not contain a valid value.", parameterName,
+ e);
+ return null;
+ }
+ }
+ }
+
+ public String getString(String parameterName) {
+ if (bindingProcessor != null) {
+ InputStream formData = bindingProcessor.getFormData(parameterName);
+ if (formData != null) {
+ InputStreamReader reader = new InputStreamReader(formData, charset);
+ StringWriter writer = new StringWriter();
+ try {
+ StreamUtil.copyStream(reader, writer);
+ } catch (IOException e) {
+ log.warn("Failed to get parameter {}.", parameterName, e);
+ }
+ return writer.toString();
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/RequestIdFilter.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/RequestIdFilter.java
new file mode 100644
index 00000000..210f482f
--- /dev/null
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/RequestIdFilter.java
@@ -0,0 +1,58 @@
+package at.gv.egiz.bku.online.webapp;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.slf4j.MDC;
+
+import at.gv.egiz.bku.binding.Id;
+import at.gv.egiz.bku.binding.IdFactory;
+
+/**
+ * Servlet Filter implementation class BindingProcessorFilter
+ */
+public class RequestIdFilter implements Filter {
+
+ /**
+ * @see Filter#destroy()
+ */
+ public void destroy() {
+ }
+
+ /**
+ * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
+ */
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+
+ if (request instanceof HttpServletRequest) {
+ HttpSession session = ((HttpServletRequest) request).getSession();
+ Id id = IdFactory.getInstance().createId(session.getId());
+ MDC.put("id", id.toString());
+ request.setAttribute("id", id);
+ }
+
+ // pass the request along the filter chain
+ try {
+ chain.doFilter(request, response);
+ } finally {
+ MDC.remove("id");
+ }
+
+ }
+
+ /**
+ * @see Filter#init(FilterConfig)
+ */
+ public void init(FilterConfig fConfig) throws ServletException {
+ }
+
+}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/ResultServlet.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/ResultServlet.java
index 5fd01775..cdc5a3ef 100644
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/ResultServlet.java
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/ResultServlet.java
@@ -17,63 +17,56 @@
package at.gv.egiz.bku.online.webapp;
import java.io.IOException;
-import java.util.Iterator;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Map.Entry;
-import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
import at.gv.egiz.bku.binding.BindingProcessor;
+import at.gv.egiz.bku.binding.BindingProcessorManager;
import at.gv.egiz.bku.binding.HTTPBindingProcessor;
import at.gv.egiz.bku.binding.Id;
-import at.gv.egiz.bku.binding.IdFactory;
import at.gv.egiz.bku.utils.NullOutputStream;
/**
* Delivers the result to the browser
*
*/
-public class ResultServlet extends SpringBKUServlet {
+public class ResultServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private final Logger log = LoggerFactory.getLogger(ResultServlet.class);
- private String encoding = "UTF-8";
- private String expiredPage = "./expiredError.jsp";
-
- public ResultServlet() {
- }
-
- private void myInit() {
- String enc = getServletContext().getInitParameter("responseEncoding");
- if (enc != null) {
- log.trace("Init default encoding to: {}.", enc);
- encoding = enc;
- }
- String expP = getServletConfig().getInitParameter("expiredPage");
- if (expP != null) {
- log.trace("Init expired page to: {}.", expP);
- expiredPage = expP;
- }
- }
+ private String responseEncoding = "UTF-8";
+
+ private String expiredPageUrl = "expired.jsp";
@Override
public void init() throws ServletException {
- super.init();
- myInit();
- }
-
- @Override
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- myInit();
+ String encoding = getServletConfig().getInitParameter("responseEncoding");
+ if (encoding != null) {
+ log.info("Init default responseEncoding to: {}.", encoding);
+ responseEncoding = encoding;
+ }
+ String url = getServletConfig().getInitParameter("expiredPageUrl");
+ if (url != null) {
+ try {
+ expiredPageUrl = new URL(url).toString();
+ log.info("Init expiredPageUrl to: {}.", expiredPageUrl);
+ } catch (MalformedURLException e) {
+ log.error("Failed to set expiredUrlPage {}.", url, e);
+ }
+ }
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
@@ -84,64 +77,55 @@ public class ResultServlet extends SpringBKUServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
- HttpSession session = req.getSession(false);
- if (session == null) {
- resp.sendRedirect(expiredPage);
+ BindingProcessorManager bindingProcessorManager = (BindingProcessorManager) getServletContext()
+ .getAttribute("bindingProcessorManager");
+ if (bindingProcessorManager == null) {
+ String msg = "Configuration error: BindingProcessorManager missing!";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
return;
}
- Id id = IdFactory.getInstance().createId(session.getId());
-
- HTTPBindingProcessor bp;
- BindingProcessor bindingProcessor = getBindingProcessorManager().getBindingProcessor(id);
- if (bindingProcessor instanceof HTTPBindingProcessor) {
- bp = (HTTPBindingProcessor) bindingProcessor;
- } else {
- session.invalidate();
- resp.sendRedirect(expiredPage);
+ Id id = (Id) req.getAttribute("id");
+ BindingProcessor bindingProcessor = null;
+ if (id == null
+ || !((bindingProcessor = bindingProcessorManager
+ .getBindingProcessor(id)) instanceof HTTPBindingProcessor)) {
+ resp.sendRedirect(expiredPageUrl);
return;
}
- MDC.put("id", id.toString());
+
+ HTTPBindingProcessor bp = (HTTPBindingProcessor) bindingProcessor;
try {
- String redirectUrl = (String) session
- .getAttribute(AbstractWebRequestHandler.REDIRECT_URL_SESSION_ATTRIBUTE);
- if (redirectUrl == null) {
- redirectUrl = bp.getRedirectURL();
- }
- if (redirectUrl != null) {
- try {
- bp.writeResultTo(new NullOutputStream(), encoding);
- getBindingProcessorManager().removeBindingProcessor(bp.getId());
- } finally {
- log.info("Sending deferred redirect, RedirectURL={}.", redirectUrl);
- resp.sendRedirect(redirectUrl);
- session.invalidate();
+ OutputStream outputStream;
+ String redirectUrl = bp.getRedirectURL();
+ if (redirectUrl != null && !redirectUrl.trim().isEmpty()) {
+ log.info("Sending (deferred) redirect to {}.", redirectUrl);
+ resp.sendRedirect(redirectUrl);
+ // TODO Couldn't we simply discard the output?
+ outputStream = new NullOutputStream();
+ } else {
+ log.debug("Setting HTTP status code {}.", bp.getResponseCode());
+ resp.setStatus(bp.getResponseCode());
+ resp.setHeader("Cache-Control", "no-store"); // HTTP 1.1
+ resp.setHeader("Pragma", "no-cache"); // HTTP 1.0
+ resp.setDateHeader("Expires", 0);
+ Map<String, String> responseHeaders = bp.getResponseHeaders();
+ for (Entry<String, String> header : responseHeaders.entrySet()) {
+ String key = header.getKey();
+ String value = header.getValue();
+ log.debug("Setting response header {}: {}.", key, value);
+ resp.setHeader(key, value);
}
- return;
- }
-
- log.trace("Setting response code: {}.", bp.getResponseCode());
- resp.setStatus(bp.getResponseCode());
- resp.setHeader("Cache-Control", "no-store"); // HTTP 1.1
- resp.setHeader("Pragma", "no-cache"); // HTTP 1.0
- resp.setDateHeader("Expires", 0);
- for (Iterator<String> it = bp.getResponseHeaders().keySet().iterator(); it
- .hasNext();) {
- String header = it.next();
- log.trace("Setting response header {}: {}.", header, bp.getResponseHeaders().get(header));
- resp.setHeader(header, bp.getResponseHeaders().get(header));
+ resp.setContentType(bp.getResultContentType());
+ log.info("Sending result.");
+ outputStream = resp.getOutputStream();
}
- resp.setContentType(bp.getResultContentType());
- resp.setCharacterEncoding(encoding);
- log.info("Sending result.");
- bp.writeResultTo(resp.getOutputStream(), encoding);
- resp.getOutputStream().flush();
- session.invalidate();
- getBindingProcessorManager().removeBindingProcessor(bp.getId());
-
+ bp.writeResultTo(outputStream, responseEncoding);
+ outputStream.flush();
} finally {
- MDC.remove("id");
+ bindingProcessorManager.removeBindingProcessor(id);
}
}
}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SessionListener.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SessionListener.java
index 1bec31b6..e7f05862 100644
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SessionListener.java
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SessionListener.java
@@ -35,11 +35,12 @@ public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
+ log.info("Session {} created.", event.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
- BindingProcessorManager manager = (BindingProcessorManager) event.getSession().getServletContext().getAttribute(SpringBKUServlet.BEAN_NAME);
+ BindingProcessorManager manager = (BindingProcessorManager) event.getSession().getServletContext().getAttribute("bindingProcessorManager");
manager.removeBindingProcessor(IdFactory.getInstance().createId(event.getSession().getId()));
log.info("Session {} destroyed.", event.getSession().getId());
}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SpringBKUServlet.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SpringBKUServlet.java
deleted file mode 100644
index 6a6f11e8..00000000
--- a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/SpringBKUServlet.java
+++ /dev/null
@@ -1,33 +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.online.webapp;
-
-import javax.servlet.http.HttpServlet;
-
-import at.gv.egiz.bku.binding.BindingProcessorManager;
-
-public abstract class SpringBKUServlet extends HttpServlet {
-
- private static final long serialVersionUID = 1L;
-
- public final static String BEAN_NAME="bindingProcessorManager";
-
- protected BindingProcessorManager getBindingProcessorManager() {
- return (BindingProcessorManager) getServletContext().getAttribute(BEAN_NAME);
- }
-
-}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/UIServlet.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/UIServlet.java
new file mode 100644
index 00000000..9b9b9927
--- /dev/null
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/UIServlet.java
@@ -0,0 +1,106 @@
+/*
+ * 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.online.webapp;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.servlet.RequestDispatcher;
+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.binding.BindingProcessor;
+import at.gv.egiz.bku.binding.BindingProcessorManager;
+import at.gv.egiz.bku.binding.HTTPBindingProcessor;
+import at.gv.egiz.bku.binding.Id;
+
+public class UIServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ private final Logger log = LoggerFactory.getLogger(UIServlet.class);
+
+ private String expiredPageUrl = "expired.jsp";
+
+ @Override
+ public void init() throws ServletException {
+ String url = getServletConfig().getInitParameter("expiredPageUrl");
+ if (url != null) {
+ try {
+ expiredPageUrl = new URL(url).toString();
+ log.info("Init expiredPageUrl to: {}.", expiredPageUrl);
+ } catch (MalformedURLException e) {
+ log.error("Failed to set expiredUrlPage {}.", url, e);
+ }
+ }
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+
+ BindingProcessorManager bindingProcessorManager = (BindingProcessorManager) getServletContext()
+ .getAttribute("bindingProcessorManager");
+ if (bindingProcessorManager == null) {
+ String msg = "Configuration error: BindingProcessorManager missing!";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ return;
+ }
+
+ Id id = (Id) req.getAttribute("id");
+ BindingProcessor bindingProcessor = null;
+ if (id == null
+ || !((bindingProcessor = bindingProcessorManager
+ .getBindingProcessor(id)) instanceof HTTPBindingProcessor)) {
+ resp.sendRedirect(expiredPageUrl);
+ return;
+ }
+
+ MoccaParameterBean parameterBean = new MoccaParameterBean((HTTPBindingProcessor) bindingProcessor);
+ req.setAttribute("moccaParam", parameterBean);
+
+ String uiPage = getServletConfig().getInitParameter("uiPage");
+ uiPage = parameterBean.getUIPage(uiPage);
+ if (uiPage == null) {
+ uiPage = "applet.jsp";
+ }
+
+ RequestDispatcher dispatcher = req.getRequestDispatcher(uiPage);
+ if (dispatcher == null) {
+ log.warn("Failed to get RequestDispatcher for page {}.", uiPage);
+ resp.sendError(HttpServletResponse.SC_NOT_FOUND);
+ } else {
+ dispatcher.forward(req, resp);
+ }
+
+ }
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ super.doPost(req, resp);
+ }
+
+}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/WebRequestHandler.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/WebRequestHandler.java
new file mode 100644
index 00000000..08b50699
--- /dev/null
+++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/WebRequestHandler.java
@@ -0,0 +1,137 @@
+/*
+* 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.online.webapp;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+
+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.binding.BindingProcessorManager;
+import at.gv.egiz.bku.binding.HTTPBindingProcessor;
+import at.gv.egiz.bku.binding.HttpUtil;
+import at.gv.egiz.bku.binding.Id;
+import at.gv.egiz.bku.binding.InputDecoderFactory;
+import at.gv.egiz.org.apache.tomcat.util.http.AcceptLanguage;
+
+public class WebRequestHandler extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ private final Logger log = LoggerFactory.getLogger(WebRequestHandler.class);
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
+ java.io.IOException {
+
+ BindingProcessorManager bindingProcessorManager = (BindingProcessorManager) getServletContext()
+ .getAttribute("bindingProcessorManager");
+ if (bindingProcessorManager == null) {
+ String msg = "Configuration error: BindingProcessorManager missing!";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ return;
+ }
+
+ Id id = (Id) req.getAttribute("id");
+ if (id == null) {
+ String msg = "No request id! Configuration error: ServletFilter missing?";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ return;
+ }
+
+ // if binding processor with same id is present: remove
+ bindingProcessorManager.removeBindingProcessor(id);
+
+ Locale locale = AcceptLanguage.getLocale(req.getHeader("Accept-Language"));
+ if (log.isInfoEnabled()) {
+ log.info("Recieved request (Accept-Language locale: {}).", locale);
+ }
+
+ // create new binding processor
+ String protocol = getServletConfig().getInitParameter("protocol");
+ if (protocol == null || protocol.isEmpty()) {
+ protocol = req.getScheme();
+ }
+ HTTPBindingProcessor bindingProcessor = (HTTPBindingProcessor) bindingProcessorManager
+ .createBindingProcessor(protocol, locale);
+
+ // set headers
+ LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
+ if (req.getHeaderNames() != null) {
+ for (Enumeration<?> headerName = req.getHeaderNames(); headerName
+ .hasMoreElements();) {
+ String name = (String) headerName.nextElement();
+ // Account for multiple headers with the same field-name, but
+ // they are very rare, so we are not using a StringBuffer.
+ Enumeration<?> headers = req.getHeaders(name);
+ String value = null;
+ while (headers.hasMoreElements()) {
+ value = (value == null)
+ ? (String) headers.nextElement()
+ : value + ", " + headers.nextElement();
+ }
+ headerMap.put(name, value);
+ }
+ }
+ bindingProcessor.setHTTPHeaders(headerMap);
+
+ // set request stream
+ InputStream inputStream;
+ if (req.getMethod().equals("POST")) {
+ inputStream = req.getInputStream();
+ } else {
+ headerMap.put(HttpUtil.HTTP_HEADER_CONTENT_TYPE, InputDecoderFactory.URL_ENCODED);
+ String queryString = req.getQueryString();
+ if (queryString != null) {
+ inputStream = new ByteArrayInputStream(queryString.getBytes("UTF-8"));
+ } else {
+ inputStream = new ByteArrayInputStream(new byte[] {});
+ }
+ }
+ bindingProcessor.consumeRequestStream(req.getRequestURL().toString(), inputStream);
+ inputStream.close();
+
+ // process
+ bindingProcessorManager.process(id, bindingProcessor);
+
+ log.debug("Sending redirect to user interface.");
+ // TODO: appending the jsessionid here breaks the separation of request
+ // handling and request state tracking done in the servlet filter, but
+ // the servlet filter does not allow us to modify the redirect
+ resp.sendRedirect("ui;jsessionid=" + id.toString());
+
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, java.io.IOException {
+ doPost(req, resp);
+ }
+
+}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/DataURLServerServlet.java b/BKUOnline/src/main/java/at/gv/egiz/mocca/id/DataURLServerServlet.java
index b40fd35f..57140e13 100644
--- a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/DataURLServerServlet.java
+++ b/BKUOnline/src/main/java/at/gv/egiz/mocca/id/DataURLServerServlet.java
@@ -20,8 +20,10 @@ package at.gv.egiz.mocca.id;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
+import java.util.Locale;
import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.XMLConstants;
@@ -38,12 +40,11 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
-import at.gv.egiz.bku.binding.BindingProcessor;
+import at.gv.egiz.bku.binding.BindingProcessorManager;
import at.gv.egiz.bku.binding.FormParameter;
-import at.gv.egiz.bku.binding.IdFactory;
+import at.gv.egiz.bku.binding.Id;
import at.gv.egiz.bku.binding.InputDecoder;
import at.gv.egiz.bku.binding.InputDecoderFactory;
-import at.gv.egiz.bku.online.webapp.SpringBKUServlet;
import at.gv.egiz.bku.slcommands.SLCommand;
import at.gv.egiz.bku.slcommands.SLMarshallerFactory;
import at.gv.egiz.bku.slcommands.SLResult;
@@ -55,9 +56,10 @@ import at.gv.egiz.bku.slcommands.impl.SLCommandImpl;
import at.gv.egiz.bku.slexceptions.SLCommandException;
import at.gv.egiz.bku.utils.DebugInputStream;
import at.gv.egiz.bku.utils.StreamUtil;
+import at.gv.egiz.org.apache.tomcat.util.http.AcceptLanguage;
import at.gv.egiz.slbinding.SLUnmarshaller;
-public class DataURLServerServlet extends SpringBKUServlet {
+public class DataURLServerServlet extends HttpServlet {
private static Logger log = LoggerFactory.getLogger(DataURLServerServlet.class);
@@ -73,6 +75,26 @@ public class DataURLServerServlet extends SpringBKUServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
+ BindingProcessorManager bindingProcessorManager = (BindingProcessorManager) getServletContext()
+ .getAttribute("bindingProcessorManager");
+ if (bindingProcessorManager == null) {
+ String msg = "Configuration error: BindingProcessorManager missing!";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ return;
+ }
+
+ Id id = (Id) req.getAttribute("id");
+ if (id == null) {
+ String msg = "No request id! Configuration error: ServletFilter missing?";
+ log.error(msg);
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+ return;
+ }
+
+ // if binding processor with same id is present: remove
+ bindingProcessorManager.removeBindingProcessor(id);
+
String userAgent = req.getHeader("User-Agent");
String contentType = req.getContentType();
log.debug("Content-Type: " + contentType + " User-Agent: " + userAgent);
@@ -148,12 +170,20 @@ public class DataURLServerServlet extends SpringBKUServlet {
}
}
-
- SAMLBindingProcessorImpl bindingProcessor = null;
- if (sessionId != null) {
- bindingProcessor = getBindingProcessor(sessionId);
+
+ Locale locale = AcceptLanguage.getLocale(req.getHeader("Accept-Language"));
+ if (log.isInfoEnabled()) {
+ log.info("Recieved request (Accept-Language locale: {}).", locale);
}
+ // create new binding processor
+ String protocol = getServletConfig().getInitParameter("protocol");
+ if (protocol == null || protocol.isEmpty()) {
+ protocol = req.getScheme();
+ }
+ SAMLBindingProcessorImpl bindingProcessor = (SAMLBindingProcessorImpl) bindingProcessorManager
+ .createBindingProcessor(protocol, locale);
+
if (bindingProcessor != null && respElement != null) {
SLResult slResult = null;
@@ -203,23 +233,8 @@ public class DataURLServerServlet extends SpringBKUServlet {
}
- resp.sendRedirect("bkuResult");
+ resp.sendRedirect("ui;jsessionid=" + id.toString());
}
- protected SAMLBindingProcessorImpl getBindingProcessor(String sessionId) {
-
- BindingProcessor bp = getBindingProcessorManager().getBindingProcessor(
- IdFactory.getInstance().createId(sessionId));
-
- if (bp instanceof SAMLBindingProcessorImpl) {
- log.debug("Found active BindingProcessor, using this one.");
- return (SAMLBindingProcessorImpl) bp;
- }
-
- return null;
-
- }
-
-
}
diff --git a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLBindingProcessorImpl.java b/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLBindingProcessorImpl.java
index ce4ac425..56513ee9 100644
--- a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLBindingProcessorImpl.java
+++ b/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLBindingProcessorImpl.java
@@ -77,8 +77,6 @@ public class SAMLBindingProcessorImpl extends
private String keyBoxIdentifier = "SecureSignatureKeypair";
- private String url = "www.egiz.gv.at";
-
private QESTemplates templates = new QESTemplates();
private IdLink idLink;
diff --git a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLRequestHandler.java b/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLRequestHandler.java
deleted file mode 100644
index 0209ca79..00000000
--- a/BKUOnline/src/main/java/at/gv/egiz/mocca/id/SAMLRequestHandler.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-* 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.mocca.id;
-
-import javax.servlet.http.HttpServletRequest;
-
-import at.gv.egiz.bku.online.webapp.AbstractWebRequestHandler;
-
-public class SAMLRequestHandler extends AbstractWebRequestHandler {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- protected String getRequestProtocol(HttpServletRequest req) {
- return "SAML";
- }
-
-}
diff --git a/BKUOnline/src/main/resources/web.properties b/BKUOnline/src/main/resources/web.properties
new file mode 100644
index 00000000..94651b70
--- /dev/null
+++ b/BKUOnline/src/main/resources/web.properties
@@ -0,0 +1,26 @@
+# 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.
+
+title=MOCCA
+javaPluginRequired=Java&trade; plug-in, version 6 update 4 or higher is required.
+installJava=Install Java&trade;
+incTextSize=increase text size
+decTextSize=decrease text size
+help=help
+
+local=Send request to local citizen card environment
+
+expiredTitle=Session Expired
+expiredMessage=Your session has expired. \ No newline at end of file
diff --git a/BKUOnline/src/main/resources/web_de.properties b/BKUOnline/src/main/resources/web_de.properties
new file mode 100644
index 00000000..cb7d3d33
--- /dev/null
+++ b/BKUOnline/src/main/resources/web_de.properties
@@ -0,0 +1,26 @@
+# 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.
+
+title=MOCCA
+javaPluginRequired=Java&trade; Plug-In, Version 6 Update 4 oder höher wird benötigt.
+installJava=Java&trade; installieren
+incTextSize=Text vergrößern
+decTextSize=Text verkleinern
+help=Hilfe
+
+local=Anfrage an lokale Bürgerkartenumgebung senden
+
+expiredTitle=Sitzung Abgelaufen
+expiredMessage=Ihre Sitzung ist abgelaufen. \ No newline at end of file
diff --git a/BKUOnline/src/main/webapp/WEB-INF/web.xml b/BKUOnline/src/main/webapp/WEB-INF/web.xml
index 13ed30ee..3a318844 100644
--- a/BKUOnline/src/main/webapp/WEB-INF/web.xml
+++ b/BKUOnline/src/main/webapp/WEB-INF/web.xml
@@ -1,5 +1,5 @@
<?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
@@ -12,138 +12,159 @@
the specific language governing permissions and limitations under the
License.
-->
-<web-app id="bkuonline" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name>http-security-layer-request</display-name>
-
- <listener>
- <listener-class>at.gv.egiz.bku.online.webapp.MoccaContextListener</listener-class>
- </listener>
-
- <!-- Begin Spring Config -->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ id="bkuonline" version="2.5">
+ <display-name>MOCCA Online</display-name>
+ <listener>
+ <listener-class>at.gv.egiz.bku.online.webapp.MoccaContextListener</listener-class>
+ </listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
+ <!--
+ You may specify your configuration resource below. Please do not
+ remove the the configurationResource parameter if not used, but set
+ it to an empty value.
+ -->
<param-name>configurationResource</param-name>
<param-value></param-value>
</context-param>
- <!-- End Spring Config -->
-
- <!-- Begin BKU Config -->
- <listener>
- <listener-class>at.gv.egiz.bku.online.webapp.SessionListener</listener-class>
- </listener>
- <listener>
- <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>BKUServlet</servlet-name>
- <servlet-class>at.gv.egiz.bku.online.webapp.BKURequestHandler</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>SAMLServlet</servlet-name>
- <servlet-class>at.gv.egiz.mocca.id.SAMLRequestHandler</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>DataURLServlet</servlet-name>
- <servlet-class>at.gv.egiz.mocca.id.DataURLServerServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>ResultServlet</servlet-name>
- <servlet-class>at.gv.egiz.bku.online.webapp.ResultServlet</servlet-class>
- <init-param>
- <param-name>responseEncoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>expiredPage</param-name>
- <param-value>expired.html</param-value>
- </init-param>
- </servlet>
+ <listener>
+ <listener-class>at.gv.egiz.bku.online.webapp.SessionListener</listener-class>
+ </listener>
+ <listener>
+ <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
+ </listener>
+ <servlet>
+ <!--
+ This servlet accepts HTTP(S) Security Layer requests and redirects to
+ UIServlet.
+ -->
+ <servlet-name>HTTPSecurityLayerServlet</servlet-name>
+ <servlet-class>at.gv.egiz.bku.online.webapp.WebRequestHandler</servlet-class>
+ <init-param>
+ <param-name>protocol</param-name>
+ <param-value>HTTP</param-value>
+ </init-param>
+ </servlet>
+ <servlet>
+ <!--
+ This Servlet handles user interaction. In fact it merely sets some
+ request attributes and hands over (forwards) to the requested uiPage
+ (e.g. applet.jsp).
+ -->
+ <servlet-name>UIServlet</servlet-name>
+ <servlet-class>at.gv.egiz.bku.online.webapp.UIServlet</servlet-class>
+ <init-param>
+ <!--
+ The uiPage parameter below specifies the default uiPage, which is
+ used if no specific page was requested.
+ -->
+ <param-name>uiPage</param-name>
+ <param-value>applet.jsp</param-value>
+ </init-param>
+ <init-param>
+ <!--
+ If no protocol specific request (e.g. http security layer request)
+ is associated with the request to this servlet, a temporary redirect
+ to the URL given below is sent to the browser.
+ -->
+ <param-name>expiredPageUrl</param-name>
+ <param-value>expired.jsp</param-value>
+ </init-param>
+ </servlet>
+ <servlet>
+ <servlet-name>ResultServlet</servlet-name>
+ <servlet-class>at.gv.egiz.bku.online.webapp.ResultServlet</servlet-class>
+ <init-param>
+ <param-name>responseEncoding</param-name>
+ <param-value>UTF-8</param-value>
+ </init-param>
+ <init-param>
+ <!--
+ If no protocol specific request (e.g. http security layer request)
+ is associated with the request to this servlet, a temporary redirect
+ to the URL given below is sent to the browser.
+ -->
+ <param-name>expiredPageUrl</param-name>
+ <param-value>expired.jsp</param-value>
+ </init-param>
+ </servlet>
<servlet>
+ <!--
+ STAL Web Service
+ -->
<servlet-name>STALService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
+ <!-- <servlet>-->
+ <!-- <servlet-name>SAMLServlet</servlet-name>-->
+ <!-- <servlet-class>at.gv.egiz.bku.online.webapp.WebRequestHandler</servlet-class> -->
+ <!-- <init-param>-->
+ <!-- <param-name>protocol</param-name>-->
+ <!-- <param-value>SAML</param-value>-->
+ <!-- </init-param>-->
+ <!-- </servlet>-->
+ <!-- <servlet>-->
+ <!-- <servlet-name>DataURLServlet</servlet-name>-->
+ <!-- <servlet-class>at.gv.egiz.mocca.id.DataURLServerServlet</servlet-class> -->
+ <!-- </servlet>-->
<servlet-mapping>
- <servlet-name>BKUServlet</servlet-name>
+ <servlet-name>HTTPSecurityLayerServlet</servlet-name>
<url-pattern>/http-security-layer-request</url-pattern>
</servlet-mapping>
- <servlet-mapping>
- <servlet-name>BKUServlet</servlet-name>
- <url-pattern>/https-security-layer-request</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>DataURLServlet</servlet-name>
- <url-pattern>/DataURLServer</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>ResultServlet</servlet-name>
- <url-pattern>/bkuResult</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>SAMLServlet</servlet-name>
- <url-pattern>/moccaid</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>DataURLServlet</servlet-name>
- <url-pattern>/DataURLServer</url-pattern>
- </servlet-mapping>
-
-
- <!--
- | Configure alternative applet pages that may be requested
- | via the 'appletPage' form parameter (cf. SLRequestForm.html)
- <servlet>
- <servlet-name>BKUAppletAlternative</servlet-name>
- <jsp-file>/appletAlternative.jsp</jsp-file>
- </servlet-->
-
- <!--
- | To disable applet caching load the applet via the AppletDispatcher
- | (cf. applet.jsp)
- <servlet>
- <servlet-name>AppletDispatcher</servlet-name>
- <servlet-class>at.gv.egiz.bku.online.webapp.AppletDispatcher</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>AppletDispatcher</servlet-name>
- <url-pattern>/applet/dispatch/*</url-pattern>
- </servlet-mapping-->
-
- <!-- End BKU Config -->
-
- <!-- Begin BKU Web Start Config
- | (activate 'include-webstart' profile)
- <servlet>
- <servlet-name>JnlpDownloadServlet</servlet-name>
- <servlet-class>jnlp.sample.servlet.JnlpDownloadServlet</servlet-class>
- <init-param>
- <param-name>logLevel</param-name>
- <param-value>DEBUG</param-value>
- </init-param>
- <init-param>
- <param-name>logPath</param-name>
- <param-value>logs/jnlpdownloadservlet.log</param-value>
- </init-param>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JnlpDownloadServlet</servlet-name>
- <url-pattern>/webstart/*</url-pattern>
- </servlet-mapping>
- -->
- <!-- End BKU Web Start Config -->
-
- <servlet-mapping>
- <servlet-name>STALService</servlet-name>
- <url-pattern>/stal</url-pattern>
- </servlet-mapping>
- <session-config>
- <session-timeout>5</session-timeout>
- </session-config>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
-</web-app>
+ <servlet-mapping>
+ <servlet-name>HTTPSecurityLayerServlet</servlet-name>
+ <url-pattern>/https-security-layer-request</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>UIServlet</servlet-name>
+ <url-pattern>/ui</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>ResultServlet</servlet-name>
+ <url-pattern>/result</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>STALService</servlet-name>
+ <url-pattern>/stal</url-pattern>
+ </servlet-mapping>
+ <!-- <servlet-mapping>-->
+ <!-- <servlet-name>SAMLServlet</servlet-name>-->
+ <!-- <url-pattern>/moccaid</url-pattern>-->
+ <!-- </servlet-mapping>-->
+ <!-- <servlet-mapping>-->
+ <!-- <servlet-name>DataURLServlet</servlet-name>-->
+ <!-- <url-pattern>/DataURLServer</url-pattern>-->
+ <!-- </servlet-mapping>-->
+ <session-config>
+ <session-timeout>5</session-timeout>
+ </session-config>
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+ <!--
+ Servlet Filter for Request/Session tracking.
+ -->
+ <filter>
+ <filter-name>RequestIdFilter</filter-name>
+ <filter-class>at.gv.egiz.bku.online.webapp.RequestIdFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>RequestIdFilter</filter-name>
+ <servlet-name>HTTPSecurityLayerServlet</servlet-name>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>RequestIdFilter</filter-name>
+ <servlet-name>UIServlet</servlet-name>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>RequestIdFilter</filter-name>
+ <servlet-name>ResultServlet</servlet-name>
+ </filter-mapping>
+</web-app> \ No newline at end of file
diff --git a/BKUOnline/src/main/webapp/applet.jsp b/BKUOnline/src/main/webapp/applet.jsp
index eba0ed87..ee1cca2a 100644
--- a/BKUOnline/src/main/webapp/applet.jsp
+++ b/BKUOnline/src/main/webapp/applet.jsp
@@ -14,226 +14,199 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"
- import="at.gv.egiz.bku.online.webapp.AppletDispatcher, org.apache.commons.lang.RandomStringUtils, org.apache.commons.lang.StringEscapeUtils" %>
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%--
+
+ This JSP page loads the MOCCA applet into the browser. It is not intended
+ to by directly called by the browser, but the UIServlet should be called.
+ The UIServlet sets some request attributes and forwards to this page.
+
+ The look and behavior of this page and the embedded applet may be
+ customized by a number of parameters handed over in the request. If this
+ does not provide enough flexibility you may choose to modify this page
+ or provide an alternative customized page. The name of the customized page
+ may be specified as parameter in the original request. The UIServlet will
+ forward to the given page.
+
+ --%>
+<%-- Applet --%>
+<c:set var="defaultWidth" value="190"/>
+<c:set var="defaultHeight" value="130"/>
+<c:set var="minJavaVersion" value="1.6.0_04"/>
+<%-- Images --%>
+<c:set var="defaultButtonWidth" value="16"/>
+<c:set var="defaultButtonHeight" value="22"/>
+<%-- URLs --%>
+<c:url value="/applet" var="codebaseUrl"/>
+<c:url value="/help/" var="helpUrl"/>
+<c:url value="/stal;jsessionid=${requestScope.id}?wsdl" var="wsdlUrl"/>
+<c:url value="/result;jsessionid=${requestScope.id}" var="resultUrl"/>
+<%-- Messages --%>
+<fmt:bundle basename="web">
+<%-- Applet archive and class --%>
+<%--
+ Uncomment the following line if you would like to prevent applet caching!
+--%>
+<%-- jsp:useBean id="now" class="java.util.Date" scope="request"/ --%>
+<c:choose>
+ <c:when test="${requestScope.moccaParam.extension == 'activation'}">
+ <c:url var="appletArchive" value="BKUAppletExt-single.jar">
+ <c:if test="${! empty now}">
+ <c:param name="no-cache" value="${now.time}"/>
+ </c:if>
+ </c:url>
+ <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.ActivationApplet.class"/>
+ </c:when>
+ <c:when test="${requestScope.moccaParam.extension == 'pin'}">
+ <c:url var="appletArchive" value="BKUAppletExt-single.jar">
+ <c:if test="${! empty now}">
+ <c:param name="no-cache" value="${now.time}"/>
+ </c:if>
+ </c:url>
+ <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.PINManagementApplet.class"/>
+ </c:when>
+ <c:otherwise>
+ <c:url var="appletArchive" value="BKUApplet-single.jar">
+ <c:if test="${! empty now}">
+ <c:param name="no-cache" value="${now.time}"/>
+ </c:if>
+ </c:url>
+ <c:set var="appletClass" value="at.gv.egiz.bku.online.applet.BKUApplet.class"/>
+ </c:otherwise>
+</c:choose>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>MOCCA Applet</title>
- <link rel="shortcut icon" href="img/chip16.ico" type="image/x-icon">
- <script type="text/javascript" src="js/deployJava.js"></script>
- <style type="text/css" media="all">@import "css/applet.css";</style>
-
- <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
- <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
- <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
- </head>
- <%
- String locale = StringEscapeUtils.escapeJavaScript(
- (String) session.getAttribute("locale"));
-
- int width = session.getAttribute("appletWidth") == null ? 190
- : (Integer) session.getAttribute("appletWidth");
- int height = session.getAttribute("appletHeight") == null ? 130
- : (Integer) session.getAttribute("appletHeight");
- String backgroundImg = StringEscapeUtils.escapeJavaScript(
- session.getAttribute("appletBackground") == null
- ? "../img/chip32.png"
- : (String) session.getAttribute("appletBackground"));
- String backgroundColor = StringEscapeUtils.escapeJavaScript(
- (String) session.getAttribute("appletBackgroundColor"));
- String guiStyle = StringEscapeUtils.escapeJavaScript(
- (String) session.getAttribute("appletGuiStyle"));
-
- String sessionId = StringEscapeUtils.escapeJavaScript(session.getId());
-
- String extension = (String) session.getAttribute("appletExtension");
- String appletClass, appletArchive;
- if ("activation".equalsIgnoreCase(extension)) {
- appletArchive = "BKUAppletExt-single";
- appletClass = "at.gv.egiz.bku.online.applet.ActivationApplet.class";
- } else if ("pin".equalsIgnoreCase(extension)) {
- appletArchive = "BKUAppletExt-single";
- appletClass = "at.gv.egiz.bku.online.applet.PINManagementApplet.class";
- } else {
- appletArchive = "BKUApplet-single";
- appletClass = "at.gv.egiz.bku.online.applet.BKUApplet.class";
+ <head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+ <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
+ <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
+ <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
+ <title><fmt:message key="title"/></title>
+ <link rel="shortcut icon" href="img/chip16.ico" type="image/x-icon">
+ <style type="text/css" media="all">
+ root {
+ display: block;
+ }
+ body {
+ background: #ffffff;
+ padding: 0;
+ margin: 0;
+ border-style: none;
+ width: <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>px;
+ }
+ #container {
+ padding: 0;
+ margin: 0;
+ width: <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>px;
+ background: <c:out value="${requestScope.moccaParam.appletBackgroundColor}" default="#eeeeee"/>;
+ }
+ #container applet{
+ padding: 0;
+ margin: 0;
+ }
+ .button {
+ width: <c:out value="${defaultButtonWidth}px"/>;
+ height: <c:out value="${defaultButtonHeight}px"/>;
+ text-decoration: none;
+ border-style: none;
+ }
+ #message {
+ margin: 0;
+ padding: 0.25em 0 0.25em 0;
+ clear: both;
+ }
+ #message p{
+ margin: 0;
+ padding: 0.25em 0.5em 0.25em 0.5em;
+ }
+ </style>
+ <script type="text/javascript" src="http://www.java.com/js/deployJava.js"></script>
+ <script type="text/javascript">
+ var iframe = (top.location.href != window.location.href);
+ var fontSize = 100;
+ var width = <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>;
+ var height = <c:out value="${requestScope.moccaParam.appletHeight}" default="${defaultHeight}"/>;
+ var buttonWidth = <c:out value="${defaultButtonWidth}"/>;
+ var buttonHeight = <c:out value="${defaultButtonHeight}"/>;
+ var buttons = ["incButton", "decButton", "helpButton"];
+ function focusToBrowser() {
+ document.getElementById("focus").focus();
+ }
+ function focusToApplet() {
+ var applet = document.getElementById("moccaapplet");
+ if (applet != null) {
+ applet.getFocusFromBrowser();
}
-
- // disable applet caching
- boolean disableAppletCaching = false;
- String codebase = "applet";
-
- if (disableAppletCaching) {
- // run in AppletDispatcher context and
- // append random alphanumeric string to avoid applet caching
- // TODO prepend ../ to all xxxURL applet paramaters
- codebase += "/" + AppletDispatcher.DISPATCH_CTX;
- String rand = AppletDispatcher.RAND_PREFIX +
- RandomStringUtils.randomAlphanumeric(16);
- appletArchive += rand;
+ }
+ function resize(factor) {
+ width = Math.ceil(width * factor);
+ height = Math.ceil(height * factor);
+ var container = document.getElementById("container");
+ if (container != null) {
+ container.style.width = width + "px";
}
-
- %>
- <body id="appletpage" style="width:<%=width%>px">
-
-
- <div id="container" style="float: left; width: <%= width %>">
-
- <form name="increaseform" action="javascript:increaseSize()" method="get">
-
- <!-- increase font size image -->
- <input type="image" src="img/inc.png" alt="Text vergrößern" width="13px" height="18px" style="float: left;" id="increase_image"/>
-
- </form>
-
-
- <form name="decreaseform" action="javascript:decreaseSize()" method="get">
-
- <!-- decrease font size image -->
- <input type="image" src="img/dec.png" alt="Text verkleinern" width="13px" height="18px" style="float: left;" id="decrease_image"/>
-
- </form>
-
-
-
- <form name="helpform" action="help/index.html" method="get" target="_new"
- onsubmit="this.action=document.moccaapplet.getHelpURL(); this.submit(); return false;">
-
- <!-- invisible input -->
- <input type="image" src="img/help.png" alt=" " width="0px" height="0px" style="float: left;" onFocus="focusToApplet()"/>
-
- <!-- help image -->
- <input type="image" src="img/help.png" alt="Hilfe" width="13px" height="18px" style="float: right;" id="helpimage"/>
-
-
- </form>
-
-
-
- <script type="text/javascript">
-
- if (!deployJava.versionCheck('1.6.0_04+')) {
- document.write('<p>Diese Anwendung benötigt Version 6 Update 4 oder höher der <a href="" onclick="deployJava.installLatestJRE();">Java&trade; Laufzeitumgebung</a>.</p>');
+ var applet = document.getElementById("moccaapplet");
+ if (applet != null) {
+ applet.width = width;
+ applet.height = height;
+ }
+ buttonWidth = Math.ceil(buttonWidth * factor);
+ buttonHeight = Math.ceil(buttonHeight * factor);
+ for (var b in buttons) {
+ var button = document.getElementById(buttons[b]);
+ if (button != null) {
+ button.style.width = buttonWidth + "px";
+ button.style.height = buttonHeight + "px";
+ }
+ }
+ fontSize *= factor;
+ document.body.style.fontSize = fontSize + "%";
+ }
+ </script>
+ </head>
+ <body>
+ <div id="container">
+ <a href="#" id="focus" onclick="resize(1.2); return false;" style="float: left;"><img alt="<fmt:message key="incTextSize"/>" src="img/inc.png" id="incButton" class="button"></a>
+ <a href="#" onclick="resize(1/1.2); return false;" style="float: left;"><img alt="<fmt:message key="decTextSize"/>" src="img/dec.png" id="decButton" class="button"></a>
+ <a href="<c:out value="${helpUrl}"/>" onclick="this.href = document.moccaapplet.getHelpURL(); return true;" target="_new" style="float: right;"><img alt="<fmt:message key="help"/>" src="img/help.png" id="helpButton" class="button"></a>
+ <div id="message" style="display: none;">
+ <p><fmt:message key="javaPluginRequired"/></p>
+ <p style="text-align: right;">
+ <a style="width: 90%; font-size: 100%" href="http://www.java.com" onclick="deployJava.installLatestJRE(); return false;"><fmt:message key="installJava"/></a>
+ </p>
+ </div><script type="text/javascript">
+ if (iframe) {
+ document.getElementById("buttons").style.visibility = "hidden";
+ }
+ if (!deployJava.versionCheck('<c:out value="${minJavaVersion}+"/>')) {
+ document.getElementById("message").style.display = "block";
} else {
var attributes = {
- codebase :'<%=codebase%>',
- code : '<%=appletClass%>',
- archive : '<%=appletArchive +".jar"%>',
- width : <%=width%>,
- height :<%=height%>,
+ codebase :'<c:out value="${codebaseUrl}"/>',
+ code : '<c:out value="${appletClass}"/>',
+ archive : '<c:out value="${appletArchive}"/>',
+ width : <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>,
+ height : <c:out value="${requestScope.moccaParam.appletHeight}" default="${defaultHeight}"/>,
name : 'moccaapplet',
id : 'moccaapplet'
};
var parameters = {
- GuiStyle : '<%=guiStyle%>',
- Locale : '<%=locale%>',
- Background : '<%=backgroundImg%>',
- BackgroundColor : '<%=backgroundColor%>',
- WSDL_URL : '../stal;jsessionid=<%=sessionId%>?wsdl',
- HelpURL : 'help/',
- SessionID : '<%=sessionId%>',
- RedirectURL : '../bkuResult',
+ GuiStyle : '<c:out value="${requestScope.moccaParam.guiStyle}" default="simple"/>',
+ Locale : '<c:out value="${requestScope.moccaParam.locale}" default=""/>',
+ Background : '<c:out value="${requestScope.moccaParam.appletBackground}" default=""/>',
+ BackgroundColor : '<c:out value="${requestScope.moccaParam.appletBackgroundColor}" default="#eeeeee"/>',
+ WSDL_URL : '<c:out value="${wsdlUrl}"/>',
+ HelpURL : '<c:out value="${helpUrl}"/>',
+ SessionID : '<c:out value="${requestScope.id}"/>',
+ RedirectURL : '<c:out value="${resultUrl}"/>',
RedirectTarget: '_parent',
EnforceRecommendedPINLength: 'true'
};
- deployJava.runApplet(attributes, parameters, '1.6.0_04');
+ deployJava.runApplet(attributes, parameters, '<c:out value="${minJavaVersion}"/>');
}
-
- </script>
-
-
-
- </div>
-
- </body>
-
- <script>
-
-
-
- function focusToBrowser() {
-
- // put focus to window
- // focus can be assigned to any focusable field on the embedding website
-
- //alert("Put focus to browser..");
- //self.focus();
- document.getElementById("helpimage").focus();
-
- }
-
- function focusToApplet() {
-
- //alert('try to set focus to applet');
- if (document != null && document.moccaapplet != null) {
-
- //alert('set focus to applet.');
- document.moccaapplet.getFocusFromBrowser();
- return true;
- }
- }
-
-
- function increaseSize() {
-
- var appwidth = document.moccaapplet.width;
- var appheight = document.moccaapplet.height;
-
- document.moccaapplet.width = (appwidth * 1.2);
- document.moccaapplet.height = (appheight * 1.2);
-
- document.getElementById("container").style.width = (appwidth * 1.2);
-
- // TODO: This does not work in firefox, seems that width and height attributes cannot be read
- // and set from input of type image
- var image_width = document.getElementById("increase_image").width;
- var image_height = document.getElementById("increase_image").height;
-
-
- document.getElementById("helpimage").width = (image_width * 1.2);
- document.getElementById("helpimage").height = (image_height * 1.2);
-
- document.getElementById("increase_image").width = (image_width * 1.2);
- document.getElementById("increase_image").height = (image_height * 1.2);
-
- document.getElementById("decrease_image").width = (image_width * 1.2);
- document.getElementById("decrease_image").height = (image_height * 1.2);
-
-
- }
-
- function decreaseSize() {
-
- var appwidth = document.moccaapplet.width;
- var appheight = document.moccaapplet.height;
-
- document.moccaapplet.width = (appwidth * 0.8333333333333);
- document.moccaapplet.height = (appheight * 0.8333333333333);
-
- document.getElementById("container").style.width = (appwidth * 0.8333333333333);
-
- // TODO: This does not work in firefox, seems that width and height attributes cannot be read
- // and set from input of type image
- var image_width = document.getElementById("increase_image").width;
- var image_height = document.getElementById("increase_image").height;
-
-
- document.getElementById("helpimage").width = (image_width * 0.8333333333333);
- document.getElementById("helpimage").height = (image_height * 0.8333333333333);
-
- document.getElementById("increase_image").width = (image_width * 0.8333333333333);
- document.getElementById("increase_image").height = (image_height * 0.8333333333333);
-
- document.getElementById("decrease_image").width = (image_width * 0.8333333333333);
- document.getElementById("decrease_image").height = (image_height * 0.8333333333333);
-
-
- }
-
- </script>
-
+ </script></div>
+ </body>
</html>
+</fmt:bundle> \ No newline at end of file
diff --git a/BKUOnline/src/main/webapp/css/applet.css b/BKUOnline/src/main/webapp/css/applet.css
deleted file mode 100644
index d2c734a1..00000000
--- a/BKUOnline/src/main/webapp/css/applet.css
+++ /dev/null
@@ -1,15 +0,0 @@
-root {
- display: block;
-}
-
-body {
- background: #ffffff;
- /*background-image: url(../img/mocca-t_s.png);*/
- padding: 0;
- margin: 0;
- border-style: none;
- /*
- width:<%=width%>
- */
-}
-
diff --git a/BKUOnline/src/main/webapp/css/appletAlternative.css b/BKUOnline/src/main/webapp/css/appletAlternative.css
deleted file mode 100644
index ce11f1b2..00000000
--- a/BKUOnline/src/main/webapp/css/appletAlternative.css
+++ /dev/null
@@ -1,12 +0,0 @@
-root {
- display: block;
-}
-
-body {
- background: #ffffff;
- background-image: url(../img/mocca-t_s.png);
- padding: 0;
- margin: 0;
- border-style: none;
-}
-
diff --git a/BKUOnline/src/main/webapp/expired.html b/BKUOnline/src/main/webapp/expired.jsp
index 2bb961f5..d7a8d7e6 100644
--- a/BKUOnline/src/main/webapp/expired.html
+++ b/BKUOnline/src/main/webapp/expired.jsp
@@ -14,16 +14,18 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%-- Messages --%>
+<fmt:bundle basename="web">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Session Expired</title>
-</head>
-<body>
- <p>
- Ihre Sitzung ist abgelaufen.
- <!--Ein neuer BKU request kann im <a href="HTTP-ohne.html">Requestformular</a> erstellt werden.-->
- </p>
-</body>
-</html> \ No newline at end of file
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title><fmt:message key="expiredTitle"/></title>
+ </head>
+ <body>
+ <p><fmt:message key="expiredMessage"/></p>
+ </body>
+</html>
+</fmt:bundle> \ No newline at end of file
diff --git a/BKUOnline/src/main/webapp/img/dec.png b/BKUOnline/src/main/webapp/img/dec.png
index 87693cf4..c0b85e84 100644
--- a/BKUOnline/src/main/webapp/img/dec.png
+++ b/BKUOnline/src/main/webapp/img/dec.png
Binary files differ
diff --git a/BKUOnline/src/main/webapp/img/help.png b/BKUOnline/src/main/webapp/img/help.png
index 5d6da3bf..ecb36e63 100644
--- a/BKUOnline/src/main/webapp/img/help.png
+++ b/BKUOnline/src/main/webapp/img/help.png
Binary files differ
diff --git a/BKUOnline/src/main/webapp/img/inc.png b/BKUOnline/src/main/webapp/img/inc.png
index 26e58b80..960f710d 100644
--- a/BKUOnline/src/main/webapp/img/inc.png
+++ b/BKUOnline/src/main/webapp/img/inc.png
Binary files differ
diff --git a/BKUOnline/src/main/webapp/js/deployJava_orig.js b/BKUOnline/src/main/webapp/js/deployJava_orig.js
deleted file mode 100644
index 316fa278..00000000
--- a/BKUOnline/src/main/webapp/js/deployJava_orig.js
+++ /dev/null
@@ -1,725 +0,0 @@
-/*
- * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of Sun Microsystems nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Added by EGIZ:
- * This file contains workarounds to
- * [#423] Firefox 3.0.11 bug #498132 causes applet loading failure
- * (lines 95-99)
- * [#424] Web Start loading via java plugin (Sun deployment script) fails on WinXP/Vista
- * (lines 501-506)
- *
- * features:
- * [#425] Disable WebStart Launch Button for MacOS
- * (lines 492-504)
- *
- */
-
-/*
- * deployJava.js
- *
- * This file is part of the Deployment Toolkit. It provides functions for web
- * pages to detect the presence of a JRE, install the latest JRE, and easily run
- * applets or Web Start programs. Usage guide may be found at http://<TBD>/.
- *
- * The "live" copy of this file may be found at
- * http://java.com/js/deployJava.js.
- * You are encouraged to link directly to the live copy of the file.
- *
- * @version @(#)deployJava.js XXXXX
- */
-
-var deployJava={
- debug:null,
-
- myInterval:null,
- preInstallJREList:null,
- returnPage:null,
- brand:null,
- locale:null,
- installType:null,
-
- EAInstallEnabled:false,
- EarlyAccessURL:null,
-
- // GetJava page
- getJavaURL:'http://java.sun.com/webapps/getjava/BrowserRedirect?host=java.com',
-
- // Apple redirect page
- appleRedirectPage:'http://www.apple.com/support/downloads/',
- oldMimeType:'application/npruntime-scriptable-plugin;DeploymentToolkit',
- mimeType:'application/java-deployment-toolkit',
- launchButtonPNG:'http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png',
-
- getJREs:function(){
- var list=new Array();
- if(deployJava.isPluginInstalled()){
- var plugin=deployJava.getPlugin();
- var VMs=plugin.jvms;
- for(var i=0;i<VMs.getLength();i++){
- list[i]=VMs.get(i).version;
- }
- }else{
- var browser=deployJava.getBrowser();
-
- if(browser=='MSIE'){
- if(deployJava.testUsingActiveX('1.8.0')){
- list[0]='1.8.0';
- }else if(deployJava.testUsingActiveX('1.7.0')){
- list[0]='1.7.0';
- }else if(deployJava.testUsingActiveX('1.6.0')){
- list[0]='1.6.0';
- }else if(deployJava.testUsingActiveX('1.5.0')){
- list[0]='1.5.0';
- }else if(deployJava.testUsingActiveX('1.4.2')){
- list[0]='1.4.2';
- }else if(deployJava.testForMSVM()){
- list[0]='1.1';
- }
- }
- else if(browser=='Netscape Family'){
- if(deployJava.testUsingMimeTypes('1.8')){
- list[0]='1.8.0';
- }else if(deployJava.testUsingMimeTypes('1.7')){
- list[0]='1.7.0';
- }else if(deployJava.testUsingMimeTypes('1.6')){
- list[0]='1.6.0';
- }else if(deployJava.testUsingMimeTypes('1.5')){
- list[0]='1.5.0';
- }else if(deployJava.testUsingMimeTypes('1.4.2')){
- list[0]='1.4.2';
- }
- }else if(browser=='Safari'){
- if(deployJava.testUsingPluginsArray('1.8.0')){
- list[0]='1.8.0';
- }else if(deployJava.testUsingPluginsArray('1.7.0')){
- list[0]='1.7.0';
- }else if(deployJava.testUsingPluginsArray('1.6.0')){
- list[0]='1.6.0';
- }else if(deployJava.testUsingPluginsArray('1.5.0')){
- list[0]='1.5.0';
- }else if(deployJava.testUsingPluginsArray('1.4.2')){
- list[0]='1.4.2';
- }
- }
- }
-
- if(deployJava.debug){
- for(var i=0;i<list.length;++i){
- alert('We claim to have detected Java SE '+list[i]);
- }
- }
-
- return list;
- },
-
- installJRE:function(requestVersion){
- var ret=false;
- if(deployJava.isPluginInstalled()){
- if(deployJava.getPlugin().installJRE(requestVersion)){
- deployJava.refresh();
- if(deployJava.returnPage!=null){
- document.location=deployJava.returnPage;
- }
- return true;
- }else{
- return false;
- }
- }else{
- return deployJava.installLatestJRE();
- }
- },
-
- installLatestJRE:function(){
- if(deployJava.isPluginInstalled()){
- if(deployJava.getPlugin().installLatestJRE()){
- deployJava.refresh();
- if(deployJava.returnPage!=null){
- document.location=deployJava.returnPage;
- }
- return true;
- }else{
- return false;
- }
- }else{
- var browser=deployJava.getBrowser();
- var platform=navigator.platform.toLowerCase();
- if((deployJava.EAInstallEnabled=='true') &&
- (platform.indexOf('win')!=-1) &&
- (deployJava.EarlyAccessURL!=null)) {
-
- deployJava.preInstallJREList=deployJava.getJREs();
- if(deployJava.returnPage!=null){
- deployJava.myInterval=
- setInterval("deployJava.poll()",3000);
- }
-
- location.href=deployJava.EarlyAccessURL;
- return false;
- }else{
- if(browser=='MSIE'){
- return deployJava.IEInstall();
- }else if((browser=='Netscape Family')&&
- (platform.indexOf('win32')!=-1)){
- return deployJava.FFInstall();
- }else{
- location.href=deployJava.getJavaURL+
- ((deployJava.returnPage!=null)?
- ('&returnPage='+deployJava.returnPage):'')+
- ((deployJava.locale!=null)?
- ('&locale='+deployJava.locale):'')+
- ((deployJava.brand!=null)?
- ('&brand='+deployJava.brand):'');
- }
- return false;
- }
- }
- },
-
- runApplet:function(attributes,parameters,minimumVersion){
- if(minimumVersion=='undefined'||minimumVersion==null){
- minimumVersion='1.1';
- }
-
- var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
-
- var matchData=minimumVersion.match(regex);
-
- if(deployJava.returnPage==null){
- deployJava.returnPage=document.location;
- }
-
- if(matchData!=null){
- var browser=deployJava.getBrowser();
- if((browser!='?')&&(browser!='Safari')){
- if(deployJava.versionCheck(minimumVersion+'+')){
- deployJava.writeAppletTag(attributes,parameters);
- }else if(deployJava.installJRE(minimumVersion+'+')){
- deployJava.refresh();
- location.href=document.location;
- deployJava.writeAppletTag(attributes,parameters);
- }
- }else{
- deployJava.writeAppletTag(attributes,parameters);
- }
- }else{
- if(deployJava.debug){
- alert('Invalid minimumVersion argument to runApplet():'+
- minimumVersion);
- }
- }
- },
-
- writeAppletTag:function(attributes,parameters){
- var s='<'+'applet ';
- for(var attribute in attributes){
- s+=(' '+attribute+'="'+attributes[attribute]+'"');
- }
- s+='>';
- document.write(s);
-
- if(parameters!='undefined'&&parameters!=null){
- var codebaseParam=false;
- for(var parameter in parameters){
- if(parameter=='codebase_lookup'){
- codebaseParam=true;
- }
- s='<param name="'+parameter+'" value="'+
- parameters[parameter]+'">';
- document.write(s);
- }
- if(!codebaseParam){
- document.write('<param name="codebase_lookup" value="false">');
- }
- }
- document.write('<'+'/'+'applet'+'>');
- },
-
- versionCheck:function(versionPattern)
-
- {
- var index=0;
- var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$";
-
- var matchData=versionPattern.match(regex);
-
- if(matchData!=null){
- var familyMatch=true;
-
- var patternArray=new Array();
-
- for(var i=1;i<matchData.length;++i){
- if((typeof matchData[i]=='string')&&(matchData[i]!='')){
- patternArray[index]=matchData[i];
- index++;
- }
- }
-
- if(patternArray[patternArray.length-1]=='+'){
- familyMatch=false;
- patternArray.length--;
- }else{
- if(patternArray[patternArray.length-1]=='*'){
- patternArray.length--;
- }
- }
-
- var list=deployJava.getJREs();
- for(var i=0;i<list.length;++i){
- if(deployJava.compareVersionToPattern(list[i],patternArray,
- familyMatch)){
- return true;
- }
- }
-
- return false;
- }else{
- alert('Invalid versionPattern passed to versionCheck: '+
- versionPattern);
- return false;
- }
- },
-
- isWebStartInstalled:function(minimumVersion){
-
- var browser=deployJava.getBrowser();
- if((browser=='?')||(browser=='Safari')){
- return true;
- }
-
- if(minimumVersion=='undefined'||minimumVersion==null){
- minimumVersion='1.4.2';
- }
-
- var retval=false;
- var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
- var matchData=minimumVersion.match(regex);
-
- if(matchData!=null){
- retval=deployJava.versionCheck(minimumVersion+'+');
- }else{
- if(deployJava.debug){
- alert('Invalid minimumVersion argument to isWebStartInstalled(): '+minimumVersion);
- }
- retval=deployJava.versionCheck('1.4.2+');
- }
- return retval;
- },
-
- createWebStartLaunchButton:function(jnlp,minimumVersion){
-
- if(deployJava.returnPage==null){
- deployJava.returnPage=jnlp;
- }
- var url='javascript:'+'if (!deployJava.isWebStartInstalled(&quot;'+
- minimumVersion+'&quot;)) {'+'if (deployJava.installLatestJRE()) {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+'}'+'} else {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+'}';document.write('<'+'a href="'+url+'" onMouseOver="window.status=\'\'; '+'return true;"><'+'img '+'src="'+deployJava.launchButtonPNG+'" '+'border="0" /><'+'/'+'a'+'>');
- },
-
- launch:function(jnlp){
- if(deployJava.isPluginInstalled()){
- return deployJava.getPlugin().launch(jnlp);
- }else{
- document.location=jnlp;return true;
- }
- },
-
- isPluginInstalled:function(){
- var plugin=deployJava.getPlugin();
- if(plugin&&plugin.jvms){
- return true;
- }else{
- return false;
- }
- },
-
- isAutoUpdateEnabled:function(){
- if(deployJava.isPluginInstalled()){
- return deployJava.getPlugin().isAutoUpdateEnabled();
- }
- return false;
- },
-
- setAutoUpdateEnabled:function(){
- if(deployJava.isPluginInstalled()){
- return deployJava.getPlugin().setAutoUpdateEnabled();
- }
- return false;
- },
-
- setInstallerType:function(type){
- deployJava.installType=type;
- if(deployJava.isPluginInstalled()){
- return deployJava.getPlugin().setInstallerType(type);
- }
- return false;
- },
-
- setAdditionalPackages:function(packageList){
- if(deployJava.isPluginInstalled()){
- return deployJava.getPlugin().setAdditionalPackages(
- packageList);
- }
- return false;
- },
-
- setEarlyAccess:function(enabled){
- deployJava.EAInstallEnabled=enabled;
- },
-
- isPlugin2:function(){
- if(deployJava.isPluginInstalled()){
- if(deployJava.versionCheck('1.6.0_10+')){
- try{
- return deployJava.getPlugin().isPlugin2();
- }catch(err){
-
- }
- }
- }
- return false;
- },
-
-
- getPlugin:function(){
- deployJava.refresh();
- var ret=document.getElementById('deployJavaPlugin');
- return ret;
- },
-
- compareVersionToPattern:function(version,patternArray,familyMatch){
- var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
- var matchData=version.match(regex);
-
- if(matchData!=null){
- var index=0;
- var result=new Array();
-
- for(var i=1;i<matchData.length;++i){
- if((typeof matchData[i]=='string')&&(matchData[i]!=''))
- {
- result[index]=matchData[i];
- index++;
- }
- }
-
- var l=Math.min(result.length,patternArray.length);
-
- if(familyMatch){
- for(var i=0;i<l;++i){
- if(result[i]!=patternArray[i])return false;
- }
-
- return true;
- }else{
- for(var i=0;i<l;++i){
- if(result[i]<patternArray[i]){
- return false;
- }else if(result[i]>patternArray[i]){
- return true;
- }
- }
-
- return true;
- }
- }else{
- return false;
- }
- },
-
-
- getBrowser:function(){
- var browser=navigator.userAgent.toLowerCase();
-
- if(deployJava.debug){
- alert('userAgent -> '+browser);
- }
-
- if((navigator.vendor)&&
- (navigator.vendor.toLowerCase().indexOf('apple')!=-1)&&
- (browser.indexOf('safari')!=-1)){
- if(deployJava.debug){
- alert('We claim to have detected "Safari".');
- }
- return'Safari';
- }else if(browser.indexOf('msie')!=-1){
- if(deployJava.debug){
- alert('We claim to have detected "IE".');
- }
- return'MSIE';
- }else if((browser.indexOf('mozilla')!=-1)||
- (browser.indexOf('firefox')!=-1)){
- if(deployJava.debug){
- alert('We claim to have detected a Netscape family browser.');
- }
- return'Netscape Family';
- }else{
- if(deployJava.debug){
- alert('We claim to have failed to detect a browser.');
- }
- return'?';
- }
- },
-
-
- testUsingActiveX:function(version){
- var objectName='JavaWebStart.isInstalled.'+version+'.0';
-
- if(!ActiveXObject){
- if(deployJava.debug){
- alert('Browser claims to be IE, but no ActiveXObject object?');
- }
- return false;
- }
-
- try{
- return(new ActiveXObject(objectName)!=null);
- }catch(exception){
- return false;
- }
- },
-
-
- testForMSVM:function(){
- var clsid='{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';
-
- if(typeof oClientCaps!='undefined'){
- var v=oClientCaps.getComponentVersion(clsid,"ComponentID");
- if((v=='')||(v=='5,0,5000,0')){
- return false;
- }else{
- return true;
- }
- }else{
- return false;
- }
- },
-
-
- testUsingMimeTypes:function(version){
- if(!navigator.mimeTypes){
- if(deployJava.debug){
- alert('Browser claims to be Netscape family, but no mimeTypes[] array?');
- }
- return false;
- }
-
- for(var i=0;i<navigator.mimeTypes.length;++i){
- s=navigator.mimeTypes[i].type;
- var m=s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);
- if(m!=null){
- if(deployJava.compareVersions(m[1],version)){
- return true;
- }
- }
- }
- return false;
- },
-
-
- testUsingPluginsArray:function(version){
- if((!navigator.plugins)||(!navigator.plugins.length)){
- return false;
- }
- var platform=navigator.platform.toLowerCase();
- for(var i=0;i<navigator.plugins.length;++i){
- s=navigator.plugins[i].description;
-
- if(s.search(/^Java Switchable Plug-in (Cocoa)/)!=-1){
- if(deployJava.compareVersions("1.5.0",version)){
- return true;
- }
- }else if(s.search(/^Java/)!=-1){
- if(platform.indexOf('win')!=-1){
- if(deployJava.compareVersions("1.5.0",version)||deployJava.compareVersions("1.6.0",version)){
- return true;
- }
- }
- }
- }
- if(deployJava.compareVersions("1.5.0",version)){
- return true;
- }
- return false;
- },
-
- IEInstall:function(){
-
- location.href=deployJava.getJavaURL+
- ((deployJava.returnPage!=null)?
- ('&returnPage='+deployJava.returnPage):'')+
- ((deployJava.locale!=null)?
- ('&locale='+deployJava.locale):'')+
- ((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
- ((deployJava.installType!=null)?
- ('&type='+deployJava.installType):'');
- return false;
- },
-
- done:function(name,result){
- },
-
- FFInstall:function(){
-
- location.href=deployJava.getJavaURL+
- ((deployJava.returnPage!=null)?
- ('&returnPage='+deployJava.returnPage):'')+
- ((deployJava.locale!=null)?
- ('&locale='+deployJava.locale):'')+
- ((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
- ((deployJava.installType!=null)?
- ('&type='+deployJava.installType):'');
- return false;
- },
-
- compareVersions:function(installed,required){
-
- var a=installed.split('.');
- var b=required.split('.');
-
- for(var i=0;i<a.length;++i){
- a[i]=Number(a[i]);
- }
- for(var i=0;i<b.length;++i){
- b[i]=Number(b[i]);
- }
- if(a.length==2){
- a[2]=0;
- }
-
- if(a[0]>b[0])return true;
- if(a[0]<b[0])return false;
-
- if(a[1]>b[1])return true;
- if(a[1]<b[1])return false;
-
- if(a[2]>b[2])return true;
- if(a[2]<b[2])return false;
-
- return true;
- },
-
-
- enableAlerts:function(){
- deployJava.debug=true;
- },
-
- poll:function(){
-
- deployJava.refresh();
- var postInstallJREList=deployJava.getJREs();
-
- if((deployJava.preInstallJREList.length==0)&&
- (postInstallJREList.length!=0)){
- clearInterval(deployJava.myInterval);
- if(deployJava.returnPage!=null){
- location.href=deployJava.returnPage;
- };
- }
-
- if((deployJava.preInstallJREList.length!=0)&&
- (postInstallJREList.length!=0)&&
- (deployJava.preInstallJREList[0]!=postInstallJREList[0])){
- clearInterval(deployJava.myInterval);
- if(deployJava.returnPage!=null){
- location.href=deployJava.returnPage;
- }
- }
-
- },
-
- writePluginTag:function(){
- var browser=deployJava.getBrowser();
- if(browser=='MSIE'){
- document.write('<'+
- 'object classid="clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA" '+
- 'id="deployJavaPlugin" width="0" height="0">'+
- '<'+'/'+'object'+'>');
- }else if(browser=='Netscape Family'){
- deployJava.writeEmbedTag();
- }
- },
-
- refresh:function(){
- navigator.plugins.refresh(false);var browser=deployJava.getBrowser();if(browser=='Netscape Family'){
- var plugin=document.getElementById('deployJavaPlugin');if(plugin==null){
- deployJava.writeEmbedTag();
- }
- }
- },
-
- writeEmbedTag:function(){
- var written=false;if(navigator.mimeTypes!=null){
- for(var i=0;i<navigator.mimeTypes.length;i++){
- if(navigator.mimeTypes[i].type==deployJava.mimeType){
- if(navigator.mimeTypes[i].enabledPlugin){
- document.write('<'+'embed id="deployJavaPlugin" type="'+
- deployJava.mimeType+'" hidden="true" />');written=true;
- }
- }
- }
- if(!written)for(var i=0;i<navigator.mimeTypes.length;i++){
- if(navigator.mimeTypes[i].type==deployJava.oldMimeType){
- if(navigator.mimeTypes[i].enabledPlugin){
- document.write('<'+'embed id="deployJavaPlugin" type="'+
- deployJava.oldMimeType+'" hidden="true" />');
- }
- }
- }
- }
- },
-
- do_initialize:function(){
- deployJava.writePluginTag();
- if(deployJava.locale==null){
- var loc=null;
-
- if(loc==null)try{
- loc=navigator.userLanguage;
- }catch(err){}
-
- if(loc==null)try{
- loc=navigator.systemLanguage;
- }catch(err){}
-
- if(loc==null)try{
- loc=navigator.language;
- }catch(err){}
-
- if(loc!=null){
- loc.replace("-","_")
- deployJava.locale=loc;
- }
- }
- }
-
- };
- deployJava.do_initialize();
-
diff --git a/BKUOnline/src/main/webapp/local.jsp b/BKUOnline/src/main/webapp/local.jsp
index 48d62674..16e408c0 100644
--- a/BKUOnline/src/main/webapp/local.jsp
+++ b/BKUOnline/src/main/webapp/local.jsp
@@ -14,50 +14,66 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"
- import="at.gv.egiz.bku.online.webapp.AppletDispatcher,org.apache.commons.lang.RandomStringUtils,org.apache.commons.lang.StringEscapeUtils" %>
-
+<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<c:set var="defaultWidth" value="190"/>
+<c:set var="defaultHeight" value="130"/>
+<%-- URLs --%>
+<c:url value="/DataURLServer" var="dataUrl"/>
+<%-- Messages --%>
+<fmt:bundle basename="web">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>MOCCA</title>
- <link rel="shortcut icon" href="img/chip16.ico" type="image/x-icon">
- <style type="text/css" media="all">@import "css/applet.css";</style>
-
- <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
- <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
- <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
- </head>
- <%
- int width = session.getAttribute("appletWidth") == null ? 190
- : (Integer) session.getAttribute("appletWidth");
- int height = session.getAttribute("appletHeight") == null ? 130
- : (Integer) session.getAttribute("appletHeight");
- String backgroundImg = StringEscapeUtils.escapeJavaScript(session
- .getAttribute("appletBackground") == null ? "../img/chip32.png"
- : (String) session.getAttribute("appletBackground"));
- String backgroundColor = StringEscapeUtils
- .escapeJavaScript((String) session
- .getAttribute("appletBackgroundColor"));
-
- String sessionId = StringEscapeUtils.escapeJavaScript(session.getId());
-
- String dataURL = request.getRequestURL().toString();
- dataURL = dataURL.substring(0, dataURL.lastIndexOf('/')) + "/DataURLServer";
- %>
- <body id="appletpage" style="width:<%=width%>px;height:<%=height%>px">
- <div style="width:<%=width%>px;height:<%=height%>px">
- <form action="http://127.0.0.1:3495/http-security-layer-request" method="post" enctype="application/x-www-form-urlencoded">
- <input name="SessionID_" value="<%=sessionId%>" type="hidden"/>
- <input name="DataURL" value="<%=dataURL%>" id="DataURL" type="hidden"/>
- <input name="XMLRequest" value="<NullOperationRequest xmlns='http://www.buergerkarte.at/namespaces/securitylayer/1.2#'/>" type="hidden"/>
- <p>Anfrage wird an lokale BKU gesendet</p>
- <div style="text-align: center;">
- <input type="submit" style="vertical-align: middle"/>
- </div>
- </form>
- </div>
- </body>
+ <head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+ <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
+ <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">
+ <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
+ <title><fmt:message key="title"/></title>
+ <link rel="shortcut icon" href="img/chip16.ico" type="image/x-icon">
+ <style type="text/css" media="all">
+ root {
+ display: block;
+ }
+ body {
+ background: #ffffff;
+ padding: 0;
+ margin: 0;
+ width: <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>px;
+ height: <c:out value="${requestScope.moccaParam.appletHeight}" default="${defaultHeight}"/>px;
+ }
+ #container {
+ padding: 0;
+ margin: 0;
+ width: <c:out value="${requestScope.moccaParam.appletWidth}" default="${defaultWidth}"/>px;
+ background: <c:out value="${requestScope.moccaParam.appletBackgroundColor}" default="#eeeeee"/>;
+ }
+ #message {
+ margin: 0;
+ padding: 0.25em 0 0.25em 0;
+ clear: both;
+ }
+ #message p{
+ margin: 0;
+ padding: 0.25em 0.5em 0.25em 0.5em;
+ }
+ </style>
+ </head>
+ <body>
+ <div id="container">
+ <form action="http://localhost:3495/http-security-layer-request" method="post" enctype="application/x-www-form-urlencoded">
+ <input name="SessionID_" value="${requestScope.id}" type="hidden"/>
+ <input name="DataURL" value="${dataUrl}" id="DataURL" type="hidden"/>
+ <input name="XMLRequest" value="<NullOperationRequest xmlns='http://www.buergerkarte.at/namespaces/securitylayer/1.2#'/>" type="hidden"/>
+ <div id="message">
+ <p><fmt:message key="local"/></p>
+ <p style="text-align: right;">
+ <input type="submit" style="vertical-align: middle"/>
+ </p>
+ </div>
+ </form>
+ </div>
+ </body>
</html>
+</fmt:bundle>