X-Git-Url: https://repo.niif.hu/gitweb/gitweb.cgi?p=java-idp.git;a=blobdiff_plain;f=src%2Fedu%2Finternet2%2Fmiddleware%2Fshibboleth%2Fidp%2Fprofile%2FAbstractSAMLProfileHandler.java;h=e993cbb687fd47a7399eb9e5a366f9f9b6ddecb0;hp=02c05794929c9b1ab22daa4b59c4d3431e7ed3d2;hb=92fabdf36fb525fc110f7f8f565ebab007ae9ac0;hpb=beeb6427ef2d3586fb326ea3a3d260814a69f56d diff --git a/src/edu/internet2/middleware/shibboleth/idp/profile/AbstractSAMLProfileHandler.java b/src/edu/internet2/middleware/shibboleth/idp/profile/AbstractSAMLProfileHandler.java index 02c0579..e993cbb 100644 --- a/src/edu/internet2/middleware/shibboleth/idp/profile/AbstractSAMLProfileHandler.java +++ b/src/edu/internet2/middleware/shibboleth/idp/profile/AbstractSAMLProfileHandler.java @@ -16,7 +16,19 @@ 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 { + /** 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 decoder){ + super.populateMessageDecoder(decoder); + decoder.setMetadataProvider(getMetadataProvider()); + } + + /** + * Populates the given message encoder with the profile handler's metadata provider. + * + * {@inheritDoc} + */ + protected void populateMessageEncoder(MessageEncoder 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 getMessageDecoder(ProfileRequest 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 getMessageEncoder(ProfileResponse 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 request); } \ No newline at end of file