Small refactoring.
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 22 Mar 2005 00:00:33 +0000 (00:00 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 22 Mar 2005 00:00:33 +0000 (00:00 +0000)
Better error handling.

git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@1322 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

src/edu/internet2/middleware/shibboleth/idp/IdPProtocolSupport.java
src/edu/internet2/middleware/shibboleth/idp/provider/E_AuthSSOHandler.java
src/edu/internet2/middleware/shibboleth/idp/provider/SSOHandler.java [new file with mode: 0644]
src/edu/internet2/middleware/shibboleth/idp/provider/ShibbolethV1SSOHandler.java

index 768052d..548a49d 100644 (file)
@@ -32,8 +32,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.log4j.Logger;
 import org.apache.xml.security.signature.XMLSignature;
 import org.opensaml.InvalidCryptoException;
@@ -97,14 +95,6 @@ public class IdPProtocolSupport implements Metadata {
                throttle = new Semaphore(config.getMaxThreads());
        }
 
-       public static void validateEngineData(HttpServletRequest req) throws InvalidClientDataException {
-
-               // TODO this should be pulled out into handlers
-
-               if ((req.getRemoteAddr() == null) || (req.getRemoteAddr().equals(""))) { throw new InvalidClientDataException(
-                               "Unable to obtain client address."); }
-       }
-
        public Logger getTransactionLog() {
 
                return transactionLog;
@@ -129,9 +119,8 @@ public class IdPProtocolSupport implements Metadata {
                        SAMLException {
 
                if (relyingParty.getIdentityProvider().getSigningCredential() == null
-                               || relyingParty.getIdentityProvider().getSigningCredential().getPrivateKey() == null) {
-                       // TODO error out
-               }
+                               || relyingParty.getIdentityProvider().getSigningCredential().getPrivateKey() == null) { throw new InvalidCryptoException(
+                               SAMLException.RESPONDER, "Invalid signing credential."); }
 
                for (int i = 0; i < assertions.length; i++) {
                        String assertionAlgorithm;
@@ -159,10 +148,8 @@ public class IdPProtocolSupport implements Metadata {
 
                // Make sure we have an appropriate credential
                if (relyingParty.getIdentityProvider().getSigningCredential() == null
-                               || relyingParty.getIdentityProvider().getSigningCredential().getPrivateKey() == null) {
-
-                       // TODO error
-               }
+                               || relyingParty.getIdentityProvider().getSigningCredential().getPrivateKey() == null) { throw new InvalidCryptoException(
+                               SAMLException.RESPONDER, "Invalid signing credential."); }
 
                // Sign the response
                String responseAlgorithm;
index 550e2d5..aef3f23 100644 (file)
@@ -61,7 +61,7 @@ import edu.internet2.middleware.shibboleth.idp.InvalidClientDataException;
 /**
  * @author Walter Hoehn
  */
-public class E_AuthSSOHandler extends BaseHandler implements IdPProtocolHandler {
+public class E_AuthSSOHandler extends SSOHandler implements IdPProtocolHandler {
 
        private static Logger log = Logger.getLogger(E_AuthSSOHandler.class.getName());
        private final String name = "EAuth";
@@ -128,7 +128,7 @@ public class E_AuthSSOHandler extends BaseHandler implements IdPProtocolHandler
                }
 
                try {
-                       IdPProtocolSupport.validateEngineData(request);
+                       validateEngineData(request);
                } catch (InvalidClientDataException e1) {
                        // TODO Auto-generated catch block
                }
diff --git a/src/edu/internet2/middleware/shibboleth/idp/provider/SSOHandler.java b/src/edu/internet2/middleware/shibboleth/idp/provider/SSOHandler.java
new file mode 100644 (file)
index 0000000..4fa24b5
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, 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, if any, must include the following acknowledgment: "This product includes software
+ * developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu> Internet2 Project.
+ * Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
+ * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2, nor
+ * the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
+ * products derived from this software without specific prior written permission. For written permission, please contact
+ * shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2, UCAID, or the
+ * University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name, without prior
+ * written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS PROVIDED BY THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE
+ * DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE. IN NO
+ * EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC.
+ * 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.
+ */
+
+package edu.internet2.middleware.shibboleth.idp.provider;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Element;
+
+import edu.internet2.middleware.shibboleth.common.ShibbolethConfigurationException;
+import edu.internet2.middleware.shibboleth.idp.IdPProtocolHandler;
+import edu.internet2.middleware.shibboleth.idp.InvalidClientDataException;
+
+/**
+ * @author Walter Hoehn
+ */
+public abstract class SSOHandler extends BaseHandler implements IdPProtocolHandler {
+
+       private static Logger log = Logger.getLogger(BaseHandler.class.getName());
+
+       /**
+        * Required DOM-based constructor.
+        */
+       public SSOHandler(Element config) throws ShibbolethConfigurationException {
+
+               super(config);
+
+       }
+
+       public static void validateEngineData(HttpServletRequest req) throws InvalidClientDataException {
+
+               if ((req.getRemoteAddr() == null) || (req.getRemoteAddr().equals(""))) { throw new InvalidClientDataException(
+                               "Unable to obtain client address."); }
+       }
+}
index b3516ba..e2f77cb 100644 (file)
@@ -82,7 +82,7 @@ import edu.internet2.middleware.shibboleth.metadata.SPSSODescriptor;
  * 
  * @author Walter Hoehn
  */
-public class ShibbolethV1SSOHandler extends BaseHandler implements IdPProtocolHandler {
+public class ShibbolethV1SSOHandler extends SSOHandler implements IdPProtocolHandler {
 
        private static Logger log = Logger.getLogger(ShibbolethV1SSOHandler.class.getName());
 
@@ -112,7 +112,7 @@ public class ShibbolethV1SSOHandler extends BaseHandler implements IdPProtocolHa
 
                try {
                        // Ensure that we have the required data from the servlet container
-                       IdPProtocolSupport.validateEngineData(request);
+                       validateEngineData(request);
                        validateShibSpecificData(request);
 
                        // Get the authN info