Changeset 1730


Ignore:
Timestamp:
21/11/06 12:42:31 (13 years ago)
Author:
pjkersha
Message:

server-config.tac: changes to AttAuthorityService? sub class - working
stub code (apart from soap_getHostInfo) and started adding in actual hook
up to AttAuthority? code.

AttAuthorityClientTest?.py: unit tests working with server side stub version.

common/AttAuthority/init.py: change wsdl refs to url. WSDL isn't actually
relevant here, only the url for the service to be accessed.

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

Legend:

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

    r1725 r1730  
    2020version 1.0 or later. 
    2121""" 
     22# Handling for public key retrieval 
     23import tempfile 
     24 
    2225from AttAuthority_services import AttAuthorityServiceLocator 
    2326 
     
    3437    #_________________________________________________________________________ 
    3538    def __init__(self,  
    36                  wsdl=None,  
     39                 url=None,  
    3740                 aaPubKeyFilePath=None, 
    3841                 clntPubKeyFilePath=None, 
    3942                 clntPriKeyFilePath=None, 
    40                  traceFile=None): 
     43                 tracefile=None): 
    4144        """ 
    42         wsdl:                    WSDL URI for Attribute Authority WS.  Setting  
     45        url:                    WSDL URI for Attribute Authority WS.  Setting  
    4346                                 it will set the Service Proxy 
    4447        aaPubKeyFilePath:        Public key of Attribute Authority used to  
     
    5356                                 is set, the private key is needed to decrypt  
    5457                                 the response from the Attribute Authority 
    55         traceFile:               set to file object such as sys.stderr to  
     58        tracefile:               set to file object such as sys.stderr to  
    5659                                 give extra WS debug information""" 
    5760 
    5861        self.__srv = None 
    59         self.__wsdl = None 
     62        self.__url = None 
    6063        self.__aaPubKeyFilePath = None 
    6164        self.__aaPubKeyFilePath = None 
     
    6770         
    6871         
    69         if wsdl: 
    70             self.__setWSDL(wsdl) 
     72        if url: 
     73            self.__setURL(url) 
    7174             
    7275        if aaPubKeyFilePath: 
     
    8588 
    8689            
    87         self.__traceFile = traceFile 
     90        self.__tracefile = tracefile 
    8891 
    8992          
    9093        # Instantiate Attribute Authority WS proxy 
    91         if self.__wsdl: 
     94        if self.__url: 
    9295            self.initService() 
    9396         
    9497 
    9598    #_________________________________________________________________________ 
    96     def __setWSDL(self, wsdl): 
    97          
    98         if not isinstance(wsdl, basestring): 
     99    def __setURL(self, url): 
     100         
     101        if not isinstance(url, basestring): 
    99102            raise AttAuthorityClientError, \ 
    100103                        "Attribute Authority WSDL URI must be a valid string" 
    101104         
    102         self.__wsdl = wsdl 
    103          
    104     wsdl = property(fset=__setWSDL,doc="Set Attribute Authority WSDL URI") 
     105        self.__url = url 
     106         
     107    url = property(fset=__setURL, doc="Set Attribute Authority WSDL URI") 
    105108 
    106109 
     
    183186         
    184187    #_________________________________________________________________________ 
    185     def initService(self, wsdl=None): 
     188    def initService(self, url=None): 
    186189        """Set the WS proxy for the Attribute Authority""" 
    187         if wsdl: 
    188             self.__setWSDL(wsdl) 
     190        if url: 
     191            self.__setURL(url) 
    189192 
    190193        try: 
    191194            locator = AttAuthorityServiceLocator() 
    192             self.__srv = locator.getAttAuthority(self.__wsdl,  
    193                                                  tracefile=self.__traceFile) 
     195            self.__srv = locator.getAttAuthority(self.__url,  
     196                                                 tracefile=self.__tracefile) 
    194197        except HTTPResponse, e: 
    195198            raise AttAuthorityClientError, \ 
    196199            "Error initialising WSDL Service for \"%s\": %s %s" % \ 
    197                 (self.__wsdl, e.status, e.reason) 
     200                (self.__url, e.status, e.reason) 
    198201             
    199202        except Exception, e: 
    200203            raise AttAuthorityClientError, \ 
    201204                "Initialising WSDL Service for \"%s\": %s" % \ 
    202                  (self.__wsdl, str(e)) 
     205                 (self.__url, str(e)) 
    203206 
    204207                                     
     
    260263            raise AttAuthorityClientError, "Error: " + str(e) 
    261264             
    262         if resp['statCode'] == resp.accessError: 
    263             raise AttAuthorityClientError, resp['errMsg'] 
    264          
    265265        return resp 
    266266 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/server-config.tac

    r1724 r1730  
    1414version 1.0 or later. 
    1515""" 
    16 #from AttAuthority_services_server import AttAuthorityService 
    17 import AttAuthority_services_server as AttAuthorityServiceBase 
     16import socket 
     17 
    1818from ZSI.twisted.WSresource import WSResource 
    1919from twisted.application import service, internet 
    2020from twisted.web.server import Site 
    2121from twisted.web.resource import Resource 
    22 import socket 
    2322 
    24 class AttAuthority(AttAuthorityServiceBase, WSResource): 
     23from AttAuthority_services_server import AttAuthorityService 
     24import AttAuthority 
     25 
     26class AttAuthorityServiceSub(AttAuthorityService, WSResource): 
    2527     def __init__(self): 
    2628         WSResource.__init__(self) 
     29          
     30         # Initialize Attribute Authority class 
     31         self.__aa = AttAuthority() 
    2732 
    2833     def soap_getAttCert(self, ps, **kw): 
    2934         #import pdb;pdb.set_trace() 
    3035         request, response = AttAuthorityService.soap_getAttCert(self, ps) 
    31          response._attCert = 'ATTRIBUTE CERT' 
     36         response.set_element_attCert('ATTRIBUTE CERT') 
    3237         return request, response 
    3338 
    3439     def soap_getHostInfo(self, ps, **kw): 
    35          #import pdb;pdb.set_trace() 
     40         import pdb;pdb.set_trace() 
    3641         request, response = AttAuthorityService.soap_getHostInfo(self, ps) 
    37          response._hostInfo = 'HOST INFO' 
     42         response.set_element_hostInfo('HOST INFO') 
    3843         return request, response 
    3944 
     
    4247         request, response = \ 
    4348                AttAuthorityService.soap_getTrustedHostInfo(self, ps) 
    44          response._trustedHostInfo = 'TRUSTED HOST INFO' 
     49         response.set_element_trustedHosts('TRUSTED HOST INFO') 
    4550         return request, response 
    4651 
     
    4853         #import pdb;pdb.set_trace() 
    4954         request, response = AttAuthorityService.soap_getPubKey(self, ps) 
    50          response._pubKey = 'PUB KEY' 
     55         response.set_element_x509Cert('X.509 Cert.') 
    5156         return request, response 
    5257 
     
    5560 
    5661root = Resource() 
    57 root.putChild('AttributeAuthority', AttAuthority()) 
     62root.putChild('AttributeAuthority', AttAuthorityServiceSub()) 
    5863siteFactory = Site(root) 
    5964application = service.Application("WSRF-Container") 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/AttAuthority/AttAuthorityClientTest.py

    r1724 r1730  
    11#!/usr/bin/env python 
    22 
    3 """NDG Attribute Authority client - makes requests for authorisation 
     3"""NDG Attribute Authority client  
    44 
    55NERC Data Grid Project 
     
    1616import sys 
    1717 
    18 from ZSI import ServiceProxy 
     18from ndg.security.common.AttAuthority import AttAuthorityClient 
    1919 
    20 from ndg.security.AttAuthorityIO import * 
    21  
    22  
    23 class attAuthorityClientTestCase(unittest.TestCase): 
     20class AttAuthorityClientTestCase(unittest.TestCase): 
    2421     
    2522    def setUp(self): 
    2623        try: 
    2724            # Session Manager WSDL 
    28             aaWSDL = 'http://glue.badc.rl.ac.uk/attAuthority.wsdl' 
     25            self.url = 'http://127.0.0.1:5700/AttributeAuthority' 
    2926     
    3027            # Instantiate WS proxy 
    31             self.aaSrv = ServiceProxy(aaWSDL,  
    32                                       use_wsdl=True,  
    33                                       tracefile=sys.stderr) 
     28            self.clnt = AttAuthorityClient(self.url,  
     29                                           tracefile=sys.stderr) 
    3430        except Exception, e: 
    3531            self.fail(str(e)) 
     
    4137     
    4238    def testGetPubKey(self): 
     39        '''testGetPubKey: retrieve Attribute Authority's X.509 cert.''' 
     40        #import pdb;pdb.set_trace() 
     41        resp = self.clnt.getPubKey() 
     42        print "Attribute Authority public key:\n" + resp 
     43         
     44 
     45    def testGetTrustedHostInfo(self): 
     46         
    4347        try: 
    44             # Request an attribute certificate from an Attribute Authority  
    45             # using the proxyCert returned from connect() 
    46 #            import pdb 
    47 #            pdb.set_trace() 
    48             pubKeyReq = PubKeyReq() 
    49             resp = self.aaSrv.getPubKey(pubKeyReq=pubKeyReq()) 
    50             pubKeyResp = PubKeyResp(xmlTxt=resp['pubKeyResp']) 
    51      
    52             if 'errMsg' in pubKeyResp and pubKeyResp['errMsg']: 
    53                 raise Exception(pubKeyResp['errMsg']) 
    54              
    55             print "Attribute Authority public key:\n" + pubKeyResp['pubKey'] 
    56                           
     48            role = 'role' 
     49            self.clnt.getTrustedHostInfo(role) 
    5750        except Exception, e: 
    5851            self.fail(str(e)) 
    5952 
    6053 
    61     def testGetTrustedHostInfo(self): 
     54    def testGetTrustedHostInfoWithNoRole(self): 
    6255         
    6356        try: 
    64             pass 
     57            self.clnt.getTrustedHostInfo() 
    6558        except Exception, e: 
    6659            self.fail(str(e)) 
    6760 
    6861 
    69     def testReqAuthorisation(self):         
    70         """Request authorisation from NDG Attribute Authority Web Service.""" 
     62    def testGetHostInfo(self): 
     63         
     64        try: 
     65            self.clnt.getHostInfo() 
     66        except Exception, e: 
     67            self.fail(str(e)) 
     68 
     69 
     70    def testGetAttCert(self):         
     71        """testGetAttCert: Request attribute certificate from NDG Attribute  
     72        Authority Web Service.""" 
    7173     
    72         # Attribute Authority WSDL 
    73         aaWSDL = './attAuthority.wsdl' 
    74          
    7574        # User's proxy certificate 
    76         usrProxyCertFilePath = "./certs/pjkproxy.pem" 
     75        userCertFilePath = "/tmp/x509up_u1001" 
    7776     
    7877        # Existing Attribute Certificate held in user's CredentialWallet.   
    7978        # This is available for use with trusted data centres to make new  
    8079        # mapped Attribute Certificates 
    81         usrAttCertFilePath = "./attCert/attCert-pjk-BADC.xml" 
    82      
    83         # Make Attribute Authority raise an exception 
    84         #usrAttCertFilePath = "attCert-tampered.xml" 
    85      
    86      
    87         print "Requesting authorisation for user cert file: \"%s\"" % \ 
    88               usrProxyCertFilePath 
    89      
     80        userAttCertFilePath = None 
    9081     
    9182        # Read user Proxy Certificate into a string ready for passing via WS 
    9283        try: 
    93             usrProxyCertFileTxt = open(usrProxyCertFilePath, 'r').read() 
     84            userCertFileTxt = open(userCertFilePath, 'r').read() 
    9485             
    9586        except IOError, ioErr: 
     
    9990     
    10091        # Simlarly for Attribute Certificate if present ... 
    101         if usrAttCertFilePath is not None: 
     92        if userAttCertFilePath is not None: 
    10293             
    10394            try: 
    104                 usrAttCertFileTxt = open(usrAttCertFilePath, 'r').read() 
     95                userAttCertFileTxt = open(userAttCertFilePath, 'r').read() 
    10596                 
    10697            except IOError, ioErr: 
     
    10899                                        (ioErr.filename, ioErr.strerror) 
    109100        else: 
    110             usrAttCertFileTxt = None 
     101            userAttCertFileTxt = None 
    111102             
    112103     
    113         # Make authorsation request 
    114         try:    
    115             resp = self.aaSrv.reqAuthorisation(\ 
    116                                           usrProxyCert=usrProxyCertFileTxt, 
    117                                           usrAttCert=usrAttCertFileTxt) 
    118             if resp['errMsg']: 
    119                 raise Exception(resp['errMsg']) 
    120              
    121             return resp['attCert'] 
    122              
    123         except Exception, e: 
    124             self.fail(str(e)) 
     104        # Make attribute certificate request 
     105        resp = self.clnt.getAttCert(userCertFileTxt) 
     106        return resp 
    125107         
    126108  
    127109#_____________________________________________________________________________        
    128 class attAuthorityClientTestSuite(unittest.TestSuite): 
     110class AttAuthorityClientTestSuite(unittest.TestSuite): 
    129111    def __init__(self): 
    130         map = map(attAuthorityClientTestCase, 
     112        map = map(AttAuthorityClientTestCase, 
    131113                  ( 
     114                    "testGetHostInfo", 
    132115                    "testGetTrustedHostInfo", 
    133                     "testReqAuthorisation", 
     116                    "testGetTrustedHostInfoWithNoRole", 
     117                    "testGetAttCert", 
    134118                    "testGetPubKey", 
    135119                  )) 
     
    138122if __name__ == "__main__": 
    139123    unittest.main() 
    140  
    141 from AttAuthority_services import AttAuthorityServiceLocator 
    142  
    143 def main(**kw): 
    144     locator = AttAuthorityServiceLocator() 
    145     port = locator.getAttAuthority(**kw) 
    146     import pdb;pdb.set_trace() 
    147     attCert = port.getAttCert("USER CERT") 
    148     print "attCert = %s" % attCert 
    149      
    150     # Factory METHOD Just guessing here 
    151     #response = port.create(CLIENT.CreateRequest()) 
    152     #kw['endPointReference'] = response._EndpointReference 
    153     #iport = locator.getAttAuthority(**kw) 
    154 #    reactor.stop() 
    155  
    156  
    157 if __name__ == '__main__': 
    158     main(url="http://127.0.0.1:5700/AttributeAuthority") 
    159 #    op = GetBasicOptParser() 
  • TI12-security/trunk/python/www/html/attAuthority.wsdl

    r1701 r1730  
    1616        <xsd:complexType> 
    1717          <xsd:sequence> 
    18             <xsd:element name="userCert" type="xsd:string"/> 
     18            <xsd:element name="userCert" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     19            <xsd:element name="userAttCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
    1920          </xsd:sequence> 
    2021        </xsd:complexType> 
     
    3334 
    3435      <xsd:element name="getHostInfoResponse"> 
    35         <xsd:complexType/> 
     36        <xsd:complexType> 
     37              <xsd:sequence> 
     38                <xsd:element name="host" type="xsd:string"/> 
     39              </xsd:sequence> 
     40            </xsd:complexType> 
    3641      </xsd:element> 
    3742 
     
    4550      <xsd:element name="getTrustedHostInfoResponse"> 
    4651        <xsd:complexType> 
    47           <xsd:sequence> 
    48             <xsd:element name="trustedHosts" type="xsd:string"/> 
    49           </xsd:sequence> 
    50         </xsd:complexType> 
     52              <xsd:sequence> 
     53                <xsd:element name="trustedHosts" type="xsd:string"/> 
     54              </xsd:sequence> 
     55            </xsd:complexType> 
    5156      </xsd:element> 
    5257 
Note: See TracChangeset for help on using the changeset viewer.