X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FApplication.h;h=9660e7a8c8373ab6cc0b253490b66e9c030ad149;hb=392d1448deb48beb75f219532ac248b4776f16db;hp=a60d5b87a637400c605131757eda932bf9bab490;hpb=fa1832aa42cb8a1f9461e31c9f105bd65a1981e1;p=shibboleth%2Fsp.git diff --git a/shibsp/Application.h b/shibsp/Application.h index a60d5b8..9660e7a 100644 --- a/shibsp/Application.h +++ b/shibsp/Application.h @@ -24,18 +24,34 @@ #define __shibsp_app_h__ #include -#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. @@ -44,31 +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 */ - virtual const ServiceProvider& getServiceProvider() const=0; + 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; @@ -80,19 +118,22 @@ 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. @@ -131,6 +172,38 @@ namespace shibsp { virtual const PropertySet* getRelyingParty(const opensaml::saml2md::EntityDescriptor* provider) const=0; /** + * 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 @@ -144,7 +217,7 @@ namespace shibsp { * @return the designated SessionInitiator, or NULL */ virtual const SessionInitiator* getSessionInitiatorById(const char* id) const=0; - + /** * Returns the default AssertionConsumerService Handler * for use in AuthnRequest messages. @@ -181,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__ */