Ignore:
Timestamp:
08/08/07 13:21:57 (12 years ago)
Author:
lawrence
Message:

A temporary fix (I think) for ticket:841.
Some more improvements with security (still turned off though)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/ndgSecurity.py

    r2775 r2785  
    3434        self.securityTokens = securityTokens 
    3535         
    36         # TODO: fix this ref. 
    37         self.ndgCfg = request.environ['ndgConfig'] 
    38  
    39         self.tracefile = eval(self.ndgCfg.get('NDG_SECURITY','tracefile')) 
     36         
     37        # we need access to the config file to get the various PKI certificates. 
     38        # note that this is already a config parser instance 
     39        try: 
     40            self.ndgCfg = request.environ['ndgConfig'] 
     41            self.tracefile = self.ndgCfg.get('NDG_SECURITY','tracefile',None) 
     42        except: 
     43            raise OwsError('NDG Security not enabled') 
    4044         
    4145        # ... for SSL connections to security web services 
    42         try: 
     46        try:     
     47            
     48            m='sslCACertFilePathList' 
    4349            self.sslCACertFilePathList = \ 
    44             self.ndgCfg.get('NDG_SECURITY','sslCACertFilePathList').split() 
     50            self.ndgCfg.get('NDG_SECURITY',m).split() 
     51             
     52            m='sslPeerCertCN' 
     53            self.sslPeerCertCN = self.ndgCfg.get('NDG_SECURITY',m) 
     54                 
     55            # ...and for WS-Security digital signature 
     56            m='wssCertFilePath' 
     57            self.wssCertFilePath = self.ndgCfg.get('NDG_SECURITY',m)  
     58            m='wssKeyFilePath' 
     59            self.wssPriKeyFilePath = self.ndgCfg.get('NDG_SECURITY',m) 
     60            m='wssKeyPwd' 
     61            self.wssPriKeyPwd = self.ndgCfg.get('NDG_SECURITY',m)     
     62            m='wssCACertFilePathList' 
     63            self.wssCACertFilePathList =self.ndgCfg.get('NDG_SECURITY',m).split() 
     64             
     65            # Attribute Certificate verification of X.509 cert chain back to CA 
     66            m='acCACertFilePathList' 
     67            self.acCACertFilePathList = self.ndgCfg.get('NDG_SECURITY',m).split() 
    4568                 
    4669        except AttributeError: 
    47             raise OwsError, 'No "sslCACertFilePathList" security setting' 
    48  
    49         self.sslPeerCertCN = self.ndgCfg.get('NDG_SECURITY', 'sslPeerCertCN') 
    50  
    51         # ...and for WS-Security digital signature 
    52         self.wssCertFilePath = self.ndgCfg.get('NDG_SECURITY',  
    53                                                'wssCertFilePath') 
    54         self.wssPriKeyFilePath = self.ndgCfg.get('NDG_SECURITY',  
    55                                                  'wssKeyFilePath') 
    56         self.wssPriKeyPwd = self.ndgCfg.get('NDG_SECURITY', 'wssKeyPwd') 
    57  
    58         try: 
    59             self.wssCACertFilePathList = \ 
    60             self.ndgCfg.get('NDG_SECURITY', 'wssCACertFilePathList').split() 
    61                  
    62         except AttributeError: 
    63             raise OwsError, 'No "wssCACertFilePathList" security setting' 
    64  
    65         # Attribute Certificate verification of X.509 cert chain back to CA 
    66         try: 
    67             self.acCACertFilePathList = \ 
    68             self.ndgCfg.get('NDG_SECURITY', 'acCACertFilePathList').split() 
    69                  
    70         except AttributeError: 
    71             raise OwsError, 'No "wssCACertFilePathList" security setting' 
     70            raise OwsError, 'NDG Security Error: No %s'%m 
    7271 
    7372        # Create Session Manager client 
    74         self.smClnt = SessionMgrClient(uri=self.securityTokens['smURI'], 
     73        self.smClnt = SessionMgrClient(uri=self.securityTokens['h'], 
    7574                        sslCACertFilePathList=self.sslCACertFilePathList, 
    7675                        sslPeerCertCN=self.sslPeerCertCN, 
     
    8483        # Fix WS-Security BinarySecurityToken Value Type for the passing of a  
    8584        # cert chain - required for use with proxy cert. 
    86         if wssCertChain: 
    87             self.smClnt.signatureHandler.reqBinSecTokValType = 'X509PKIPathv1' 
     85        #if wssCertChain: 
     86        #    self.smClnt.signatureHandler.reqBinSecTokValType = 'X509PKIPathv1' 
    8887 
    8988 
    9089    def __call__(self, **kw): 
    91         """Convenience wrapper for checAccess""" 
     90        """Convenience wrapper for checkAccess""" 
    9291        return self.checkAccess(**kw) 
    9392 
     
    9796        authenticated and has the required roles 
    9897         
    99         @type: ? TODO: set type 
    100         @keyword securityElement: CSML security constraint containing role and 
    101         Attribute Authority URI.  Resets equivalent object attribute. 
     98        @type: ElementTree Element 
     99        @keyword securityElement: MOES security constraint containing role and 
     100        Attribute Authority URI. In xml, could look like: 
     101        <moles:effect>allow</moles:effect> 
     102            <moles:simpleCondition> 
     103            <moles:dgAttributeAuthority>https://glue.badc.rl.ac.uk/AttributeAuthority</moles:dgAttributeAuthority> 
     104            <moles:attrauthRole>coapec</moles:attrauthRole> 
     105        </moles:simpleCondition> 
     106        NB: xmlns:moles="http://ndg.nerc.ac.uk/moles" 
    102107         
    103108        @type: pylons.session 
     
    106111      
    107112        if securityElement: 
    108             self.securityElement = securityElement 
     113            self.securityElement=securityElement 
     114             
     115        xpathr='{http://ndg.nerc.ac.uk/moles}simpleCondition/{http://ndg.nerc.ac.uk/moles}attrauthRole' 
     116        xpathaa='{http://ndg.nerc.ac.uk/moles}simpleCondition/{http://ndg.nerc.ac.uk/moles}dgAttributeAuthority' 
     117        roleE,aaE=self.securityElement.find(xpathr),self.securityElement.find(xpathaa) 
     118        if None in (roleE,aaE): 
     119            return True,'Invalid Security Condition' 
     120        self.reqRole=roleE.text 
     121        self.reqAAURI=aaE.text 
    109122             
    110123        if securityTokens: 
    111124            self.securityTokens = securityTokens 
    112               
    113         if self.securityTokens is not None: 
     125         
     126        if not self.securityTokens: 
     127            return False, self.__class__.NotLoggedInMsg 
     128        else: 
    114129            return self.__checkAttCert() 
    115         else: 
    116             return False, self.__class__.NotLoggedInMsg 
     130             
    117131 
    118132    
     
    123137         
    124138        try: 
    125             # Get the Attribute Authority address for the Session Manager to 
    126             # send its attribute request to 
    127             # 
    128             # # TODO: get the correct AA URI attribute name 
    129             aaURI = self.securityElement.aaURI  
    130139 
    131140            # Make request for attribute certificate 
    132141            # 
    133142            # sessID is needed if proxy cert is unavailable as ID 
    134             # 
    135             # TODO: get correct role name attribute from securityElement var 
    136             attCert = self.smClnt.getAttCert(attAuthorityURI=aaURI, 
    137                                      sessID=self.securityToken.get('sessID'), 
    138                                      reqRole=self.securityElement.roleName) 
     143 
     144            attCert = self.smClnt.getAttCert(attAuthorityURI=self.reqAAURI, 
     145                                     sessID=self.securityTokens.get('sessID'), 
     146                                     reqRole=self.reqRole) 
    139147 
    140148        except AttributeRequestDenied, e: 
Note: See TracChangeset for help on using the changeset viewer.