Ignore:
Timestamp:
12/02/10 15:04:42 (10 years ago)
Author:
pjkersha
Message:

Refactoring SAML SOAP bindings module to include AuthzDecisionQuery?:

  • improved package structure
  • Generic SubjectQuerySOAPBinding type which AuthzDecision? and Attribute query types extend.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/binding/soap/__init__.py

    r6566 r6567  
    1212log = logging.getLogger(__name__) 
    1313 
    14 import re 
    1514from os import path 
    16 from datetime import datetime, timedelta 
    17 from uuid import uuid4 
    1815from ConfigParser import ConfigParser 
    1916 
    20 from M2Crypto.m2urllib2 import HTTPSHandler 
    21  
    2217from saml.common import SAMLObject 
    23 from saml.utils import SAMLDateTime 
    24 from saml.saml2.core import (Attribute, AttributeQuery, StatusCode, Response, 
    25                              Issuer, Subject, SAMLVersion, NameID) 
    26 from saml.xml.etree import AttributeQueryElementTree, ResponseElementTree 
    27  
    28 from ndg.security.common.saml_utils.esg import EsgSamlNamespaces 
    29 from ndg.security.common.utils import TypedList, str2Bool 
     18 
    3019from ndg.security.common.utils.configfileparsers import ( 
    3120                                                    CaseSensitiveConfigParser) 
     
    3726                                             UrlLib2SOAPRequest) 
    3827 
    39 # Prevent whole module breaking if this is not available - it's only needed for 
    40 # AttributeQuerySslSOAPBinding 
    41 try: 
    42     from ndg.security.common.utils.m2crypto import SSLContextProxy 
    43     _sslContextProxySupport = True 
    44      
    45 except ImportError: 
    46     _sslContextProxySupport = False 
    47  
    4828 
    4929class SOAPBindingError(Exception): 
     
    7252                 requestEnvelopeClass=SOAPEnvelope, 
    7353                 responseEnvelopeClass=SOAPEnvelope, 
    74                  serialise=AttributeQueryElementTree.toXML, 
    75                  deserialise=ResponseElementTree.fromXML, 
     54                 serialise=None, 
     55                 deserialise=None, 
    7656                 handlers=(HTTPSHandler,)): 
    77         '''Create SAML SOAP Client - Nb. serialisation functions assume  
    78         AttributeQuery/Response''' 
     57        '''Create SAML SOAP Client - Nb. serialisation functions must be set 
     58        before send()ing the request''' 
    7959        self.__client = None 
    80         self.serialise = serialise 
    81         self.deserialise = deserialise 
     60        self.__serialise = None 
     61        self.__deserialise = None 
     62         
     63        if serialise is not None: 
     64            self.serialise = serialise 
     65             
     66        if deserialise is not None: 
     67            self.deserialise = deserialise 
    8268         
    8369        self.client = UrlLib2SOAPClient() 
     
    125111    def _setRequestEnvelopeClass(self, value): 
    126112        if not issubclass(value, SOAPEnvelopeBase): 
    127             raise TypeError('Expecting %r for "requestEnvelopeClass"; got %r'%  
     113            raise TypeError('Expecting %r for "requestEnvelopeClass"; got %r' %  
    128114                            (SOAPEnvelopeBase, value)) 
    129115         
     
    139125    def _setClient(self, value):      
    140126        if not isinstance(value, UrlLib2SOAPClient): 
    141             raise TypeError('Expecting %r for "client"; got %r'%  
     127            raise TypeError('Expecting %r for "client"; got %r' %  
    142128                            (UrlLib2SOAPClient, type(value))) 
    143129        self.__client = value 
     
    157143        defaults to ndg.security.common.soap.client.UrlLib2SOAPRequest 
    158144        ''' 
     145        if self.serialise is None: 
     146            raise AttributeError('No "serialise" method set to serialise the ' 
     147                                 'request') 
     148 
     149        if self.deserialise is None: 
     150            raise AttributeError('No "deserialise" method set to deserialise ' 
     151                                 'the response') 
     152            
    159153        if not isinstance(samlObj, SAMLObject): 
    160154            raise TypeError('Expecting %r for input attribute query; got %r' 
     
    193187        @type cfg: basestring /ConfigParser derived type 
    194188        @param cfg: configuration file path or ConfigParser type object 
    195         @rtype: ndg.security.common.credentialWallet.AttributeQuery 
     189        @rtype: ndg.security.common.saml_utils.binding.soap.SOAPBinding 
    196190        @return: new instance of this class 
    197191        ''' 
     
    233227         
    234228    def __getstate__(self): 
    235         '''Enable pickling for use with beaker.session''' 
     229        '''Explicit implementation needed with __slots__''' 
    236230        _dict = {} 
    237231        for attrName in SOAPBinding.__slots__: 
     
    246240         
    247241    def __setstate__(self, attrDict): 
    248         '''Specific implementation needed with __slots__''' 
     242        '''Explicit implementation needed with __slots__''' 
    249243        for attr, val in attrDict.items(): 
    250244            setattr(self, attr, val) 
    251              
    252  
    253 class SubjectQueryResponseError(SOAPBindingInvalidResponse): 
    254     """SAML Response error from Subject Query""" 
    255     def __init__(self, *arg, **kw): 
    256         SOAPBindingInvalidResponse.__init__(self, *arg, **kw) 
    257         self.__response = None 
    258      
    259     def _getResponse(self): 
    260         '''Gets the response corresponding to this error 
    261          
    262         @return the response 
    263         ''' 
    264         return self.__response 
    265  
    266     def _setResponse(self, value): 
    267         '''Sets the response corresponding to this error. 
    268          
    269         @param value: the response 
    270         ''' 
    271         if not isinstance(value, Response): 
    272             raise TypeError('"response" must be a %r, got %r' % (Response, 
    273                                                                  type(value))) 
    274         self.__response = value 
    275          
    276     response = property(fget=_getResponse, fset=_setResponse,  
    277                         doc="SAML Response associated with this exception") 
Note: See TracChangeset for help on using the changeset viewer.