Changeset 5436


Ignore:
Timestamp:
30/06/09 17:05:27 (10 years ago)
Author:
pjkersha
Message:

Fixes for integration testing with OAI editor:

  • Attribute Authority and Session Manager clients now use Domlette element proxy classes for XML parsing and 4Suite based signature handler
  • ndg.security.server.wsgi.authz.PIPMiddleware: parse list items correctly
  • ndg.security.server.wsgi.authn.SessionHandlerMiddleware?: allow OpenID AX params for Session ID and Session Manager to default to None to allow for OpenID Providers which cannot support passing of these attributes.
Location:
TI12-security/trunk/python
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttCert.py

    r5182 r5436  
    834834 
    835835        
    836     #_________________________________________________________________________     
    837836    def setValidityTime(self, 
    838837                        dtNotBefore=None,  
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/attributeauthority.py

    r5063 r5436  
    2929from ndg.security.common.zsi.attributeauthority.AttributeAuthority_services \ 
    3030    import AttributeAuthorityServiceLocator 
    31 from ndg.security.common.wssecurity.signaturehandler.dom import SignatureHandler 
     31from ndg.security.common.wssecurity.signaturehandler.foursuite import \ 
     32    SignatureHandler 
     33from ndg.security.common.wssecurity.utils import DomletteReader, \ 
     34    DomletteElementProxy 
    3235from ndg.security.common.AttCert import AttCert, AttCertParse 
    3336from ndg.security.common.m2CryptoSSLUtility import HTTPSConnection, HostCheck 
     
    6063    excepMap = { 
    6164        'AttributeAuthorityNoTrustedHosts': NoTrustedHosts, 
    62         'AttributeAuthorityNoMatchingRoleInTrustedHosts':NoMatchingRoleInTrustedHosts 
    63         } 
     65        'AttributeAuthorityNoMatchingRoleInTrustedHosts': 
     66            NoMatchingRoleInTrustedHosts 
     67    } 
    6468     
    6569    def __init__(self,  
     
    236240 
    237241    sslCACertFilePathList = property(fset=__setSSLCACertFilePathList,  
    238 doc="for https connections, set list of CA cert files from which to verify peer cert") 
     242                                     doc="for https connections, set list of " 
     243                                         "CA certificate files from which to " 
     244                                         "verify peer certificate") 
    239245 
    240246    def __setSignatureHandler(self, signatureHandler): 
    241247        """Set SignatureHandler object property method - set to None to for no 
    242248        digital signature and verification""" 
    243         if signatureHandler is not None and \ 
    244            not isinstance(signatureHandler, signatureHandler): 
     249        if not isinstance(signatureHandler, (signatureHandler,None.__class__)): 
    245250            raise AttributeError("Signature Handler must be %s type or None " 
    246                                  "for no message security" %  
    247                         "ndg.security.common.wssecurity.signaturehandler.dom.SignatureHandler") 
     251                                 "for no message security" % SignatureHandler) 
    248252                             
    249253        self.__signatureHandler = signatureHandler 
     
    271275            self.__srv = locator.getAttributeAuthority(self.__uri,  
    272276                                         sig_handler=self.__signatureHandler, 
     277                                         readerclass=DomletteReader,  
     278                                         writerclass=DomletteElementProxy, 
    273279                                         tracefile=self.__tracefile, 
    274280                                         transport=self._transport, 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/sessionmanager.py

    r5433 r5436  
    1515log = logging.getLogger(__name__) 
    1616 
    17 import sys 
    18 import os 
    19  
    20 # Determine https http transport 
     17# Determine https/http transport 
    2118import urlparse 
    2219 
    2320from ZSI.wstools.Utility import HTTPResponse 
    2421 
    25 from ndg.security.common.wssecurity.signaturehandler.dom import SignatureHandler 
    26 from ndg.security.common.X509 import * 
     22from ndg.security.common.wssecurity.signaturehandler.foursuite import \ 
     23    SignatureHandler 
     24     
     25from ndg.security.common.wssecurity.utils import DomletteReader, \ 
     26    DomletteElementProxy 
     27     
    2728from ndg.security.common.AttCert import AttCert, AttCertParse 
    2829from ndg.security.common.m2CryptoSSLUtility import HTTPSConnection, \ 
     
    3132from ndg.security.common.zsi.sessionmanager.SessionManager_services import \ 
    3233                                                SessionManagerServiceLocator 
    33  
    3434 
    3535class SessionManagerClientError(Exception): 
     
    303303                                     "cert") 
    304304 
    305  
    306305    def __setSignatureHandler(self, signatureHandler): 
    307306        """Set SignatureHandler object property method - set to None to for no 
    308307        digital signature and verification""" 
    309         if signatureHandler is not None and \ 
    310            not isinstance(signatureHandler, SignatureHandler): 
     308        if not isinstance(signatureHandler, (SignatureHandler,None.__class__)): 
    311309            raise AttributeError("Signature Handler must be %s type or None " 
    312                                  "for no message security" % 
    313                         "ndg.security.common.wssecurity.signaturehandler.dom.SignatureHandler") 
     310                                 "for no message security" % SignatureHandler) 
    314311                             
    315312        self.__signatureHandler = signatureHandler 
     
    333330            self.__srv = locator.getSessionManager(self.__uri, 
    334331                                         sig_handler=self.__signatureHandler, 
     332                                         readerclass=DomletteReader,  
     333                                         writerclass=DomletteElementProxy, 
    335334                                         tracefile=self.__tracefile, 
    336335                                         transport=self._transport, 
    337336                                         transdict=self._transdict) 
    338337        except HTTPResponse, e: 
    339             raise SessionManagerClientError, \ 
    340                 "Initialising Service for \"%s\": %s %s" % \ 
    341                 (self.__uri, e.status, e.reason) 
     338            raise SessionManagerClientError( 
     339                "Initialising Service for \"%s\": %s %s" % 
     340                (self.__uri, e.status, e.reason)) 
    342341     
    343342    def connect(self, 
     
    516515        try: 
    517516            attCert, msg, extAttCertList = self.__srv.getAttCert(userX509Cert, 
    518                                                            sessID,  
    519                                                            attributeAuthorityURI, 
    520                                                            reqRole, 
    521                                                            mapFromTrustedHosts, 
    522                                                            rtnExtAttCertList, 
    523                                                            extAttCertList, 
    524                                                            extTrustedHostList) 
     517                                                       sessID,  
     518                                                       attributeAuthorityURI, 
     519                                                       reqRole, 
     520                                                       mapFromTrustedHosts, 
     521                                                       rtnExtAttCertList, 
     522                                                       extAttCertList, 
     523                                                       extTrustedHostList) 
    525524        except Exception, e: 
    526525            # Try to detect exception type from SOAP fault message 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sessionmanager.py

    r5433 r5436  
    1313log = logging.getLogger(__name__) 
    1414 
    15 # Modify sys.path when carrying out dynamic import for Credential Repository 
    16 import sys, os 
     15import os 
    1716 
    1817# Base 64 encode session IDs if returned in strings - urandom's output may 
     
    2120 
    2221# Time module for use with cookie expiry 
    23 from time import strftime 
    2422from datetime import datetime, timedelta 
    25  
    26 # For parsing of properties file 
    27 try: # python 2.5 
    28     from xml.etree import cElementTree as ElementTree 
    29 except ImportError: 
    30     # if you've installed it yourself it comes this way 
    31     import cElementTree as ElementTree 
    3223 
    3324# Credential Wallet 
     
    3829from ndg.security.common.wssecurity import WSSecurityConfig 
    3930from ndg.security.common.X509 import X500DN, X509Cert, X509CertParse, \ 
    40                                 X509CertExpired, X509CertInvalidNotBeforeTime  
    41  
    42 # Use client package to allow redirection of authorisation requests and  
    43 # to retrieve Attribute Authority public key 
    44 from ndg.security.common.sessionmanager import SessionManagerClient 
     31    X509CertExpired, X509CertInvalidNotBeforeTime  
    4532 
    4633# generic parser to read INI/XML properties file 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/__init__.py

    r5355 r5436  
    2323        'mountPath': '/', 
    2424    } 
    25      
     25 
    2626    def __init__(self, app, app_conf, prefix='', **local_conf): 
    2727        ''' 
     
    323323                        ('Location', url)]) 
    324324        return [] 
    325     
     325 
     326    @staticmethod 
     327    def parseListItem(item): 
     328        """Utility method for parsing a space separate list of items in a  
     329        string.  Items may be quoted.  This method is useful for parsing items 
     330        assigned to a parameter in a config file e.g. 
     331        fileList: "a.txt" b.csv 'My File' 
     332        @type item: basestring 
     333        @param item: list of space separated items in a string.  These may be  
     334        quoted 
     335        """ 
     336        return [i.strip("\"'") for i in item.split()]   
    326337    
    327338class NDGSecurityPathFilter(NDGSecurityMiddlewareBase): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/authn.py

    r5355 r5436  
    347347                    if isinstance(axData, dict) and 'ax' in axData: 
    348348                        sessionManagerURI = \ 
    349                                     axData['ax']['value.sessionManagerURI.1'] 
     349                                axData['ax'].get('value.sessionManagerURI.1') 
    350350                        session['sessionManagerURI'] = sessionManagerURI 
    351351     
    352                         sessionId = axData['ax']['value.sessionId.1'] 
     352                        sessionId = axData['ax'].get('value.sessionId.1') 
    353353                        session['sessionId'] = sessionId 
    354354     
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/authz.py

    r5433 r5436  
    355355        ''' 
    356356         
    357 #        # Pre-process list items splitting as needed 
    358 #        _parseListItem = lambda item: [i.strip("\"'") for i in item.split()] 
    359 #        if isinstance(local_conf.get('caCertFilePathList'), basestring): 
    360 #            local_conf['caCertFilePathList'] = _parseListItem( 
    361 #                                        local_conf['caCertFilePathList']) 
    362 #             
    363 #        if isinstance(local_conf.get('sslCACertFilePathList'), basestring): 
    364 #            local_conf['sslCACertFilePathList'] = _parseListItem( 
    365 #                                        local_conf['sslCACertFilePathList']) 
     357        # Pre-process list items splitting as needed 
     358        if isinstance(local_conf.get('caCertFilePathList'), basestring): 
     359            local_conf['caCertFilePathList'] = \ 
     360                NDGSecurityMiddlewareBase.parseListItem( 
     361                                        local_conf['caCertFilePathList']) 
     362             
     363        if isinstance(local_conf.get('sslCACertFilePathList'), basestring): 
     364            local_conf['sslCACertFilePathList'] = \ 
     365                NDGSecurityMiddlewareBase.parseListItem( 
     366                                        local_conf['sslCACertFilePathList']) 
    366367             
    367368        PIP.__init__(self, prefix=prefix, **local_conf) 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/wsgi/openid/provider/__init__.py

    r5285 r5436  
    886886                    log.error("Unexpected exception raised during " 
    887887                              "logout: %s" % e) 
    888                     msg = ("An internal error during logout.  If the " 
     888                    msg = ("An internal error occured during logout.  If the " 
    889889                           "problem persists contact your system " 
    890890                           "administrator.") 
Note: See TracChangeset for help on using the changeset viewer.