More work on profile handlers, still have some more refactoring to do
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / profile / AbstractSAMLProfileHandler.java
index 02c0579..81832a2 100644 (file)
 
 package edu.internet2.middleware.shibboleth.idp.profile;
 
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.log4j.Logger;
+import org.opensaml.common.IdentifierGenerator;
+import org.opensaml.common.binding.decoding.MessageDecoderFactory;
+import org.opensaml.common.binding.encoding.MessageEncoderFactory;
+import org.opensaml.common.impl.SecureRandomIdentifierGenerator;
+import org.opensaml.saml2.metadata.provider.MetadataProvider;
+
+import edu.internet2.middleware.shibboleth.common.log.AuditLogEntry;
 import edu.internet2.middleware.shibboleth.common.profile.AbstractProfileHandler;
+import edu.internet2.middleware.shibboleth.common.profile.ProfileRequest;
 import edu.internet2.middleware.shibboleth.common.relyingparty.provider.SAMLMDRelyingPartyConfigurationManager;
 import edu.internet2.middleware.shibboleth.idp.session.Session;
 
@@ -26,4 +38,105 @@ import edu.internet2.middleware.shibboleth.idp.session.Session;
 public abstract class AbstractSAMLProfileHandler extends
         AbstractProfileHandler<SAMLMDRelyingPartyConfigurationManager, Session> {
 
+    /** SAML message audit log. */
+    private final Logger auditLog = Logger.getLogger(AuditLogEntry.AUDIT_LOGGER_NAME);
+
+    /** Generator of IDs which may be used for SAML assertions, requests, etc. */
+    private IdentifierGenerator idGenerator;
+
+    /** Factory of message decoders. */
+    private MessageDecoderFactory decoderFactory;
+
+    /** Factory of message encoders. */
+    private MessageEncoderFactory encoderFactory;
+
+    /** 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;
+    }
+
+    /**
+     * Gets the factory used to build new message decoders.
+     * 
+     * @return factory used to build new message decoders
+     */
+    public MessageDecoderFactory getMessageDecoderFactory() {
+        return decoderFactory;
+    }
+
+    /**
+     * Sets the factory used to build new message decoders.
+     * 
+     * @param factory factory used to build new message decoders
+     */
+    public void setMessageDecoderFactory(MessageDecoderFactory factory) {
+        decoderFactory = factory;
+    }
+
+    /**
+     * Gets the factory used to build message encoders.
+     * 
+     * @return factory used to build message encoders
+     */
+    public MessageEncoderFactory getMessageEncoderFactory() {
+        return encoderFactory;
+    }
+
+    /**
+     * Sets the factory used to build message encoders.
+     * 
+     * @param factory factory used to build message encoders
+     */
+    public void setMessageEncoderFactory(MessageEncoderFactory factory) {
+        encoderFactory = factory;
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * Gets the audit log for this handler.
+     * 
+     * @return audit log for this handler
+     */
+    protected Logger getAduitLog() {
+        return auditLog;
+    }
+
+    /**
+     * Gets the user's session ID from the current request.
+     * 
+     * @param request current request
+     * 
+     * @return user's session ID
+     */
+    protected String getUserSessionId(ProfileRequest<ServletRequest> request) {
+        HttpServletRequest rawRequest = (HttpServletRequest) request.getRawRequest();
+        if (rawRequest != null) {
+            return (String) rawRequest.getSession().getAttribute(Session.HTTP_SESSION_BINDING_ATTRIBUTE);
+        }
+
+        return null;
+    }
 }
\ No newline at end of file