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)

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/discovery.py

    r2773 r2785  
    7878             
    7979            # ------------- Handle Location Bounding -------- 
    80             # default form has a global bounding box 
     80            # default form has a global bounding box, NB, internal to this routine we use bbox=[N,W,E,S], not [W,S,E,N]! 
    8181            bbox=[self.inputs['bboxN'],self.inputs['bboxW'],self.inputs['bboxE'],self.inputs['bboxS']] 
    8282             
     
    230230         
    231231    def __checkbox(self,bbox): 
    232         if float(bbox[0])>90.0 or float(bbox[1])<-90. or float(bbox[2])<-180. or float(bbox[3])>180.: 
    233             self.message='Invalid bounding box dimensions entered (limits 90,-90,-180,180)' 
     232        m='Invalid bounding box dimensions entered - limits are ' 
     233        if float(bbox[0])>90.0 or float(bbox[3])<-90.: 
     234            self.message=m+'+90 (N), -90 (S)!' 
     235        if float(bbox[1])<-180. or float(bbox[2])>180.: 
     236            if self.message=='':self.message=m 
     237            self.message=self.message[:-1]+' -180 (W), 180 (E)!' 
    234238             
    235239    def __checkform(self,expected): 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/lib/ndgInterface.py

    r2754 r2785  
    187187            pass # for the moment 
    188188        elif uri.schema =='NDG-A0': 
    189             if 0: 
    190                 # turn off security for now 
     189            if 0:  # use this for turning security on and off during testing 
    191190                s=x.tree.find('{http://ndg.nerc.ac.uk/csml}AccessControlPolicy/{http://ndg.nerc.ac.uk/csml}dgSecurityCondition') 
    192191                if s is not None: 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/models/DiscoveryState.py

    r2762 r2785  
    2828            c+='Including&nbsp;%s&nbsp;to&nbsp;%s; '%('%s,%s,%s'%dr[0],'%s,%s,%s'%dr[1]) 
    2929        bbox=self.values['bbox'] 
    30         if bbox is None or bbox==['+90.0','-90.0','-180.0','+180.0']: 
     30        if bbox is None or bbox==['+90.0','-180.0','+180.0','-90.0']: 
    3131            c+='Global; ' 
    32         else: c+='Bounding&nbsp;Box:&nbsp;%s,%s,%s,%s; '%tuple(bbox) 
     32        else: c+='Bounding&nbsp;Box:&nbsp;%sN,%sW,%sE,%sS; '%tuple(bbox) 
    3333        if self.values['scope'] is not None or self.values['textTarget'] is not None: 
    3434            c+='Restricted to ' 
  • 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.