Changeset 1634


Ignore:
Timestamp:
26/10/06 16:10:13 (13 years ago)
Author:
pjkersha
Message:

Tests with WebSphere?.

Location:
TI12-security/trunk/python/Tests/Echo
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/Echo/Echo.wsdl

    r1542 r1634  
    77  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    88  xmlns:tns="urn:ZSI:examples" 
    9   targetNamespace="urn:ZSI:examples" > 
     9  targetNamespace="urn:ZSI:examples"> 
    1010  <types> 
    1111  <xsd:schema elementFormDefault="qualified" targetNamespace="urn:ZSI:examples"> 
     
    2424        </xsd:complexType> 
    2525      </xsd:element> 
     26      <xsd:element name="EchoEncr"> 
     27        <xsd:complexType> 
     28          <xsd:sequence> 
     29            <xsd:element minOccurs="0" maxOccurs="1" name="EchoIn" type="xsd:string" /> 
     30          </xsd:sequence> 
     31        </xsd:complexType> 
     32      </xsd:element> 
     33      <xsd:element name="EchoEncrResponse"> 
     34        <xsd:complexType> 
     35          <xsd:sequence> 
     36            <xsd:element minOccurs="0" maxOccurs="1" name="EchoResult" type="xsd:string" /> 
     37          </xsd:sequence> 
     38        </xsd:complexType> 
     39      </xsd:element> 
    2640  </xsd:schema> 
    2741  </types> 
     
    3347    <part name="parameters" element="tns:EchoResponse"/> 
    3448  </message> 
     49  <message name="EchoEncrRequest"> 
     50    <part name="parameters" element="tns:EchoEncr" /> 
     51  </message> 
     52  <message name="EchoEncrResponse"> 
     53    <part name="parameters" element="tns:EchoEncrResponse"/> 
     54  </message> 
    3555 
    3656  <portType name="EchoServer"> 
     
    3858      <input message="tns:EchoRequest"/> 
    3959      <output message="tns:EchoResponse"/> 
     60    </operation> 
     61    <operation name="EchoEncr"> 
     62      <input message="tns:EchoEncrRequest"/> 
     63      <output message="tns:EchoEncrResponse"/> 
    4064    </operation> 
    4165  </portType> 
     
    5377        </output> 
    5478    </operation> 
     79    <operation name="EchoEncr"> 
     80      <soap:operation soapAction="EchoEncr"/> 
     81        <input> 
     82          <soap:body use="literal"/>  
     83        </input> 
     84        <output> 
     85          <soap:body use="literal"/>  
     86        </output> 
     87    </operation> 
    5588  </binding> 
    5689 
    5790  <service name="EchoServer"> 
    5891    <port name="EchoServer" binding="tns:EchoServer"> 
    59       <soap:address location="http://localhost:7000"/> 
     92      <soap:address location="http://localhost:7100"/> 
    6093    </port> 
    6194  </service> 
  • TI12-security/trunk/python/Tests/Echo/EchoClient.py

    r1542 r1634  
    77import sys 
    88 
     9import wsSecurity 
    910 
     11# Lambda used by WS-Security handler to check which operation has been 
     12# invoked 
     13isEchoRequest = lambda sw: sw.body.node.childNodes[0].localName=='Echo' 
     14isEchoEncrRequest = lambda sw: sw.body.node.childNodes[0].localName=='EchoEncr' 
     15 
     16isEchoResponse = lambda ps: \ 
     17ps.dom.childNodes[1].childNodes[1].childNodes[0].localName == 'EchoResponse' 
     18isEchoEncrResponse = lambda ps: \ 
     19ps.dom.childNodes[1].childNodes[1].childNodes[0].localName=='EchoEncrResponse' 
     20 
     21class WSSEhandler: 
     22    def __init__(self, sigHandler=None, encrHandler=None): 
     23        self.sigHandler = sigHandler 
     24        self.encrHandler = encrHandler 
     25         
     26    def sign(self, sw): 
     27        '''Named 'sign' but acts as handler for encryption also''' 
     28         
     29        # Sign Echo Request but for EchoEncr request encrypt instead 
     30        if isEchoRequest(sw): 
     31            if self.sigHandler: 
     32                self.sigHandler.sign(sw) 
     33        else:     
     34            if self.encrHandler: 
     35                self.encrHandler.encrypt(sw) 
     36 
     37             
     38    def verify(self, ps): 
     39        '''Named 'verify' but also acts as handler for encryption''' 
     40        import pdb;pdb.set_trace() 
     41        # Verify Echo Request but for EchoEncr request decrypt instead 
     42        if isEchoResponse(ps): 
     43            if self.sigHandler: 
     44                self.sigHandler.verify(ps) 
     45        else:         
     46            if self.encrHandler: 
     47                self.encrHandler.decrypt(ps) 
     48 
     49 
     50priKeyPwd = open('../tmp2').read().strip() 
     51certFilePath = '../Junk-cert.pem' 
     52priKeyFilePath = '../Junk-key.pem' 
     53 
     54# Signature handler object is passed to binding 
     55sigHandler = wsSecurity.SignatureHandler(certFilePath=certFilePath, 
     56                                         priKeyFilePath=priKeyFilePath, 
     57                                         priKeyPwd=priKeyPwd) 
     58 
     59encrHandler = wsSecurity.EncryptionHandler(certFilePath=certFilePath, 
     60                                           priKeyFilePath=priKeyFilePath, 
     61                                           priKeyPwd=priKeyPwd) 
     62 
     63wsseHandler = WSSEhandler(sigHandler, encrHandler) 
     64     
     65         
    1066# Instantiate a client proxy object, then call it 
    11 hw2 = EchoServerSOAP("http://localhost:7000/EchoServIn", 
    12                      tracefile=sys.stdout) 
     67echoSrv = EchoServerSOAP("http://localhost:7100/EchoServIn", 
     68                         sig_handler=wsseHandler, 
     69                         tracefile=sys.stdout) 
    1370try: 
    1471    import pdb;pdb.set_trace() 
    15     print hw2.Echo("Test INHERIT String") 
     72    print echoSrv.Echo("Test INHERIT String") 
     73    #print echoSrv.EchoEncr("Test Secret") 
    1674except Exception, e: 
    1775    print "Failed to echo (Inherited): ", e 
  • TI12-security/trunk/python/Tests/Echo/EchoServer.py

    r1542 r1634  
    33# How to build an echo server using the extended code generation 
    44# 
     5import sys 
    56 
    67# Import the ZSI stuff you'd need no matter what 
    7 from ZSI.ServiceContainer import ServiceContainer 
     8from ZSI.ServiceContainer import ServiceContainer, SOAPRequestHandler 
    89 
    910# This is a new method imported to show it's value 
     
    1314import EchoServer_interface 
    1415 
     16# Set security operation by request type 
     17from EchoServer_messages import * 
     18 
     19import wsSecurity 
     20 
     21psBodyChildName = lambda ps: \ 
     22    ps.dom.childNodes[1].childNodes[1].childNodes[0].localName 
     23     
    1524# Create a Server implementation 
    1625 
    17 # Here we use a Tie approach 
    18 #class EchoServer: 
    19 #    def authorize(self, auth_info, post, action): 
    20 #        print "Authorizing TIE Echo" 
    21 #        ctx = GetSOAPContext() 
    22 #        print dir(ctx) 
    23 #        print "Container: ", ctx.connection 
    24 #        print "Parsed SOAP: ", ctx.parsedsoap 
    25 #        print "Container: ", ctx.container 
    26 #        print "HTTP Headers:\n", ctx.httpheaders 
    27 #        print "----" 
    28 #        print "XML Data:\n", ctx.xmldata 
    29 #        return 0 
    30 # 
    31 #    def Echo(self, input): 
    32 #        return input * 3 
    33      
     26#_____________________________________________________________________________ 
     27class EchoSOAPRequestHandler(SOAPRequestHandler): 
     28     """Add a do_GET method to return the WSDL on HTTP GET requests. 
     29     Please note that the path to the wsdl file is derived from what 
     30     the HTTP invocation delivers (which is put into the self.path 
     31     attribute), so you might want to change this addressing scheme. 
     32     """ 
     33     def do_GET(self): 
     34         """Return the WSDL file."""          
     35         self.send_xml(EchoServer_interface.EchoServer._wsdl) 
     36          
     37     def do_POST(self): 
     38          """Fudge to get _Dispatch to pick up the correct address 
     39          - seems to be necessary when putting proxy redirect for port in 
     40          the wsdl e.g. http://glue.badc.rl.ac.uk/sessionMgr points to the 
     41          default port for the Session Manager.""" 
     42          self.path = "/EchoServIn" 
     43          SOAPRequestHandler.do_POST(self) 
     44    
    3445# This using a derived server instead 
    3546class EchoServIn(EchoServer_interface.EchoServer): 
     
    4152        self.impl = self 
    4253         
    43     def authorize(self, auth_info, post, action): 
    44         print "Authorizing INHERIT Echo" 
    45         ctx = GetSOAPContext() 
    46         print dir(ctx) 
    47         print "Container: ", ctx.connection 
    48         print "Parsed SOAP: ", ctx.parsedsoap 
    49         print "Container: ", ctx.container 
    50         print "HTTP Headers:\n", ctx.httpheaders 
    51         print "----" 
    52         print "XML Data:\n", ctx.xmldata 
    53         return 1 
     54        self.signatureHandler = wsSecurity.SignatureHandler(\ 
     55                                    certFilePath='../Junk-cert.pem', 
     56                                    priKeyFilePath='../Junk-key.pem', 
     57                                    priKeyPwd=open('../tmp2').read().strip()) 
     58 
     59        self.encryptionHandler = wsSecurity.EncryptionHandler(\ 
     60                                    certFilePath='../Junk-cert.pem', 
     61                                    priKeyFilePath='../Junk-key.pem', 
     62                                    priKeyPwd=open('../tmp2').read().strip()) 
     63         
     64         
     65    def sign(self, sw): 
     66        '''\ 
     67        Overrides ServiceInterface class method to allow digital signature''' 
     68        if isinstance(self.request, EchoRequest): 
     69            # Echo response applies digital signature 
     70            self.signatureHandler.sign(sw) 
     71         
     72    def verify(self, ps): 
     73        '''\ 
     74        Overrides ServiceInterface class method to allow signature  
     75        verification'''       
     76        if isinstance(self.request, EchoRequest): 
     77            # Echo request checks digital signature 
     78            self.signatureHandler.verify(ps) 
     79 
     80    def encrypt(self, sw): 
     81        if isinstance(self.request, EchoEncrRequest): 
     82            # Assume EchoEncr response - apply encryption 
     83            self.encryptionHandler.encrypt(sw) 
     84             
     85    def decrypt(self, ps): 
     86        if psBodyChildName(ps) == 'EncryptedData': 
     87            # Assume EchoEncr request 
     88            self.encryptionHandler.decrypt(ps) 
     89         
     90# 
     91#         
     92#    def authorize(self, auth_info, post, action): 
     93#        print "Authorizing INHERIT Echo" 
     94#        ctx = GetSOAPContext() 
     95#        print dir(ctx) 
     96#        print "Container: ", ctx.connection 
     97#        print "Parsed SOAP: ", ctx.parsedsoap 
     98#        print "Container: ", ctx.container 
     99#        print "HTTP Headers:\n", ctx.httpheaders 
     100#        print "----" 
     101#        print "XML Data:\n", ctx.xmldata 
     102#        return 1 
    54103 
    55104    def Echo(self, input): 
    56         import pdb;pdb.set_trace() 
    57         return input * 3 
     105        return "Input message was: %s" % input 
     106 
     107    def EchoEncr(self, input): 
     108        return "Input secret was: %s" % input 
    58109 
    59110# Here we set up the server 
    60 serviceContainer = ServiceContainer(('localhost', 7000)) 
     111serviceContainer = ServiceContainer(('localhost', 7100), 
     112                                    RequestHandlerClass=EchoSOAPRequestHandler) 
    61113 
    62114# Create the TIE version of the server 
     
    71123serviceContainer.setNode(hws2, url="/EchoServIn") 
    72124 
    73 # Run the service container 
    74 serviceContainer.serve_forever() 
     125try: 
     126    # Run the service container 
     127    serviceContainer.serve_forever() 
     128except KeyboardInterrupt: 
     129    sys.exit(0) 
  • TI12-security/trunk/python/Tests/Echo/EchoServer_client.py

    r1546 r1634  
    1010from ZSI import client 
    1111import ZSI 
    12 from urllib2Client import URLlib2Binding 
    1312 
    14 from EchoServer_messages import EchoRequest, EchoResponse 
    15  
     13from EchoServer_messages import * 
    1614 
    1715# Locator 
    1816class EchoServerLocator: 
    19     EchoServer_address = "http://localhost:7000" 
     17    EchoServer_address = "http://localhost:7100" 
    2018    def getEchoServerAddress(self): 
    2119        return EchoServerLocator.EchoServer_address 
     
    2927        kw.setdefault("writerclass", None) 
    3028        # no resource properties 
    31         self.binding = URLlib2Binding(url=url, **kw) 
     29        self.binding = client.Binding(url=url, **kw) 
    3230        # no ws-addressing 
    3331 
    34     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6edcf8c> 
     32    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6e7ca0c> 
    3533    def Echo(self, EchoIn): 
    3634 
     
    3836        request.EchoIn = EchoIn 
    3937 
    40         import urllib2 
    41         proxies = {'http': 'http://wwwcache2.rl.ac.uk:8080'} 
    42         kw = {'urlHandler': urllib2.ProxyHandler(proxies=proxies)} 
    43          
     38        kw = {} 
    4439        # no input wsaction 
    4540        self.binding.Send(None, None, request, soapaction="Echo", **kw) 
    46          
    4741        # no output wsaction 
    4842        response = self.binding.Receive(EchoResponse.typecode) 
    4943        EchoResult = response.EchoResult 
    5044        return EchoResult 
     45 
     46    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6e7cf6c> 
     47    def EchoEncr(self, EchoIn): 
     48 
     49        request = EchoEncrRequest() 
     50        request.EchoIn = EchoIn 
     51 
     52        kw = {} 
     53        # no input wsaction 
     54        self.binding.Send(None, None, request, soapaction="EchoEncr", **kw) 
     55        # no output wsaction 
     56        response = self.binding.Receive(EchoEncrResponse.typecode) 
     57        EchoResult = response.EchoResult 
     58        return EchoResult 
  • TI12-security/trunk/python/Tests/Echo/EchoServer_interface.py

    r1542 r1634  
    2929        </xsd:complexType> 
    3030      </xsd:element> 
     31      <xsd:element name=\"EchoEncr\"> 
     32        <xsd:complexType> 
     33          <xsd:sequence> 
     34            <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"EchoIn\" type=\"xsd:string\"/> 
     35          </xsd:sequence> 
     36        </xsd:complexType> 
     37      </xsd:element> 
     38      <xsd:element name=\"EchoEncrResponse\"> 
     39        <xsd:complexType> 
     40          <xsd:sequence> 
     41            <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"EchoResult\" type=\"xsd:string\"/> 
     42          </xsd:sequence> 
     43        </xsd:complexType> 
     44      </xsd:element> 
    3145  </xsd:schema> 
    3246  </types> 
     
    3852    <part element=\"tns:EchoResponse\" name=\"parameters\"/> 
    3953  </message> 
     54  <message name=\"EchoEncrRequest\"> 
     55    <part element=\"tns:EchoEncr\" name=\"parameters\"/> 
     56  </message> 
     57  <message name=\"EchoEncrResponse\"> 
     58    <part element=\"tns:EchoEncrResponse\" name=\"parameters\"/> 
     59  </message> 
    4060 
    4161  <portType name=\"EchoServer\"> 
     
    4363      <input message=\"tns:EchoRequest\"/> 
    4464      <output message=\"tns:EchoResponse\"/> 
     65    </operation> 
     66    <operation name=\"EchoEncr\"> 
     67      <input message=\"tns:EchoEncrRequest\"/> 
     68      <output message=\"tns:EchoEncrResponse\"/> 
    4569    </operation> 
    4670  </portType> 
     
    5781        </output> 
    5882    </operation> 
     83    <operation name=\"EchoEncr\"> 
     84      <soap:operation soapAction=\"EchoEncr\"/> 
     85        <input> 
     86          <soap:body use=\"literal\"/>  
     87        </input> 
     88        <output> 
     89          <soap:body use=\"literal\"/>  
     90        </output> 
     91    </operation> 
    5992  </binding> 
    6093 
    6194  <service name=\"EchoServer\"> 
    6295    <port binding=\"tns:EchoServer\" name=\"EchoServer\"> 
    63       <soap:address location=\"http://localhost:7000\"/> 
     96      <soap:address location=\"http://localhost:7100\"/> 
    6497    </port> 
    6598  </service> 
     
    97130    root[(EchoRequest.typecode.nspname,EchoRequest.typecode.pname)] = 'soap_Echo' 
    98131 
     132    def soap_EchoEncr(self, ps): 
     133        self.request = ps.Parse(EchoEncrRequest.typecode) 
     134        parameters = self.request.EchoIn 
     135 
     136        # If we have an implementation object use it 
     137        if hasattr(self,'impl'): 
     138            parameters = self.impl.EchoEncr(parameters) 
     139 
     140        result = EchoEncrResponse() 
     141        # If we have an implementation object, copy the result  
     142        if hasattr(self,'impl'): 
     143            result.EchoResult = parameters 
     144        return result 
     145 
     146    soapAction['EchoEncr'] = 'soap_EchoEncr' 
     147    root[(EchoEncrRequest.typecode.nspname,EchoEncrRequest.typecode.pname)] = 'soap_EchoEncr' 
     148 
  • TI12-security/trunk/python/Tests/Echo/EchoServer_messages.py

    r1542 r1634  
    1414 
    1515EchoResponse = urn_ZSI_examples.EchoResponse().pyclass 
     16 
     17EchoEncrRequest = urn_ZSI_examples.EchoEncr().pyclass 
     18 
     19EchoEncrResponse = urn_ZSI_examples.EchoEncrResponse().pyclass 
  • TI12-security/trunk/python/Tests/Echo/EchoServer_services_types.py

    r1542 r1634  
    5656            self.pyclass = Holder 
    5757 
     58    class EchoEncr(ZSI.TCcompound.ComplexType, ElementDeclaration): 
     59        schema = "urn:ZSI:examples" 
     60        literal = "EchoEncr" 
     61        def __init__(self, **kw): 
     62            ns = urn_ZSI_examples.EchoEncr.schema 
     63            TClist = [ZSI.TC.String(pname=(ns,"EchoIn"), aname="EchoIn", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     64            kw["pname"] = ("urn:ZSI:examples","EchoEncr") 
     65            kw["aname"] = "EchoEncr" 
     66            self.attribute_typecode_dict = {} 
     67            ZSI.TCcompound.ComplexType.__init__(self, None, TClist, inorder=0, **kw) 
     68            class Holder: 
     69                typecode = self 
     70                def __init__(self): 
     71                    # pyclass 
     72                    self.EchoIn = None 
     73                    return 
     74            Holder.__name__ = "EchoEncr_Holder" 
     75            self.pyclass = Holder 
     76 
     77    class EchoEncrResponse(ZSI.TCcompound.ComplexType, ElementDeclaration): 
     78        schema = "urn:ZSI:examples" 
     79        literal = "EchoEncrResponse" 
     80        def __init__(self, **kw): 
     81            ns = urn_ZSI_examples.EchoEncrResponse.schema 
     82            TClist = [ZSI.TC.String(pname=(ns,"EchoResult"), aname="EchoResult", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     83            kw["pname"] = ("urn:ZSI:examples","EchoEncrResponse") 
     84            kw["aname"] = "EchoEncrResponse" 
     85            self.attribute_typecode_dict = {} 
     86            ZSI.TCcompound.ComplexType.__init__(self, None, TClist, inorder=0, **kw) 
     87            class Holder: 
     88                typecode = self 
     89                def __init__(self): 
     90                    # pyclass 
     91                    self.EchoResult = None 
     92                    return 
     93            Holder.__name__ = "EchoEncrResponse_Holder" 
     94            self.pyclass = Holder 
     95 
    5896# end class urn_ZSI_examples (tns: urn:ZSI:examples) 
Note: See TracChangeset for help on using the changeset viewer.