X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FServiceProvider.h;h=fe924fa58da6de7c059465ca4833bf1083051633;hb=HEAD;hp=2d0694a2e982b294b6723a0af6fe0475b65255d7;hpb=9ccdbac09f806eb2fcd298c07110932d9b8c9004;p=shibboleth%2Fcpp-sp.git diff --git a/shibsp/ServiceProvider.h b/shibsp/ServiceProvider.h index 2d0694a..fe924fa 100644 --- a/shibsp/ServiceProvider.h +++ b/shibsp/ServiceProvider.h @@ -1,17 +1,21 @@ -/* - * Copyright 2001-2009 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** @@ -25,6 +29,8 @@ #include +#include +#include #include namespace xmltooling { @@ -43,14 +49,21 @@ namespace shibsp { class SHIBSP_API Application; class SHIBSP_API Handler; class SHIBSP_API ListenerService; + class SHIBSP_API Remoted; class SHIBSP_API RequestMapper; class SHIBSP_API SessionCache; class SHIBSP_API SPRequest; class SHIBSP_API TemplateParameters; #ifndef SHIBSP_LITE + class SHIBSP_API SecurityPolicyProvider; class SHIBSP_API TransactionLog; #endif +#if defined (_MSC_VER) + #pragma warning( push ) + #pragma warning( disable : 4251 ) +#endif + /** * Interface to a Shibboleth ServiceProvider instance. * @@ -85,8 +98,8 @@ namespace shibsp { /** * Returns a StorageService instance based on an ID. * - * @param id a NULL-terminated key identifying the StorageService to the configuration - * @return a StorageService if available, or NULL + * @param id a nullptr-terminated key identifying the StorageService to the configuration + * @return a StorageService if available, or nullptr */ virtual xmltooling::StorageService* getStorageService(const char* id) const=0; #endif @@ -109,17 +122,27 @@ namespace shibsp { #ifndef SHIBSP_LITE /** + * Returns a SecurityPolicyProvider instance. + * + * @param required true iff an exception should be thrown if no SecurityPolicyProvider is available + * @return a SecurityPolicyProvider + */ + virtual SecurityPolicyProvider* getSecurityPolicyProvider(bool required=true) const; + + /** + * @deprecated * Returns the security policy settings for an identified policy. * - * @param id identifies the policy to return + * @param id identifies the policy to return, or nullptr for default * @return a PropertySet */ virtual const PropertySet* getPolicySettings(const char* id) const=0; /** + * @deprecated * Returns the security policy rules for an identified policy. * - * @param id identifies the policy to return + * @param id identifies the policy to return, or nullptr for default * @return an array of policy rules */ virtual const std::vector& getPolicyRules(const char* id) const=0; @@ -144,8 +167,8 @@ namespace shibsp { /** * Returns an Application instance matching the specified ID. * - * @param applicationId the ID of the application - * @return pointer to the application, or NULL + * @param applicationId the ID of the application, or nullptr for the default + * @return pointer to the application, or nullptr */ virtual const Application* getApplication(const char* applicationId) const=0; @@ -194,8 +217,46 @@ namespace shibsp { * @return a pair containing a "request completed" indicator and a server-specific response code */ virtual std::pair doHandler(SPRequest& request) const; + + /** + * Register for a message. Returns existing remote service, allowing message hooking. + * + * @param address message address to register + * @param svc pointer to remote service + * @return previous service registered for message, if any + */ + virtual Remoted* regListener(const char* address, Remoted* svc); + + /** + * Unregisters service from an address, possibly restoring an original. + * + * @param address message address to modify + * @param current pointer to unregistering service + * @param restore service to "restore" registration for + * @return true iff the current service was still registered + */ + virtual bool unregListener(const char* address, Remoted* current, Remoted* restore=nullptr); + + /** + * Returns current service registered at an address, if any. + * + * @param address message address to access + * @return registered service, or nullptr + */ + virtual Remoted* lookupListener(const char* address) const; + + protected: + /** The AuthTypes to "recognize" (defaults to "shibboleth"). */ + std::set m_authTypes; + + private: + std::map m_listenerMap; }; +#if defined (_MSC_VER) + #pragma warning( pop ) +#endif + /** * Registers ServiceProvider classes into the runtime. */