Changeset 1990 for TI12-security


Ignore:
Timestamp:
11/01/07 09:25:10 (13 years ago)
Author:
pjkersha
Message:

python/ndg.security.server/ndg/security/server/AttAuthority/server-config.tac:
started integration with AttAuthority? class and getAttCert method.

python/ndg.security.server/ndg/security/server/AttAuthority/init.py:

  • Update documentation
  • make properties file path default to $NDG_DIR/conf/attAuthorityProperties.xml
  • Remove refs to AttAuthorityIO class - remove reqKeys in methods and use explicit keywords

python/ndg.security.common/ndg/security/common/SessionMgr/init.py:
SessionMgr? client interface - cosmetic changes to method names

python/ndg.security.common/ndg/security/common/X509.py: fix to exception
handlers - they only need to inherit from Exception, no further specialisation
is required.

python/ndg.security.common/ndg/security/common/AttAuthority/init.py:
Preparing for unit tests and integration of AttAuthority? class with web service
server side code. Added clntPriKeyPwd property and associated set method; changes to method names.

Location:
TI12-security/trunk/python
Files:
5 edited

Legend:

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

    r1771 r1990  
    1313NERC Data Grid Project 
    1414 
    15 P J Kershaw 17/11/06 
    16  
    17 Copyright (C) 2006 CCLRC & NERC 
    18  
    19 This software may be distributed under the terms of the Q Public License, 
    20 version 1.0 or later. 
     15@author P J Kershaw 17/11/06 
     16 
     17@copyright (C) 2006 CCLRC & NERC 
     18 
     19@license This software may be distributed under the terms of the Q Public  
     20License, version 1.0 or later. 
    2121""" 
    2222__all__ = [ 
     
    2929 
    3030from AttAuthority_services import AttAuthorityServiceLocator 
     31from ndg.security.common.wsSecurity import SignatureHandler 
    3132 
    3233 
    3334#_____________________________________________________________________________ 
    3435class AttAuthorityClientError(Exception): 
    35     """Exception handling for AttribuSessionthorityClient class""" 
     36    """Exception handling for AttributeAuthorityClient class""" 
    3637    pass 
    3738 
     
    3940#_____________________________________________________________________________ 
    4041class AttAuthorityClient(object): 
     42    """Client interface to Attribute Authority web service""" 
    4143     
    4244    #_________________________________________________________________________ 
    4345    def __init__(self,  
    4446                 uri=None,  
    45                  aaCertFilePath=None, 
     47                 srvCertFilePath=None, 
    4648                 clntCertFilePath=None, 
    4749                 clntPriKeyFilePath=None, 
    4850                 tracefile=None): 
    4951        """ 
    50         uri:                    WSDL URI for Attribute Authority WS.  Setting  
    51                                  it will set the Service Proxy 
    52         aaCertFilePath:        Public key of Attribute Authority used to  
    53                                  encrypt the outgoing message if required -  
    54                                  set as a path on the local file system or as  
    55                                  a URI 
    56         clntCertFilePath:      Public key of client.  This is passed to the 
    57                                  Attribute Authority so that it can encrypt 
    58                                  responses.  WARNING: if not set, responses 
    59                                  are returned as clear text 
     52        @type uri: string 
     53        @param uri: URI for Attribute Authority WS.  Setting it will also 
     54        initialise the Service Proxy 
     55         
     56        @type srvCertFilePath: string 
     57        @param srvCertFilePath: X.509 certificate of Attribute Authority use to  
     58        verify the signatures of responses. This is unnecessary if the  
     59        response includes the certificate. 
     60         
     61        @type clntCertFilePath:string 
     62        @param clntCertFilePath: X.509 certificate of client.  Passed in  
     63        SOAP WS-Security header to enable the AA to verify the signature of 
     64        this client's requests. 
     65         
    6066        clntPriKeyFilePath:      Private key of client.  If clntCertFilePath 
    6167                                 is set, the private key is needed to decrypt  
     
    6672        self.__srv = None 
    6773        self.__uri = None 
    68         self.__aaCertFilePath = None 
    69         self.__aaCertFilePath = None 
     74        self.__srvCertFilePath = None 
     75        self.__srvCertFilePath = None 
    7076        self.__clntCertFilePath = None 
    7177        self.__clntCert = None 
    7278        self.__clntPriKeyFilePath = None 
    73          
    74         self.__aaCertTempFile = None 
     79        self.__clntPriKeyPwd = None 
     80        self.__srvCertTempFile = None 
    7581         
    7682         
     
    7884            self.__setURI(uri) 
    7985             
    80         if aaCertFilePath: 
    81             self.__setAAcertFilePath(aaCertFilePath) 
     86        if srvCertFilePath: 
     87            self.__setSrvCertFilePath(srvCertFilePath) 
    8288             
    8389        if clntPriKeyFilePath: 
     
    114120 
    115121    #_________________________________________________________________________ 
    116     def __setAAcertFilePath(self, aaCertFilePath): 
    117          
    118         if not isinstance(aaCertFilePath, basestring): 
     122    def __setSrvCertFilePath(self, srvCertFilePath): 
     123         
     124        if not isinstance(srvCertFilePath, basestring): 
    119125            raise AttAuthorityClientError, \ 
    120126                "Attribute Authority public key URI must be a valid string" 
    121127         
    122         self.__aaCertFilePath = aaCertFilePath 
    123          
    124     aaCertFilePath = property(fset=__setAAcertFilePath, 
    125                                 doc="Set Attribute Authority public key URI") 
     128        self.__srvCertFilePath = srvCertFilePath 
     129         
     130    srvCertFilePath = property(fset=__setSrvCertFilePath, 
     131                              doc="Set Attribute Authority public key URI") 
    126132 
    127133  
     
    130136         
    131137        if not isinstance(clntCertFilePath, basestring): 
    132             raise AttAuthorityClientError(\ 
    133                 "Client public key file path must be a valid string") 
     138            raise AttAuthorityClientError, \ 
     139                "Client public key file path must be a valid string" 
    134140         
    135141        self.__clntCertFilePath = clntCertFilePath 
     142         
    136143        try: 
    137144            self.__clntCert = open(self.__clntCertFilePath).read() 
    138145             
    139146        except IOError, (errNo, errMsg): 
    140             raise AttAuthorityClientError(\ 
     147            raise AttAuthorityClientError, \ 
    141148                    "Reading certificate file \"%s\": %s" % \ 
    142                     (self.__clntCertFilePath, errMsg)) 
     149                    (self.__clntCertFilePath, errMsg) 
    143150                                
    144151        except Exception, e: 
     
    148155         
    149156    clntCertFilePath = property(fset=__setClntCertFilePath, 
    150                                   doc="File path for client public key") 
     157                                doc="File path for client public key") 
    151158 
    152159  
     
    163170                                  doc="File path for client private key") 
    164171 
    165  
    166     #_________________________________________________________________________ 
    167     def __getAttAuthorityCert(self): 
     172  
     173    #_________________________________________________________________________ 
     174    def __setClntPriKeyPwd(self, clntPriKeyPwd): 
     175         
     176        if not isinstance(clntPriKeyPwd, basestring): 
     177            raise SessionMgrClientError, \ 
     178                        "Client private key password must be a valid string" 
     179         
     180        self.__clntPriKeyPwd = clntPriKeyPwd 
     181         
     182    clntPriKeyPwd = property(fset=__setClntPriKeyPwd, 
     183                         doc="Password protecting client private key file") 
     184 
     185    #_________________________________________________________________________ 
     186    def __getSrvCert(self): 
    168187        """Retrieve the public key from the URI""" 
    169188         
    170189        # Don't proceed unless URI was set - user may have set public key via 
    171         # aaCertFilePath instead 
    172         if self.__aaCertFilePath is not None: 
     190        # srvCertFilePath instead 
     191        if self.__srvCertFilePath is not None: 
    173192            return 
    174193                 
    175194        try: 
    176             self.__aaCertTempFile = tempfile.NamedTemporaryFile() 
    177              
    178             cert = self.getCert() 
    179             open(self.__aaCertTempFile.name, "w").write(cert) 
    180              
    181             self.__aaCertFilePath = self.__aaCertTempFile.name 
     195            self.__srvCertTempFile = tempfile.NamedTemporaryFile() 
     196             
     197            cert = self.getX509Cert() 
     198            open(self.__srvCertTempFile.name, "w").write(cert) 
     199             
     200            self.__srvCertFilePath = self.__srvCertTempFile.name 
    182201             
    183202        except IOError, (errNo, errMsg): 
    184203            raise AttAuthorityClientError, \ 
    185204                                "Writing public key to temp \"%s\": %s" % \ 
    186                                 (self.__aaCertTempFile.name, errMsg)                                                                       
     205                                (self.__srvCertTempFile.name, errMsg)                                                                       
    187206        except Exception, e: 
    188207            raise AttAuthorityClientError, "Retrieving Attribute Authority "+\ 
     
    195214        if uri: 
    196215            self.__setURI(uri) 
     216 
     217        # WS-Security Signature handler object is passed to binding 
     218        signatureHandler = SignatureHandler(\ 
     219                                    certFilePath=self.__smCertFilePath, 
     220                                    priKeyFilePath=self.__clntPriKeyFilePath, 
     221                                    priKeyPwd=self.__clntPriKeyPwd) 
    197222 
    198223        try: 
     
    202227        except HTTPResponse, e: 
    203228            raise AttAuthorityClientError, \ 
    204             "Error initialising WSDL Service for \"%s\": %s %s" % \ 
     229                "Error initialising WSDL Service for \"%s\": %s %s" % \ 
    205230                (self.__uri, e.status, e.reason) 
    206231             
     
    219244 
    220245        # If Public key was not set, retrieve from server 
    221         self.__getAttAuthorityCert() 
     246        self.__getSrvX509Cert() 
    222247             
    223248        try:    
     
    237262 
    238263        # If Public key was not set, retrieve from server 
    239         self.__getAttAuthorityCert() 
     264        self.__getSrvX509Cert() 
    240265             
    241266        try:    
     
    259284 
    260285        # If Public key was not set, retrieve from server 
    261         self.__getAttAuthorityCert() 
     286        self.__getSrvX509Cert() 
    262287 
    263288 
     
    272297                                     
    273298    #_________________________________________________________________________ 
    274     def getCert(self): 
     299    def getX509Cert(self): 
    275300        """Retrieve the public key of the Attribute Authority""" 
    276301         
    277302        try:    
    278             cert = self.__srv.getCert()                 
     303            cert = self.__srv.getX509Cert()                 
    279304            return cert 
    280305         
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r1784 r1990  
    6767        self.__srv = None 
    6868        self.__uri = None 
    69         self.__smCertFilePath = None 
     69        self.__srvCertFilePath = None 
    7070        self.__clntCertFilePath = None 
    7171        self.__clntCert = None 
     
    7373        self.__clntPriKeyPwd = None 
    7474         
    75         self.__smCertTempFile = None 
     75        self.__srvCertTempFile = None 
    7676         
    7777         
     
    115115                "Session Manager X.509 Cert. file must be a valid string" 
    116116         
    117         self.__smCertFilePath = smCertFilePath 
     117        self.__srvCertFilePath = smCertFilePath 
    118118         
    119119    smCertFilePath = property(fset=__setSMcertFilePath, 
     
    173173 
    174174    #_________________________________________________________________________ 
    175     def __getSessionMgrCert(self): 
     175    def __getSrvX509Cert(self): 
    176176        """Retrieve the X.509 certificate from file or if not available, from 
    177177        the Session Manager service""" 
     
    179179        # Don't proceed unless URI was set - user may have set public key via 
    180180        # smCertFilePath instead 
    181         if self.__smCertFilePath is not None: 
     181        if self.__srvCertFilePath is not None: 
    182182            return 
    183183                 
    184184        try: 
    185             self.__smCertTempFile = tempfile.NamedTemporaryFile() 
     185            self.__srvCertTempFile = tempfile.NamedTemporaryFile() 
    186186             
    187187            cert = self.getX509Cert() 
    188             open(self.__smCertTempFile.name, "w").write(cert) 
    189              
    190             self.__smCertFilePath = self.__smCertTempFile.name 
     188            open(self.__srvCertTempFile.name, "w").write(cert) 
     189             
     190            self.__srvCertFilePath = self.__srvCertTempFile.name 
    191191             
    192192        except IOError, (errNo, errMsg): 
    193193            raise SessionMgrClientError, \ 
    194194                            "Writing X.509 certificate to temp \"%s\": %s" % \ 
    195                             (self.__smCertTempFile.name, errMsg)                                                                     
     195                            (self.__srvCertTempFile.name, errMsg)                                                                     
    196196        except Exception, e: 
    197197            raise SessionMgrClientError, "Retrieving Session Manager " + \ 
     
    207207        # WS-Security Signature handler object is passed to binding 
    208208        signatureHandler = SignatureHandler(\ 
    209                                     certFilePath=self.__smCertFilePath, 
     209                                    certFilePath=self.__srvCertFilePath, 
    210210                                    priKeyFilePath=self.__clntPriKeyFilePath, 
    211211                                    priKeyPwd=self.__clntPriKeyPwd) 
     
    253253 
    254254        # If Public key was not set, retrieve from server 
    255         self.__getSessionMgrCert() 
     255        self.__getSrvX509Cert() 
    256256             
    257257     
     
    306306 
    307307        # If Public key was not set, retrieve from server 
    308         self.__getSessionMgrCert() 
     308        self.__getSrvX509Cert() 
    309309 
    310310        # Make connection 
     
    369369 
    370370        # If Public key was not set, retrieve from server 
    371         self.__getSessionMgrCert() 
     371        self.__getSrvX509Cert() 
    372372 
    373373 
     
    394394                         extAttCertList=[], 
    395395                         extTrustedHostList=[]):     
    396         """Request authorisation from NDG Session Manager Web Service. 
     396        """Request NDG Session Manager Web Service to retrieve an Attribute 
     397        Certificate from the given Attribute Authority and cache it in the 
     398        user's credential wallet held by the session manager. 
    397399         
    398400        reqAuthorisation([sessCookie=s]|[sessID=i, encrSessionMgrURI=e]| 
     
    449451 
    450452        # If Public key was not set, retrieve from server 
    451         self.__getSessionMgrCert() 
     453        self.__getSrvX509Cert() 
    452454 
    453455             
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/X509.py

    r1642 r1990  
    2525 
    2626class X509CertError(Exception): 
    27  
    2827    """Exception handling for NDG X.509 Certificate handling class.""" 
    29      
    30     def __init__(self, msg): 
    31         self.__msg = msg 
    32           
    33     def __str__(self): 
    34         return self.__msg 
    35  
    36  
    3728 
    3829 
     
    4233    def __init__(self, filePath=None): 
    4334 
    44         # Set certificate file path 
    45         if filePath is not None: 
    46  
     35        # Set certificate file path 
     36        if filePath is not None: 
    4737            if not isinstance(filePath, basestring): 
    48                 raise X509CertError(\ 
    49                     "Certificate File Path input must be a valid string") 
    50              
    51         self.__filePath = filePath 
     38                raise X509CertError, \ 
     39                        "Certificate File Path input must be a valid string" 
     40             
     41            self.__filePath = filePath 
    5242        self.__m2CryptoX509 = None 
    5343        self.__dn = None 
     
    326316 
    327317 
    328  
    329  
    330318#_____________________________________________________________________________ 
    331319class X500DNError(Exception): 
    332320    """Exception handling for NDG X.500 DN class.""" 
    333      
    334     def __init__(self, msg): 
    335         self.__msg = msg 
    336           
    337     def __str__(self): 
    338         return self.__msg 
    339  
    340321 
    341322 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/__init__.py

    r1714 r1990  
    33NERC Data Grid Project 
    44 
    5 P J Kershaw 15/04/05 
    6  
    7 Copyright (C) 2006 CCLRC & NERC 
    8  
    9 This software may be distributed under the terms of the Q Public License, 
    10 version 1.0 or later. 
     5@author P J Kershaw 15/04/05 
     6 
     7@copyright (C) 2006 CCLRC & NERC 
     8 
     9@license This software may be distributed under the terms of the Q Public  
     10License, version 1.0 or later. 
    1111""" 
    1212 
     
    5252#_____________________________________________________________________________ 
    5353class AttAuthority(dict): 
    54  
    55     """NDG Attribute Authority - server for user authentication/authorization. 
     54    """NDG Attribute Authority - server for allocation of user authorization 
     55    tokens - attribute certificates. 
    5656    """ 
    5757 
     
    8080                    'usrRolesPropFile'] 
    8181     
    82     def __init__(self, propFilePath, bReadMapConfig=True): 
     82    def __init__(self,  
     83                 propFilePath=os.path.join(os.environ.get('NDG_DIR') or '!',  
     84                                           "conf", 
     85                                           "attAuthorityProperties.xml"),  
     86                 bReadMapConfig=True): 
    8387        """Create new NDG Attribute Authority instance 
    8488 
    85         propFilePath:   path to file containing Attribute Authority 
    86                         configuration parameters. 
    87         bReadMapConfig: by default the Map Configuration file is read.  Set 
    88                         this flag to False to override. 
     89        @type propFilePath: string 
     90        @param propFilePath: path to file containing Attribute Authority 
     91        configuration parameters.  It defaults to  
     92        $NDG_DIR/conf/attAuthorityProperties.xml 
     93        @type bReadMapConfig: boolean 
     94        @param bReadMapConfig: by default the Map Configuration file is read.  
     95        Set this flag to False to override. 
    8996        """ 
    9097 
    9198        # Base class initialisation 
    9299        dict.__init__(self) 
    93          
     100 
    94101        if not isinstance(propFilePath, basestring): 
    95102            raise AttAuthorityError, "Input Properties file path " + \ 
    96103                                     "must be a valid string." 
    97  
     104        elif propFilePath[0] == '!': 
     105            raise AttAuthorityError, '"NDG_DIR" environment variable must ' +\ 
     106                'be set in order to use default Properties file path setting' 
    98107 
    99108        # Initialise role mapping look-ups - These are set in readMapConfig() 
     
    218227         
    219228    #_________________________________________________________________________ 
    220     def authorise(self, 
    221                   reqXMLtxt=None,  
    222                   proxyCertFilePath=None, 
    223                   userAttCertFilePath=None, 
    224                   **reqKeys): 
    225  
    226         """Request a new Attribute Certificate for authorisation 
    227  
    228         reqXMLtxt:              input keywords as tags in formatted XML string 
    229                                 String must follow format for  
    230                                 AttAuthorityIO.AuthorisationReq class to 
    231                                 parse. 
    232                                  
    233         proxyCertFilePath|proxyCert: 
    234  
    235                                 user's proxy certificate use appropriate 
    236                                 keyword for input as a file path or as the 
    237                                 text content respectively. 
    238                                  
    239                                 Nb. proxyCert is set via reqKeys 
    240                                  
    241         userAttCertFilePath|userAttCert: 
    242          
    243                                 externally provided attribute certificate 
    244                                 from another data centre.  This is only 
    245                                 necessary if the user is not registered with 
    246                                 this attribute authority. 
    247  
    248                                 Pass in either the file path or a string 
    249                                 containing the certificate XML content. 
    250                                  
    251                                 Nb. userAttCert is set via reqKeys 
    252                                 """ 
    253  
    254         if reqXMLtxt is not None: 
    255             # Parse XML text into keywords corresponding to the input 
    256             # parameters 
    257             if not isinstance(reqXMLtxt, basestring): 
    258                 raise AttAuthorityError(\ 
    259                             "XML Authorisation request must be a string") 
    260                                         
    261             # Parse and decrypt as necessary 
    262             try: 
    263                 # 1st assume that the request was encrypted 
    264                 reqKeys = AuthorisationReq(encrXMLtxt=reqXMLtxt, 
    265                                     encrPriKeyFilePath=self.__prop['keyFile'], 
    266                                     encrPriKeyPwd=self.__prop['keyPwd']) 
    267             except Exception, e: 
    268                  
    269                 # Error occured decrypting - Trying parsing again, but this  
    270                 # time assuming non-encrypted 
    271                 try: 
    272                     reqKeys = AuthorisationReq(xmlTxt=reqXMLtxt) 
    273                      
    274                 except Exception, e: 
    275                     raise AttAuthorityError(\ 
    276                         "Error parsing authorisation request: %s" % e) 
     229    def getAttCert(self, 
     230                   proxyCert=None, 
     231                   proxyCertFilePath=None, 
     232                   userAttCert=None, 
     233                   userAttCertFilePath=None): 
     234 
     235        """Request a new Attribute Certificate for use in authorisation 
     236 
     237        getAttCert([proxyCert=px|proxyCertFilePath=pxFile, ] 
     238                   [userAttCert=cert|userAttCertFilePath=certFile]) 
     239                    
     240        @type proxyCert: string 
     241        @param proxyCert: base64 encoded string containing user proxy cert. 
     242         
     243        @type proxyCertFilePath: string 
     244        @param proxyCertFilePath: file path to proxy certificate. 
     245       
     246        @type userAttCert: string or AttCert type 
     247        @param userAttCert: externally provided attribute certificate from  
     248        another data centre.  This is only necessary if the user is not  
     249        registered with this attribute authority.  
     250                        
     251        @type userAttCertFilePath: string  
     252        @param userAttCertFilePath: alternative to userAttCert except pass in  
     253        as a file path to an attribute certificate instead. 
     254         
     255        @return attCert: new attribute certificate""" 
    277256 
    278257 
     
    281260            usrProxyCert = X509Cert() 
    282261             
    283             if proxyCertFilePath is not None and \ 
    284                isinstance(proxyCertFilePath, basestring): 
    285  
     262            if proxyCertFilePath is not None: 
     263                                     
    286264                # Proxy Certificate input as a file  
    287265                usrProxyCert.read(proxyCertFilePath) 
    288266                 
    289             elif reqKeys['proxyCert'] is not None: 
     267            elif proxyCert is not None: 
    290268 
    291269                # Proxy Certificate input as string text 
    292                 usrProxyCert.parse(reqKeys['proxyCert']) 
    293  
     270                usrProxyCert.parse(proxyCert) 
    294271            else: 
    295                 raise AttAuthorityError(\ 
    296                     "no input proxy certificate file path or file text") 
    297              
    298         except Exception, e: 
    299             raise AttAuthorityError("User Proxy Certificate: %s" % e) 
     272                raise AttAuthorityError, \ 
     273                    "no input proxy certificate file path or file text set" 
     274             
     275        except Exception, e: 
     276            raise AttAuthorityError, "User Proxy Certificate: %s" % e 
    300277 
    301278 
     
    305282             
    306283        except Exception, e: 
    307             raise AttAuthorityError("User Proxy Certificate is invalid: " + \ 
    308                                     str(e)) 
     284            raise AttAuthorityError, "User Proxy Certificate is invalid: " + \ 
     285                                    str(e) 
    309286 
    310287             
     
    330307             
    331308        except Exception, e: 
    332             raise AttAuthorityError("User DN: %s" % e) 
     309            raise AttAuthorityError, "User DN: %s" % e 
    333310 
    334311         
     
    340317             
    341318        except Exception, e: 
    342             raise AttAuthorityError("Issuer DN: %s" % e) 
     319            raise AttAuthorityError, "Issuer DN: %s" % e 
    343320         
    344321        attCert['issuerName'] = self.__prop['name'] 
     
    366343             
    367344        except Exception, e: 
    368             raise AttAuthorityError("Error setting validity time: %s" % e) 
     345            raise AttAuthorityError, "Error setting validity time: %s" % e 
    369346         
    370347 
     
    392369                # Read externally provided certificate 
    393370                try: 
    394                     extAttCert = AttCertRead(userAttCertFilePath) 
     371                    userAttCert = AttCertRead(userAttCertFilePath) 
    395372                     
    396373                except Exception, e: 
    397                     raise AttAuthorityError(\ 
    398                             "Reading external Attribute Certificate: %s" + e) 
    399                                  
    400             elif 'userAttCert' in reqKeys and reqKeys['userAttCert']: 
    401                 extAttCert = reqKeys['userAttCert'] 
    402                  
     374                    raise AttAuthorityError, \ 
     375                            "Reading external Attribute Certificate: %s" % e                             
     376            elif userAttCert: 
     377                # Allow input as a string but convert to  
     378                if isinstance(userAttCert, basestring): 
     379                    userAttCert = AttCertParse(userAttCert) 
     380                     
     381                elif not isinstance(userAttCert, AttCert): 
     382                    raise AttAuthorityError, \ 
     383                        "Expecting userAttCert as a string or AttCert type"           
    403384            else: 
    404                 raise AttAuthorityAccessDenied(\ 
     385                raise AttAuthorityAccessDenied, \ 
    405386                    "User \"%s\" is not registered " % attCert['holder'] + \ 
    406387                    "and no external attribute certificate is available " + \ 
    407                     "to make a mapping.") 
     388                    "to make a mapping." 
    408389 
    409390 
    410391            # Check it's an original certificate - mapped certificates can't 
    411392            # be used to make further mappings 
    412             if extAttCert.isMapped(): 
    413                 raise AttAuthorityError(\ 
     393            if userAttCert.isMapped(): 
     394                raise AttAuthorityError, \ 
    414395                    "External Attribute Certificate must have an " + \ 
    415                     "original provenance in order to make further mappings.") 
     396                    "original provenance in order to make further mappings." 
    416397 
    417398 
     
    419400            try: 
    420401                # Give path to CA cert to allow check 
    421                 extAttCert.isValid(raiseExcep=True, 
     402                userAttCert.isValid(raiseExcep=True, 
    422403                                   certFilePathList=self.__prop['caCertFile']) 
    423404                 
    424405            except Exception, e: 
    425                 raise AttAuthorityError(\ 
    426                             "Invalid Remote Attribute Certificate: " + str(e))         
     406                raise AttAuthorityError, \ 
     407                            "Invalid Remote Attribute Certificate: " + str(e)         
    427408 
    428409 
    429410            # Check that's it's holder matches the user certificate DN 
    430411            try: 
    431                 holderDN = X500DN(dn=extAttCert['holder']) 
     412                holderDN = X500DN(dn=userAttCert['holder']) 
    432413                 
    433414            except Exception, e: 
     
    442423   
    443424            # Get roles from external Attribute Certificate 
    444             trustedHostRoles = extAttCert.getRoles() 
     425            trustedHostRoles = userAttCert.getRoles() 
    445426 
    446427 
    447428            # Map external roles to local ones 
    448429            localRoles = self.mapRemoteRoles2LocalRoles(\ 
    449                                                     extAttCert['issuerName'], 
     430                                                    userAttCert['issuerName'], 
    450431                                                    trustedHostRoles) 
    451432            if not localRoles: 
    452433                raise AttAuthorityAccessDenied, \ 
    453434                    "No local roles mapped to the %s roles: %s" % \ 
    454                     (extAttCert['issuerName'], ', '.join(trustedHostRoles)) 
     435                    (userAttCert['issuerName'], ', '.join(trustedHostRoles)) 
    455436 
    456437            attCert.addRoles(localRoles) 
     
    487468        """Read the configuration properties for the Attribute Authority 
    488469 
    489         propFilePath: file path to properties file 
     470        @type propFilePath: string 
     471        @param propFilePath: file path to properties file 
    490472        """ 
    491473         
     
    559541        """Parse Map Configuration file. 
    560542 
    561         mapConfigFilePath:  file path for map configuration file.  If omitted, 
    562                             use member variable __mapConfigFilePath. 
     543        @type mapConfigFilePath: string 
     544        @param mapConfigFilePath: file path for map configuration file.  If  
     545        omitted, it uses member variable __prop['mapConfigFile']. 
    563546        """ 
    564547         
     
    714697    def usrIsRegistered(self, usrDN): 
    715698        """Check a particular user is registered with the Data Centre that the 
    716         Attribute Authority represents""" 
     699        Attribute Authority represents 
     700         
     701        Nb. this method is not used internally by AttAuthority class 
     702         
     703        @type usrDN: string  
     704        @param usrDN: user Distinguished Name 
     705        @return boolean True if user is registered, False otherwise""" 
    717706        return self.__usrRoles.usrIsRegistered(usrDN) 
    718707        
     
    721710    def getRoles(self, dn): 
    722711        """Get the roles available to the registered user identified usrDN. 
    723         """ 
     712 
     713        @type dn: string  
     714        @param dn: user Distinguished Name 
     715        @return list of roles for the given user DN""" 
    724716 
    725717        # Call to AAUserRoles derived class.  Each Attribute Authority 
     
    730722 
    731723        except Exception, e: 
    732             raise AttAuthorityError("Getting user roles: %s" % e) 
     724            raise AttAuthorityError, "Getting user roles: %s" % e 
    733725        
    734726         
     
    737729        """Return the host that this Attribute Authority represents: its ID, 
    738730        the user login URI and WSDL address.  Call this method via the 
    739         'hostInfo' property""" 
     731        'hostInfo' property 
     732         
     733        @return dictionary of host information derived from the map  
     734        configuration""" 
    740735         
    741736        return self.__mapConfig['thisHost'] 
     
    752747        given input local role. 
    753748 
    754         If no role is input, return all the AA's trusted hosts with all 
    755         their possible roles 
    756  
    757         Returns emoty dictionary if role isn't recognised""" 
     749        @type role: string 
     750        @param role: if set, return trusted hosts that having a mapping set  
     751        for this role.  If no role is input, return all the AA's trusted hosts  
     752        with all their possible roles 
     753 
     754        @return dictionary of the hosts that have trust relationships 
     755        with this AA.  It returns an empty dictionary if role isn't  
     756        recognised""" 
    758757                                          
    759758        if not self.__localRole2RemoteRole: 
    760             raise AttAuthorityError("Roles to host look-up is not set - " + \ 
    761                                     "ensure readMapConfig() has been called.") 
     759            raise AttAuthorityError, "Roles to host look-up is not set - " + \ 
     760                                    "ensure readMapConfig() has been called." 
    762761 
    763762 
     
    812811        """Map roles of trusted hosts to roles for this data centre 
    813812 
    814         trustedHost:        name of external trusted data centre 
    815         trustedHostRoles:   list of external roles to map""" 
     813        @type trustedHost: string 
     814        @param trustedHost: name of external trusted data centre 
     815        @type trustedHostRoles: list 
     816        @param trustedHostRoles:   list of external roles to map 
     817        @return list of mapped roles""" 
    816818 
    817819        if not self.__remoteRole2LocalRole: 
    818             raise AttAuthorityError("Roles map is not set - ensure " + \ 
    819                                     "readMapConfig() has been called.") 
     820            raise AttAuthorityError, "Roles map is not set - ensure " + \ 
     821                                     "readMapConfig() has been called." 
    820822 
    821823 
     
    837839    #_________________________________________________________________________      
    838840    def __newAttCertFilePath(self): 
    839         """Create a new unique attribute certificate file path""" 
     841        """Create a new unique attribute certificate file path 
     842         
     843        @return string file path""" 
    840844         
    841845        attCertFd, attCertFilePath = \ 
     
    853857 
    854858 
    855  
    856  
    857859#_____________________________________________________________________________ 
    858860class AAUserRolesError(Exception): 
    859  
    860861    """Exception handling for NDG Attribute Authority User Roles interface 
    861862    class.""" 
    862      
    863     def __init__(self, msg): 
    864         self.__msg = msg 
    865           
    866     def __str__(self): 
    867         return self.__msg 
    868  
    869863 
    870864 
    871865#_____________________________________________________________________________ 
    872866class AAUserRoles: 
    873  
    874867    """An abstract base class to define the user roles interface to an 
    875868    Attribute Authority. 
     
    885878    def __init__(self, dbURI=None, filePath=None): 
    886879        """User Roles abstract base class - derive from this class to define 
    887         roles interface to Attribute Authority""" 
    888         raise NotImplementedError(\ 
    889             self.__init__.__doc__.replace('\n       ','')) 
     880        roles interface to Attribute Authority 
     881         
     882        @type dbURI: string 
     883        @param dbURI: database connection URI 
     884        @type filePath: string 
     885        @param filePath: file path for properties file containing settings""" 
     886        raise NotImplementedError, \ 
     887            self.__init__.__doc__.replace('\n       ','') 
    890888 
    891889 
    892890    def usrIsRegistered(self, dn): 
    893891        """Derived method should return True if user is known otherwise 
    894         False""" 
    895         raise NotImplementedError( 
    896             self.UserIsRegistered.__doc__.replace('\n       ','')) 
     892        False 
     893         
     894        Nb. this method is not used by AttAuthority class and so does NOT need  
     895        to be implemented in a derived class. 
     896         
     897        @type dn: string  
     898        @param dn: user Distinguished Name to look up. 
     899        @return boolean True if user is registered, False otherwise""" 
     900        raise NotImplementedError, \ 
     901            self.UserIsRegistered.__doc__.replace('\n       ','') 
    897902 
    898903 
    899904    def getRoles(self, dn): 
    900905        """Derived method should return the roles for the given user's 
    901         DN or else raise an exception""" 
    902         raise NotImplementedError( 
    903             self.getRoles.__doc__.replace('\n       ','')) 
     906        DN or else raise an exception 
     907         
     908        @type dn: string  
     909        @param dn: user Distinguished Name 
     910        @return list of roles for the given user DN""" 
     911        raise NotImplementedError, \ 
     912            self.getRoles.__doc__.replace('\n       ','') 
    904913                          
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/server-config.tac

    r1730 r1990  
    2828         WSResource.__init__(self) 
    2929          
    30          # Initialize Attribute Authority class 
     30         # Initialize Attribute Authority class - property file will be 
     31         # picked up from default location under $NDG_DIR directory 
    3132         self.__aa = AttAuthority() 
    3233 
     
    3435         #import pdb;pdb.set_trace() 
    3536         request, response = AttAuthorityService.soap_getAttCert(self, ps) 
    36          response.set_element_attCert('ATTRIBUTE CERT') 
     37          
     38         attCert = self.__aa.getAttCert(\ 
     39                                                  proxyCert=request.get_element_userCert(), 
     40                                                  userAttCert=request.get_element_userAttCert()) 
     41         response.set_element_attCert(attCert) 
    3742         return request, response 
    3843 
Note: See TracChangeset for help on using the changeset viewer.