X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FApplication.h;h=9660e7a8c8373ab6cc0b253490b66e9c030ad149;hb=392d1448deb48beb75f219532ac248b4776f16db;hp=c6deb96c72030ca115d4bf4c97136f67c7111744;hpb=91c99c01daadd07dde18aac2c4c671cf985f4a1f;p=shibboleth%2Fsp.git diff --git a/shibsp/Application.h b/shibsp/Application.h index c6deb96..9660e7a 100644 --- a/shibsp/Application.h +++ b/shibsp/Application.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,12 +24,34 @@ #define __shibsp_app_h__ #include -#include -#include + +#include +#ifndef SHIBSP_LITE +# include +# include +# include +# include +#endif +#include +#include namespace shibsp { +#ifndef SHIBSP_LITE + class SHIBSP_API AttributeExtractor; + class SHIBSP_API AttributeFilter; + class SHIBSP_API AttributeResolver; +#endif + class SHIBSP_API Attribute; class SHIBSP_API Handler; + class SHIBSP_API ServiceProvider; + class SHIBSP_API SessionInitiator; + class SHIBSP_API SPRequest; + +#if defined (_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4251 ) +#endif /** * Interface to a Shibboleth Application instance. @@ -38,24 +60,53 @@ namespace shibsp { * of session management and policy. */ class SHIBSP_API Application : public virtual PropertySet +#ifndef SHIBSP_LITE + ,public virtual opensaml::MessageEncoder::ArtifactGenerator +#endif { MAKE_NONCOPYABLE(Application); protected: - Application() {} + /** + * Constructor. + * + * @param sp parent ServiceProvider instance + */ + Application(const ServiceProvider* sp); + + /** Pointer to parent SP instance. */ + const ServiceProvider* m_sp; + + /** Shared lock for manipulating application state. */ + mutable xmltooling::RWLock* m_lock; + + /** Pairs of raw and normalized CGI header names to clear. */ + mutable std::vector< std::pair > m_unsetHeaders; + public: - virtual ~Application() {} + virtual ~Application(); + + /** + * Returns the owning ServiceProvider instance. + * + * @return a locked ServiceProvider + */ + const ServiceProvider& getServiceProvider() const { + return *m_sp; + } /** * Returns the Application's ID. * * @return the ID */ - virtual const char* getId() const=0; + virtual const char* getId() const { + return getString("id").second; + } /** * Returns a unique hash for the Application. * - * @return a value resulting from a hash of the Application's ID + * @return a value resulting from a computation over the Application's configuration */ virtual const char* getHash() const=0; @@ -67,45 +118,106 @@ namespace shibsp { */ virtual std::pair getCookieNameProps(const char* prefix) const; +#ifndef SHIBSP_LITE /** * Returns a MetadataProvider for use with this Application. * + * @param required true iff an exception should be thrown if no MetadataProvider is available * @return a MetadataProvider instance, or NULL */ - virtual opensaml::saml2md::MetadataProvider* getMetadataProvider() const=0; + virtual opensaml::saml2md::MetadataProvider* getMetadataProvider(bool required=true) const=0; /** * Returns a TrustEngine for use with this Application. * + * @param required true iff an exception should be thrown if no TrustEngine is available * @return a TrustEngine instance, or NULL */ - virtual xmltooling::TrustEngine* getTrustEngine() const=0; - + virtual xmltooling::TrustEngine* getTrustEngine(bool required=true) const=0; + + /** + * Returns an AttributeExtractor for use with this Application. + * + * @return an AttributeExtractor, or NULL + */ + virtual AttributeExtractor* getAttributeExtractor() const=0; + + /** + * Returns an AttributeFilter for use with this Application. + * + * @return an AttributeFilter, or NULL + */ + virtual AttributeFilter* getAttributeFilter() const=0; + /** - * Returns configuration properties governing security interactions with a peer entity. + * Returns an AttributeResolver for use with this Application. + * + * @return an AttributeResolver, or NULL + */ + virtual AttributeResolver* getAttributeResolver() const=0; + + /** + * Returns the CredentialResolver instance associated with this Application. + * + * @return a CredentialResolver, or NULL + */ + virtual xmltooling::CredentialResolver* getCredentialResolver() const=0; + + /** + * Returns configuration properties governing security interactions with a peer. * * @param provider a peer entity's metadata * @return the applicable PropertySet */ - virtual const PropertySet* getCredentialUse(const opensaml::saml2md::EntityDescriptor* provider) const=0; + virtual const PropertySet* getRelyingParty(const opensaml::saml2md::EntityDescriptor* provider) const=0; /** - * Returns the default SessionInitiator Handler when automatically - * requesting a session. + * Returns any additional audience values associated with this Application. + * + * @return additional audience values associated with the Application, or NULL + */ + virtual const std::vector* getAudiences() const=0; +#endif + + /** + * Returns the designated notification URL, or an empty string if no more locations are specified. + * + * @param request requested URL to use to fill in missing pieces of notification URL + * @param front true iff front channel notification is desired, false iff back channel is desired + * @param index zero-based index of URL to return + * @return the designated URL, or an empty string + */ + virtual std::string getNotificationURL(const char* request, bool front, unsigned int index) const=0; + + /** + * Returns an array of attribute IDs to use as a REMOTE_USER value, in order of preference. + * + * @return an array of attribute IDs, possibly empty + */ + virtual const std::vector& getRemoteUserAttributeIds() const=0; + + /** + * Clears any headers that may be used to hold attributes after export. + * + * @param request SP request to clear + */ + virtual void clearAttributeHeaders(SPRequest& request) const; + + /** + * Returns the default SessionInitiator when automatically requesting a session. * * @return the default SessionInitiator, or NULL */ - virtual const Handler* getDefaultSessionInitiator() const=0; + virtual const SessionInitiator* getDefaultSessionInitiator() const=0; /** - * Returns a SessionInitiator Handler with a particular ID when automatically - * requesting a session. + * Returns a SessionInitiator with a particular ID when automatically requesting a session. * * @param id an identifier unique to the Application * @return the designated SessionInitiator, or NULL */ - virtual const Handler* getSessionInitiatorById(const char* id) const=0; - + virtual const SessionInitiator* getSessionInitiatorById(const char* id) const=0; + /** * Returns the default AssertionConsumerService Handler * for use in AuthnRequest messages. @@ -142,12 +254,17 @@ namespace shibsp { virtual const Handler* getHandler(const char* path) const=0; /** - * Returns the set of audience values associated with this Application. - * - * @return set of audience values associated with the Application + * Returns all registered Handlers. + * + * @param handlers array to populate */ - virtual const std::vector& getAudiences() const=0; + virtual void getHandlers(std::vector& handlers) const=0; }; + +#if defined (_MSC_VER) + #pragma warning( pop ) +#endif + }; #endif /* __shibsp_app_h__ */