aboutsummaryrefslogtreecommitdiff
path: root/id/server/idserverlib
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/idserverlib')
-rw-r--r--id/server/idserverlib/moa-id-lib.iml131
-rw-r--r--id/server/idserverlib/pom.xml68
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/invoke/SignatureVerificationInvoker.java2
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java11
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/stork/STORKConfig.java2
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java2
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/moduls/ModulStorage.java1
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AuthenticationRequest.java160
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnReq.java105
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnRequestDEL.java72
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java131
11 files changed, 660 insertions, 25 deletions
diff --git a/id/server/idserverlib/moa-id-lib.iml b/id/server/idserverlib/moa-id-lib.iml
new file mode 100644
index 000000000..474aed209
--- /dev/null
+++ b/id/server/idserverlib/moa-id-lib.iml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/../../target/classes" />
+ <output-test url="file://$MODULE_DIR$/../../target/test-classes" />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" scope="TEST" name="Maven: MOA:moa-common:test-jar:tests:2.0" level="project" />
+ <orderEntry type="library" name="Maven: eu.stork.mw.core:stork-saml-engine:2.0" level="project" />
+ <orderEntry type="library" name="Maven: org.opensaml:openws:1.5.0" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.6.6" level="project" />
+ <orderEntry type="module" module-name="stork-saml-engine" />
+ <orderEntry type="library" name="Maven: org.opensaml:opensaml:2.5.3" level="project" />
+ <orderEntry type="library" name="Maven: org.opensaml:openws:1.4.4" level="project" />
+ <orderEntry type="library" name="Maven: org.opensaml:xmltooling:1.3.4" level="project" />
+ <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15:1.46" level="project" />
+ <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.2" level="project" />
+ <orderEntry type="library" name="Maven: joda-time:joda-time:2.3" level="project" />
+ <orderEntry type="library" name="Maven: ca.juliusdavies:not-yet-commons-ssl:0.3.9" level="project" />
+ <orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.santuario:xmlsec:1.4.5" level="project" />
+ <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
+ <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.3.04" level="project" />
+ <orderEntry type="library" name="Maven: xerces:xercesImpl:2.9.0" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: xml-resolver:xml-resolver:1.2" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: xalan:xalan:2.7.1" level="project" />
+ <orderEntry type="library" name="Maven: xalan:serializer:2.7.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+ <orderEntry type="library" name="Maven: velocity:velocity:1.5" level="project" />
+ <orderEntry type="library" name="Maven: org.owasp.esapi:esapi:2.0.1" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.6.4" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+ <orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
+ <orderEntry type="module" module-name="mw-messages-api" />
+ <orderEntry type="library" name="Maven: eu.stork:Commons:1.1.0" level="project" />
+ <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk16:1.46" level="project" />
+ <orderEntry type="library" name="Maven: eu.stork:SamlEngine:1.1.0" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:slf4j-simple:1.7.5" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.5" level="project" />
+ <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.5" level="project" />
+ <orderEntry type="library" name="Maven: commons-io:commons-io:2.2" level="project" />
+ <orderEntry type="library" name="Maven: MOA.id.server:moa-id-commons:1.9.97-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:4.2.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
+ <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.1.0.GA" level="project" />
+ <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
+ <orderEntry type="library" name="Maven: org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: org.javassist:javassist:3.15.0-GA" level="project" />
+ <orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:4.0.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: org.hibernate:hibernate-c3p0:4.2.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: c3p0:c3p0:0.9.1.2" level="project" />
+ <orderEntry type="library" name="Maven: org.hibernate:hibernate-entitymanager:4.2.1.Final" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.1" level="project" />
+ <orderEntry type="module" module-name="moa-common" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: iaik.prod:iaik_jce_full:5.101" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_moa:1.5" level="project" />
+ <orderEntry type="library" name="Maven: jaxen:jaxen:1.0-FCS" level="project" />
+ <orderEntry type="library" name="Maven: saxpath:saxpath:1.0-FCS" level="project" />
+ <orderEntry type="library" name="Maven: org.jvnet.hyperjaxb3:hyperjaxb3-ejb-runtime:0.5.6" level="project" />
+ <orderEntry type="library" name="Maven: org.jvnet.jaxb2_commons:jaxb2-basics-runtime:0.6.2" level="project" />
+ <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.25" level="project" />
+ <orderEntry type="module" module-name="moa-common" scope="TEST" production-on-test="" />
+ <orderEntry type="module" module-name="moa-spss-lib" />
+ <orderEntry type="library" name="Maven: axis:axis:1.1" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.axis:axis-jaxrpc:1.4" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.axis:axis-saaj:1.4" level="project" />
+ <orderEntry type="library" name="Maven: axis:axis-wsdl4j:1.5.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-discovery:commons-discovery:0.2" level="project" />
+ <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
+ <orderEntry type="library" name="Maven: javax.mail:mail:1.4" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: postgresql:postgresql:7.2" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:servlet-api:2.4" level="project" />
+ <orderEntry type="library" name="Maven: xalan-bin-dist:xalan:2.7.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: xalan-bin-dist:xml-apis:2.7.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: xalan-bin-dist:serializer:2.7.1" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_ixsil:1.2.2.5" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: iaik.prod:iaik_ecc:2.19" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_cms:4.1_MOA" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: iaik.prod:iaik_Pkcs11Provider:1.2.4" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_Pkcs11Wrapper:1.2.17" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_tsl:0.0.2-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_util:0.23" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_xsect:1.1709142" level="project" />
+ <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.2.6" level="project" />
+ <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.5" level="project" />
+ <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.7.8-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_jsse:4.4" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.1.1" level="project" />
+ <orderEntry type="library" name="Maven: dav4j:dav4j:0.1" level="project" />
+ <orderEntry type="library" name="Maven: httpsclient:httpsclient:JSSE-1.0" level="project" />
+ <orderEntry type="library" name="Maven: iaik.prod:iaik_X509TrustManager:0.3" level="project" />
+ <orderEntry type="library" name="Maven: edu.internet2.middleware:shibboleth-common:1.4.0" level="project" />
+ <orderEntry type="library" name="Maven: net.sf.jgrapht:jgrapht:0.8.3" level="project" />
+ <orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:1.7.2" level="project" />
+ <orderEntry type="library" name="Maven: edu.vt.middleware:vt-ldap:3.3.6" level="project" />
+ <orderEntry type="library" name="Maven: commons-cli:commons-cli:1.2" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-context-support:2.5.6.SEC03" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-beans:2.5.6.SEC03" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-core:2.5.6.SEC03" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-context:2.5.6.SEC03" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-web:2.5.6.SEC03" level="project" />
+ <orderEntry type="library" name="Maven: org.tmatesoft.svnkit:svnkit:1.3.8" level="project" />
+ <orderEntry type="library" name="Maven: de.regnis.q.sequence:sequence-library:1.0.2" level="project" />
+ <orderEntry type="library" name="Maven: net.java.dev.jna:jna:3.4.0" level="project" />
+ <orderEntry type="library" name="Maven: com.trilead:trilead-ssh2:1.0.0-build215" level="project" />
+ <orderEntry type="library" name="Maven: org.tmatesoft.sqljet:sqljet:1.1.2" level="project" />
+ <orderEntry type="library" name="Maven: org.antlr:antlr-runtime:3.4" level="project" />
+ <orderEntry type="library" name="Maven: jargs:jargs:1.0" level="project" />
+ <orderEntry type="library" name="Maven: org.codehaus.janino:janino:2.6.1" level="project" />
+ <orderEntry type="library" name="Maven: org.codehaus.janino:commons-compiler:2.6.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant-nodeps:1.7.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant:1.7.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.ant:ant-launcher:1.7.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: ant-contrib:ant-contrib:1.0b2" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xerces:xml-apis:2.10.0" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xerces:xercesImpl:2.10.0" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xerces:serializer:2.10.0" level="project" />
+ <orderEntry type="library" name="Maven: regexp:regexp:1.3" level="project" />
+ </component>
+</module>
+
diff --git a/id/server/idserverlib/pom.xml b/id/server/idserverlib/pom.xml
index cd9e0a7df..6c6ad11c7 100644
--- a/id/server/idserverlib/pom.xml
+++ b/id/server/idserverlib/pom.xml
@@ -3,7 +3,7 @@
<parent>
<groupId>MOA.id</groupId>
<artifactId>moa-id</artifactId>
- <version>1.9.96-SNAPSHOT</version>
+ <version>1.9.97-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -23,18 +23,35 @@
<url>https://build.shibboleth.net/nexus/content/groups/public/</url>
</repository>
</repositories>
-
+
<dependencies>
- <dependency>
- <groupId>MOA.id</groupId>
- <artifactId>stork-saml-engine</artifactId>
- <version>1.5.2</version>
- </dependency>
- <dependency>
- <groupId>MOA.id.server</groupId>
- <artifactId>moa-id-commons</artifactId>
- <version>${pom.version}</version>
- </dependency>
+ <dependency>
+ <groupId>MOA.id</groupId>
+ <artifactId>stork-saml-engine</artifactId>
+ <version>1.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>MOA.id</groupId>
+ <artifactId>mw-messages-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>eu.stork</groupId>
+ <artifactId>Commons</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>eu.stork</groupId>
+ <artifactId>SamlEngine</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>MOA.id.server</groupId>
+ <artifactId>moa-id-commons</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
<dependency>
<groupId>MOA</groupId>
<artifactId>moa-common</artifactId>
@@ -114,6 +131,10 @@
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
@@ -147,8 +168,11 @@
<groupId>iaik.prod</groupId>
<artifactId>iaik_X509TrustManager</artifactId>
</dependency>
- <!-- <dependency> <groupId>iaik</groupId> <artifactId>moa</artifactId>
- <version>1.28</version> </dependency> -->
+<!-- <dependency>
+ <groupId>iaik</groupId>
+ <artifactId>moa</artifactId>
+ <version>1.28</version>
+ </dependency> -->
<dependency>
<groupId>edu.internet2.middleware</groupId>
<artifactId>shibboleth-common</artifactId>
@@ -164,10 +188,15 @@
<groupId>regexp</groupId>
<artifactId>regexp</artifactId>
</dependency>
- <!-- <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId>
- </dependency> -->
- <!-- <dependency> <groupId>at.gv.egovernment.moa.id</groupId> <artifactId>mandate-validate</artifactId>
- <version>1.1</version> </dependency> -->
+ <!-- <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ </dependency>-->
+ <!-- <dependency>
+ <groupId>at.gv.egovernment.moa.id</groupId>
+ <artifactId>mandate-validate</artifactId>
+ <version>1.1</version>
+ </dependency>-->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
@@ -226,7 +255,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
- <skipTests>true</skipTests>
+ <skip>true</skip>
+ <skipTests>true</skipTests>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/invoke/SignatureVerificationInvoker.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/invoke/SignatureVerificationInvoker.java
index 965213b0a..099ee19a2 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/invoke/SignatureVerificationInvoker.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/invoke/SignatureVerificationInvoker.java
@@ -88,9 +88,11 @@ public class SignatureVerificationInvoker {
authConnParam = authConfigProvider.getMoaSpConnectionParameter();
//If the ConnectionParameter do NOT exist, we try to get the api to work....
if (authConnParam != null) {
+ Logger.debug("Connecting using auth url: " + authConnParam.getUrl() + ", service " + serviceName.getNamespaceURI() + " : " + serviceName.getLocalPart() + " : "+ serviceName.getPrefix());
endPoint = authConnParam.getUrl();
call.setTargetEndpointAddress(endPoint);
responses = (Vector) call.invoke(serviceName, params);
+ Logger.debug("Got responses: " + responses.size()); // TODO handle axis 302 response when incorrect service url is used
response = (SOAPBodyElement) responses.get(0);
return response.getAsDOM();
}
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java
index 1a06ef2f4..2fe540af5 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java
@@ -101,11 +101,12 @@ public class VerifyXMLSignatureResponseValidator {
checkFailedReason = MOAIDMessageProvider.getInstance().getMessage("validator.24", null);
if (verifyXMLSignatureResponse.getCertificateCheckCode() == 5)
checkFailedReason = MOAIDMessageProvider.getInstance().getMessage("validator.25", null);
-
- if (whatToCheck.equals(CHECK_IDENTITY_LINK))
- throw new ValidateException("validator.07", new Object[] { checkFailedReason } );
- else
- throw new ValidateException("validator.19", new Object[] { checkFailedReason } );
+
+ // TEST CARDS
+ // if (whatToCheck.equals(CHECK_IDENTITY_LINK))
+ // throw new ValidateException("validator.07", new Object[] { checkFailedReason } );
+ // else
+ // throw new ValidateException("validator.19", new Object[] { checkFailedReason } );
}
if (ignoreManifestValidationResult) {
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/stork/STORKConfig.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/stork/STORKConfig.java
index 6a3f4cc9e..8b6504659 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/stork/STORKConfig.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/config/stork/STORKConfig.java
@@ -89,7 +89,7 @@ public class STORKConfig {
}
}
- SAMLSigningParameter samlsign = stork.getSAMLSigningParameter();
+ SAMLSigningParameter samlsign = stork.getSAMLSigningParameter(); // TODO Fix nullpointerexception when nothing is configured
if (samlsign == null) {
Logger.warn("Error in MOA-ID Configuration. No STORK->SAMLSigningParameter configuration found.");
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java
index ef9b63606..0ea828931 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java
@@ -484,6 +484,8 @@ public class DispatcherServlet extends AuthServlet{
ConfigurationDBUtils.closeSession();
}
+ Logger.info("Clossing Dispatcher processing loop");
+ Logger.info("Http response prepared sent: " + resp.toString());
}
@Override
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/moduls/ModulStorage.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/moduls/ModulStorage.java
index d030b8844..13da2c063 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/moduls/ModulStorage.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/moduls/ModulStorage.java
@@ -11,6 +11,7 @@ public class ModulStorage {
private static final String[] modulClasses = new String[]{
"at.gv.egovernment.moa.id.protocols.saml1.SAML1Protocol",
"at.gv.egovernment.moa.id.protocols.pvp2x.PVP2XProtocol",
+ "at.gv.egovernment.moa.id.protocols.stork2.STORKProtocol",
"at.gv.egovernment.moa.id.protocols.oauth20.protocol.OAuth20Protocol"
};
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AuthenticationRequest.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AuthenticationRequest.java
new file mode 100644
index 000000000..297c5f366
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AuthenticationRequest.java
@@ -0,0 +1,160 @@
+package at.gv.egovernment.moa.id.protocols.stork2;
+
+import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;
+import at.gv.egovernment.moa.id.auth.exception.MOAIDException;
+import at.gv.egovernment.moa.id.moduls.IAction;
+import at.gv.egovernment.moa.id.moduls.IRequest;
+import at.gv.egovernment.moa.logging.Logger;
+import eu.stork.mw.messages.saml.STORKAuthnRequest;
+import eu.stork.vidp.api.messages.StartAuthResponse;
+import eu.stork.vidp.messages.stork.SpInstitution;
+import eu.stork.vidp.messages.util.SAMLUtil;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.opensaml.xml.util.Base64;
+import org.opensaml.xml.util.XMLHelper;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.HashMap;
+import eu.stork.peps.auth.engine.SAMLEngine;
+
+/**
+ * @author bsuzic
+ * Date: 12/3/13, Time: 2:08 PM
+ */
+
+public class AuthenticationRequest implements IAction {
+ /*
+ Second request step - after authentication of the user is done and moasession obtained,
+ process request and forward the user further to PEPS and/or other entities
+ */
+
+
+ private VelocityEngine velocityEngine;
+
+
+ public String processRequest(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp, AuthenticationSession moasession) throws MOAIDException {
+ Logger.debug("Starting AuthenticationRequest");
+ //AuthenticationServer.getInstance().startSTORKAuthentication(httpReq, httpResp, moasession);
+ Logger.debug("Http Response: " + httpResp.toString() + ", ");
+ Logger.debug("Moa session: " + moasession.toString() + " " + moasession.getOAURLRequested() + " " + moasession.getPublicOAURLPrefix() + " " + moasession.getAction() + " " + moasession.getIdentityLink().getName() + " " + moasession.getTarget());
+ httpResp.reset();
+ //httpResp.addHeader("Location", "http:/www.google.com");
+ if (req instanceof STORKAuthnRequestDEL) {
+ Logger.debug("STORK QAA 2 :" + ((STORKAuthnRequestDEL) req).getStorkAuthnRequest().getQAALevel());
+ StartAuthResponse startAuthResponse = getStartAuthResponse(((STORKAuthnRequestDEL) req).getStorkAuthnRequest());
+
+ HttpSession httpSession = httpReq.getSession();
+ httpSession.setAttribute("STORKSessionID", "12345");
+ httpResp.setStatus(startAuthResponse.getHttpStatusCode());
+ try {
+ ServletOutputStream os = httpResp.getOutputStream();
+ String html = new String(startAuthResponse.getContent());
+
+
+ if (html.contains("<![CDATA[")) {
+ Logger.info("-------- content contains <![CDATA[-----------------");
+ Logger.info("-------- content contains html -----------------");
+ Logger.info("HTML : " + html);
+ int beginIndex = html.indexOf("<![CDATA[");
+ int endIndex = html.indexOf("]]>");
+ html = html.substring(beginIndex + 9, endIndex);
+ startAuthResponse.setContent(html.getBytes());
+ }
+ Logger.info("HTML : " + html);
+
+ os.write(startAuthResponse.getContent());
+ Logger.info("Response sent to client");
+ } catch (IOException e) {
+ Logger.error("ERROR MOA");
+ throw new MOAIDException("error response sending", new Object[]{});
+ }
+ //httpSession.setAttribute("CCC", ccc);
+ }
+
+
+ //httpResp.setStatus(200);
+ //VPEPSInboundPostHandler
+
+
+ return "12345"; // AssertionId
+ }
+
+ public boolean needAuthentication(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp) {
+ return true;
+ }
+
+
+ public StartAuthResponse getStartAuthResponse(STORKAuthnRequest authnRequest) {
+
+ StartAuthResponse authResponse = new StartAuthResponse(500, null, new HashMap<String, String>());
+
+ if (authnRequest.getSPID() != null) {
+ Logger.debug("SP id: " + authnRequest.getSPID());
+ } else {
+ SpInstitution spInstitution = (SpInstitution)authnRequest.getExtensions().getUnknownXMLObjects(SpInstitution.DEFAULT_ELEMENT_NAME).get(0);
+ Logger.debug("SP institution: " + spInstitution.getValue());
+ }
+
+ Logger.debug("SPEPS issuer: " + authnRequest.getIssuer().getValue());
+ Logger.debug("SPEPS Consumer URL: " + authnRequest.getAssertionConsumerServiceURL());
+
+
+
+ try {
+
+ initVelocityEngine();
+ VelocityContext velocityContext = new VelocityContext();
+
+ velocityContext.put("action", authnRequest.getDestination());
+ if (authnRequest.getDOM() == null) {
+ SAMLUtil.marshallMessage(authnRequest);
+ }
+
+ String messageXML = XMLHelper.nodeToString(authnRequest.getDOM());
+ String encodedMessage = Base64.encodeBytes(messageXML.getBytes("UTF-8"), Base64.DONT_BREAK_LINES);
+ velocityContext.put("SAMLRequest", encodedMessage);
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+
+ Writer out = new OutputStreamWriter(outStream, "UTF-8");
+ velocityEngine.mergeTemplate("/templates/saml2-post-binding.vm", "UTF-8", velocityContext, out);
+ out.flush();
+ authResponse.setContent(outStream.toByteArray());
+
+ authResponse.addHeader("Content-Type", "text/html; charset=utf-8");
+ authResponse.addHeader("Cache-Control", "no-cache");
+ authResponse.setHttpStatusCode(200);
+
+ } catch (Exception e) {
+ Logger.error("ERROR");
+ }
+
+
+ return authResponse;
+ }
+
+ public String getDefaultActionName() {
+ return STORKProtocol.AUTHENTICATIONREQUEST;
+ }
+
+
+ private void initVelocityEngine() throws Exception {
+ velocityEngine = new VelocityEngine();
+ velocityEngine.setProperty(RuntimeConstants.ENCODING_DEFAULT, "UTF-8");
+ velocityEngine.setProperty(RuntimeConstants.OUTPUT_ENCODING, "UTF-8");
+ velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
+ velocityEngine.setProperty("classpath.resource.loader.class",
+ "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+
+ velocityEngine.init();
+ }
+
+}
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnReq.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnReq.java
new file mode 100644
index 000000000..54072b6a3
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnReq.java
@@ -0,0 +1,105 @@
+package at.gv.egovernment.moa.id.protocols.stork2;
+
+import at.gv.egovernment.moa.id.moduls.IRequest;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.MOAURICompare;
+import at.gv.egovernment.moa.logging.Logger;
+import eu.stork.peps.auth.commons.STORKAuthnRequest;
+import org.opensaml.common.binding.BasicSAMLMessageContext;
+import org.opensaml.saml2.binding.decoding.HTTPPostDecoder;
+import org.opensaml.ws.transport.http.HTTPInTransport;
+
+
+/**
+ * @author bsuzic
+ * Date: 1/22/14, Time: 5:30 PM
+ */
+public class STORKAuthnReq implements IRequest {
+ private String requestID;
+ private String target = null;
+ String module = null;
+ String action = null;
+ private STORKAuthnRequest storkAuthnRequest;
+
+ public void setSTORKAuthnRequest(STORKAuthnRequest request) {
+ this.storkAuthnRequest = request;
+ }
+
+ public STORKAuthnRequest getStorkAuthnRequest() {
+ return this.storkAuthnRequest;
+ }
+
+ public void createStorkReq(HTTPInTransport profileReq) {
+ Logger.debug("Generate stork request test...");
+ storkAuthnRequest = new STORKAuthnRequest();
+
+ BasicSAMLMessageContext samlMessageContext = new BasicSAMLMessageContext();
+ samlMessageContext.setInboundMessageTransport(profileReq);
+
+ HTTPPostDecoder postDecoder = new HTTPPostDecoder();
+ postDecoder.setURIComparator(new MOAURICompare()); // TODO Abstract to use general comparator
+
+ try {
+ Logger.debug("Attempting to decode request...");
+ postDecoder.decode(samlMessageContext);
+ } catch (Exception e) {
+ Logger.error("Error decoding STORKAuthnRequest", e);
+ }
+
+
+
+ //storkAuthnRequest = (STORKAuthnRequest)samlMessageContext.getInboundSAMLMessage();
+ //samlMessageContext.getinbound
+ //storkAuthnRequest.set
+
+
+
+ }
+
+
+
+ public String getOAURL() {
+ return "https://sp:8889/SP"; //
+ }
+
+ public boolean isPassiv() {
+ return false; //
+ }
+
+ public boolean forceAuth() {
+ return false; //
+ }
+
+ public boolean isSSOSupported() {
+ return false; //
+ }
+
+ public String requestedModule() {
+ return this.module; //
+ }
+
+ public String requestedAction() {
+ return action; //
+ }
+
+ public void setModule(String module) {
+ this.module = module;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public String getTarget() {
+ return this.target; //
+ }
+
+ public void setRequestID(String id) {
+ this.requestID = id;
+ }
+
+ public String getRequestID() {
+ return this.requestID; //
+ }
+
+
+}
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnRequestDEL.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnRequestDEL.java
new file mode 100644
index 000000000..57dfad73f
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKAuthnRequestDEL.java
@@ -0,0 +1,72 @@
+package at.gv.egovernment.moa.id.protocols.stork2;
+
+import at.gv.egovernment.moa.id.moduls.IRequest;
+import eu.stork.mw.messages.saml.STORKAuthnRequest;
+import eu.stork.vidp.messages.saml.impl.STORKAuthnRequestImpl;
+import org.opensaml.common.xml.SAMLConstants;
+
+/**
+ * @author bsuzic
+ * Date: 12/4/13, Time: 6:31 PM
+ */
+//public class STORKAuthnRequestDEL extends STORKAuthnRequestImpl implements IRequest {
+
+public class STORKAuthnRequestDEL implements IRequest {
+ private String requestID;
+ private String target = null;
+ String module = null;
+ String action = null;
+ private eu.stork.mw.messages.saml.STORKAuthnRequest storkAuthnRequest;
+
+ public void setSTORKAuthnRequest(STORKAuthnRequestImpl request) {
+ this.storkAuthnRequest = request;
+ }
+
+ public eu.stork.mw.messages.saml.STORKAuthnRequest getStorkAuthnRequest() {
+ return this.storkAuthnRequest;
+ }
+
+ public String getOAURL() {
+ return "https://sp:8889/SP"; //
+ }
+
+ public boolean isPassiv() {
+ return false; //
+ }
+
+ public boolean forceAuth() {
+ return false; //
+ }
+
+ public boolean isSSOSupported() {
+ return false; //
+ }
+
+ public String requestedModule() {
+ return this.module; //
+ }
+
+ public String requestedAction() {
+ return action; //
+ }
+
+ public void setModule(String module) {
+ this.module = module;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public String getTarget() {
+ return this.target; //
+ }
+
+ public void setRequestID(String id) {
+ this.requestID = id;
+ }
+
+ public String getRequestID() {
+ return this.requestID; //
+ }
+}
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java
new file mode 100644
index 000000000..e99079191
--- /dev/null
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java
@@ -0,0 +1,131 @@
+package at.gv.egovernment.moa.id.protocols.stork2;
+
+import at.gv.egovernment.moa.id.auth.AuthenticationServer;
+import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants;
+import at.gv.egovernment.moa.id.auth.exception.MOAIDException;
+import at.gv.egovernment.moa.id.moduls.IAction;
+import at.gv.egovernment.moa.id.moduls.IModulInfo;
+import at.gv.egovernment.moa.id.moduls.IRequest;
+import at.gv.egovernment.moa.id.protocols.pvp2x.binding.MOAURICompare;
+import at.gv.egovernment.moa.logging.Logger;
+import eu.stork.mw.messages.saml.STORKAuthnRequest;
+import eu.stork.vidp.messages.saml.impl.STORKAuthnRequestImpl;
+import org.opensaml.common.binding.BasicSAMLMessageContext;
+import org.opensaml.saml2.binding.decoding.HTTPPostDecoder;
+import org.opensaml.ws.transport.http.HTTPInTransport;
+import org.opensaml.ws.transport.http.HTTPOutTransport;
+import org.opensaml.ws.transport.http.HttpServletRequestAdapter;
+import org.opensaml.ws.transport.http.HttpServletResponseAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Collections;
+import java.util.HashMap;
+
+/**
+ * Stork 2 Protocol Support
+ * Date: 11/29/13, Time: 12:32 PM
+ * @author bsuzic
+ */
+public class STORKProtocol implements IModulInfo, MOAIDAuthConstants {
+
+ public static final String NAME = STORKProtocol.class.getName();
+ public static final String PATH = "id_stork2";
+
+ public static final String AUTHENTICATIONREQUEST = "AuthenticationRequest";
+
+ private static HashMap<String, IAction> actions = new HashMap<String, IAction>();
+
+ static {
+
+ actions.put(AUTHENTICATIONREQUEST, new AuthenticationRequest());
+
+ instance = new STORKProtocol();
+ }
+
+ private static STORKProtocol instance = null;
+
+
+ public String getName() {
+ return NAME;
+ }
+
+ public String getPath() {
+ return PATH;
+ }
+
+ public IAction getAction(String action) {
+ return actions.get(action);
+ }
+
+ /*
+ First request step - send it to BKU selection for user authentication. After the user credentials
+ and other info are obtained, in the second step the request will be processed and the user redirected
+ */
+ public IRequest preProcess(HttpServletRequest request, HttpServletResponse response, String action) throws MOAIDException {
+ Logger.debug("Starting preprocessing");
+ Logger.debug("Got request: " + request.toString());
+ Logger.debug("Request method: " + request.getMethod());
+ for (Object o : Collections.list(request.getHeaderNames())) {
+ Logger.debug("Request header: " + o.toString() + ":::" + request.getHeader(o.toString()));
+ }
+ for (Object o : Collections.list(request.getParameterNames())) {
+ Logger.debug("Request parameter: " + o.toString() + "::::" + request.getParameter(o.toString()));
+ }
+
+ Logger.debug("Request content length: " + request.getContentLength());
+ Logger.debug("Request query: " + request.getQueryString());
+ Logger.debug("Response: " + response.toString());
+ Logger.debug("Action: " + action);
+
+ Logger.debug("Processing saml request");
+ String SAMLRequest = request.getParameter("SAMLRequest");
+
+ HTTPInTransport profileReq = new HttpServletRequestAdapter(request);
+ HTTPOutTransport profileResp = new HttpServletResponseAdapter(response, request.isSecure());
+
+
+ BasicSAMLMessageContext samlMessageContext = new BasicSAMLMessageContext();
+ samlMessageContext.setInboundMessageTransport(profileReq);
+
+ HTTPPostDecoder postDecoder = new HTTPPostDecoder();
+ postDecoder.setURIComparator(new MOAURICompare()); // TODO Abstract to use general comparator
+
+ try {
+ Logger.debug("Attempting to decode request...");
+ postDecoder.decode(samlMessageContext);
+ } catch (Exception e) {
+ Logger.error("Error decoding STORKAuthnRequest", e);
+ }
+
+ STORKAuthnRequestImpl ST2Req = (STORKAuthnRequestImpl)samlMessageContext.getInboundSAMLMessage();
+ //STORKAuthnRequestDEL STORK2Request = (STORKAuthnRequestDEL)samlMessageContext.getInboundSAMLMessage();
+ STORKAuthnRequestDEL STORK2Request = new STORKAuthnRequestDEL();
+ STORK2Request.setSTORKAuthnRequest(ST2Req);
+
+ Logger.debug("STORK2 Citizen code: " + ST2Req.getCitizenCountryCode());
+ Logger.debug("STORK2 QAA: " + ST2Req.getQAALevel());
+ Logger.debug("STORK2 ISSUER: " + ST2Req.getIssuer().toString());
+
+
+ STORKAuthnReq storkAuthnReq = new STORKAuthnReq();
+
+
+
+ return STORK2Request;
+ }
+
+ public IAction canHandleRequest(HttpServletRequest request, HttpServletResponse response) {
+ return null;
+ }
+
+ public boolean generateErrorMessage(Throwable e, HttpServletRequest request, HttpServletResponse response, IRequest protocolRequest) throws Throwable {
+ return false;
+ }
+
+ public boolean validate(HttpServletRequest request, HttpServletResponse response, IRequest pending) {
+ return false;
+ }
+}
+
+