Ignore:
Timestamp:
15/02/10 12:39:45 (11 years ago)
Author:
pjkersha
Message:

Changes for addition of AuthzDecisionQuery? WSGI interface (Authorisation service)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/wsgi/saml/authzinterface.py

    r6573 r6575  
    3636 
    3737   
    38 class SOAPAuthzDecisionInterfaceMiddleware(SOAPMiddleware, NDGSecurityPathFilter): 
    39     """Implementation of SAML 2.0 SOAP Binding for Assertion Query/Request 
    40     Profile 
     38class SOAPAuthzDecisionInterfaceMiddleware(SOAPMiddleware,  
     39                                           NDGSecurityPathFilter): 
     40    """Implementation of SAML 2.0 SOAP Binding for Authorisation Decision Query 
    4141     
    4242    @type PATH_OPTNAME: basestring 
     
    5454    QUERY_INTERFACE_KEYNAME_OPTNAME = "queryInterfaceKeyName" 
    5555    DEFAULT_QUERY_INTERFACE_KEYNAME = ("ndg.security.server.wsgi.saml." 
    56                             "SOAPAuthzDecisionInterfaceMiddleware.queryInterface") 
     56                                       "SOAPAuthzDecisionInterfaceMiddleware." 
     57                                       "queryInterface") 
    5758     
    5859    def __init__(self, app): 
     
    7677        self.__queryInterfaceKeyName = None 
    7778         
    78         self.pathMatchList = app_conf.get( 
    79             prefix + SOAPAuthzDecisionInterfaceMiddleware.PATH_OPTNAME, ['/']) 
     79        cls = SOAPAuthzDecisionInterfaceMiddleware 
     80        self.pathMatchList = app_conf.get(prefix + cls.PATH_OPTNAME, ['/']) 
    8081                    
    81         self.queryInterfaceKeyName = app_conf.get(prefix + \ 
    82             SOAPAuthzDecisionInterfaceMiddleware.QUERY_INTERFACE_KEYNAME_OPTNAME, 
    83             prefix + \ 
    84             SOAPAuthzDecisionInterfaceMiddleware.DEFAULT_QUERY_INTERFACE_KEYNAME) 
     82        self.queryInterfaceKeyName = app_conf.get( 
     83            prefix + cls.QUERY_INTERFACE_KEYNAME_OPTNAME, 
     84            prefix + cls.DEFAULT_QUERY_INTERFACE_KEYNAME) 
    8585         
    8686    @classmethod 
     
    109109    def _setQueryInterfaceKeyName(self, value): 
    110110        if not isinstance(value, basestring): 
    111             raise TypeError('Expecting string type for "queryInterfaceKeyName"' 
    112                             ' got %r' % value) 
     111            raise TypeError('Expecting string type for "queryInterfaceKeyName" ' 
     112                            'got %r' % value) 
    113113             
    114114        self.__queryInterfaceKeyName = value 
     
    116116    queryInterfaceKeyName = property(fget=_getQueryInterfaceKeyName,  
    117117                                     fset=_setQueryInterfaceKeyName,  
    118                                      doc="environ keyname for Attribute Query " 
    119                                          "interface") 
     118                                     doc="environ keyname for Authorisation " 
     119                                         "Decision Query interface") 
    120120 
    121121    def _getIssuerName(self): 
     
    150150        soapRequestStream = environ.get('wsgi.input') 
    151151        if soapRequestStream is None: 
    152             raise SOAPAuthzDecisionInterfaceMiddlewareError('No "wsgi.input" in ' 
    153                                                         'environ') 
     152            raise SOAPAuthzDecisionInterfaceMiddlewareError('No "wsgi.input" ' 
     153                                                            'in environ') 
    154154         
    155155        # TODO: allow for chunked data 
    156156        contentLength = environ.get('CONTENT_LENGTH') 
    157157        if contentLength is None: 
    158             raise SOAPAuthzDecisionInterfaceMiddlewareError('No "CONTENT_LENGTH" ' 
    159                                                         'in environ') 
     158            raise SOAPAuthzDecisionInterfaceMiddlewareError( 
     159                                            'No "CONTENT_LENGTH" in environ') 
    160160 
    161161        contentLength = int(contentLength)         
     
    166166        soapRequest.parse(StringIO(soapRequestTxt)) 
    167167         
    168         # Filter based on SOAP Body content - expecting an AttributeQuery 
     168        # Filter based on SOAP Body content - expecting an AuthzDecisionQuery 
    169169        # element 
    170         if not SOAPAuthzDecisionInterfaceMiddleware.isAttributeQuery( 
     170        if not SOAPAuthzDecisionInterfaceMiddleware.isAuthzDecisionQuery( 
    171171                                                            soapRequest.body): 
    172172            # Reset wsgi.input for middleware and app downstream 
     
    174174            return self._app(environ, start_response) 
    175175         
    176         log.debug("SOAPAuthzDecisionInterfaceMiddleware.__call__: received SAML " 
    177                   "SOAP AttributeQuery ...") 
     176        log.debug("SOAPAuthzDecisionInterfaceMiddleware.__call__: received " 
     177                  "SAML SOAP AuthzDecisionQuery ...") 
    178178        
    179         attributeQueryElem = soapRequest.body.elem[0] 
     179        authzDecisionQueryElem = soapRequest.body.elem[0] 
    180180         
    181181        try: 
    182             attributeQuery = AttributeQueryElementTree.fromXML( 
    183                                                             attributeQueryElem) 
     182            authzDecisionQuery = AuthzDecisionQueryElementTree.fromXML( 
     183                                                        authzDecisionQueryElem) 
    184184        except UnknownAttrProfile, e: 
    185             log.exception("Parsing incoming attribute query: " % e) 
     185            log.exception("Parsing incoming authorisation decision query: " % e) 
    186186            samlResponse = self._makeErrorResponse( 
    187187                                        StatusCode.UNKNOWN_ATTR_PROFILE_URI) 
     
    195195             
    196196            # Call query interface         
    197             samlResponse = queryInterface(attributeQuery) 
     197            samlResponse = queryInterface(authzDecisionQuery) 
    198198         
    199199        # Add mapping for ESG Group/Role Attribute Value to enable ElementTree 
     
    216216        response = soapResponse.serialize() 
    217217         
    218         log.debug("SOAPAuthzDecisionInterfaceMiddleware.__call__: sending response " 
    219                   "...\n\n%s", 
     218        log.debug("SOAPAuthzDecisionInterfaceMiddleware.__call__: " 
     219                  "sending response ...\n\n%s", 
    220220                  response) 
    221221        start_response("200 OK", 
     
    225225     
    226226    @classmethod 
    227     def isAttributeQuery(cls, soapBody): 
    228         """Check for AttributeQuery in the SOAP Body""" 
     227    def isAuthzDecisionQuery(cls, soapBody): 
     228        """Check for AuthzDecisionQuery in the SOAP Body""" 
    229229         
    230230        if len(soapBody.elem) != 1: 
    231231            # TODO: Change to a SOAP Fault? 
    232             raise SOAPAuthzDecisionInterfaceMiddlewareError("Expecting single " 
    233                                                         "child element in the " 
    234                                                         "request SOAP " 
    235                                                         "Envelope body") 
     232            raise SOAPAuthzDecisionInterfaceMiddlewareError( 
     233                    "Expecting single child element in the request SOAP " 
     234                    "Envelope body") 
    236235             
    237236        inputQName = QName(soapBody.elem[0].tag)     
    238         attributeQueryQName = QName.fromGeneric( 
    239                                         AttributeQuery.DEFAULT_ELEMENT_NAME) 
    240         return inputQName == attributeQueryQName 
     237        authzDecisionQueryQName = QName.fromGeneric( 
     238                                        AuthzDecisionQuery.DEFAULT_ELEMENT_NAME) 
     239        return inputQName == authzDecisionQueryQName 
    241240 
    242241    def _makeErrorResponse(self, code): 
Note: See TracChangeset for help on using the changeset viewer.