Lots o' profile handler refactoring
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / AbstractSAMLProfileHandler.java
index 02c0579..e993cbb 100644 (file)
 
 package edu.internet2.middleware.shibboleth.idp.profile;
 
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.opensaml.common.IdentifierGenerator;
+import org.opensaml.common.binding.MessageDecoder;
+import org.opensaml.common.binding.MessageEncoder;
+import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
+import org.opensaml.saml2.metadata.provider.MetadataProvider;
+
 import edu.internet2.middleware.shibboleth.common.profile.AbstractProfileHandler;
+import edu.internet2.middleware.shibboleth.common.profile.ProfileException;
+import edu.internet2.middleware.shibboleth.common.profile.ProfileRequest;
+import edu.internet2.middleware.shibboleth.common.profile.ProfileResponse;
 import edu.internet2.middleware.shibboleth.common.relyingparty.provider.SAMLMDRelyingPartyConfigurationManager;
 import edu.internet2.middleware.shibboleth.idp.session.Session;
 
@@ -26,4 +38,89 @@ import edu.internet2.middleware.shibboleth.idp.session.Session;
 public abstract class AbstractSAMLProfileHandler extends
         AbstractProfileHandler<SAMLMDRelyingPartyConfigurationManager, Session> {
 
+    /** Generator of IDs which may be used for SAML assertions, requests, etc. */
+    private IdentifierGenerator idGenerator;
+
+    /** Constructor. */
+    protected AbstractSAMLProfileHandler() {
+        super();
+        idGenerator = new SecureRandomIdentifierGenerator();
+    }
+
+    /**
+     * Gets an ID generator which may be used for SAML assertions, requests, etc.
+     * 
+     * @return ID generator
+     */
+    public IdentifierGenerator getIdGenerator() {
+        return idGenerator;
+    }
+
+    /**
+     * A convenience method for retrieving the SAML metadata provider from the relying party manager.
+     * 
+     * @return the metadata provider or null
+     */
+    public MetadataProvider getMetadataProvider() {
+        SAMLMDRelyingPartyConfigurationManager rpcManager = getRelyingPartyConfigurationManager();
+        if (rpcManager != null) {
+            return rpcManager.getMetadataProvider();
+        }
+
+        return null;
+    }
+    
+    /**
+     * Populates the given message decoder with the profile handler's metadata provider.
+     * 
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("unchecked")
+    protected void populateMessageDecoder(MessageDecoder<ServletRequest> decoder){
+        super.populateMessageDecoder(decoder);
+        decoder.setMetadataProvider(getMetadataProvider());
+    }
+    
+    /**
+     * Populates the given message encoder with the profile handler's metadata provider.
+     * 
+     * {@inheritDoc}
+     */
+    protected void populateMessageEncoder(MessageEncoder<ServletResponse> encoder) {
+        super.populateMessageEncoder(encoder);
+        encoder.setMetadataProvider(getMetadataProvider());
+    }
+
+    /**
+     * Gets the message decoder to use in this query.
+     * 
+     * @param request attribute request
+     * 
+     * @return message decoder to use in this query
+     * 
+     * @throws ProfileException thrown if a message decoder can not be created for the given request
+     */
+    protected abstract MessageDecoder<ServletRequest> getMessageDecoder(ProfileRequest<ServletRequest> request)
+            throws ProfileException;
+
+    /**
+     * Gets the message encoder to use in this query.
+     * 
+     * @param response attribute query response
+     * 
+     * @return message encoder to use in this query
+     * 
+     * @throws ProfileException thrown if a message encoder can not be created for the given request
+     */
+    protected abstract MessageEncoder<ServletResponse> getMessageEncoder(ProfileResponse<ServletResponse> response)
+            throws ProfileException;
+
+    /**
+     * Gets the user's session ID from the current request.
+     * 
+     * @param request current request
+     * 
+     * @return user's session ID
+     */
+    protected abstract String getUserSessionId(ProfileRequest<ServletRequest> request);
 }
\ No newline at end of file