Changeset 3113


Ignore:
Timestamp:
06/12/07 09:39:27 (12 years ago)
Author:
pjkersha
Message:

security/python/ndg.security.test/ndg/security/test/wsSecurity/server: working test server using ServiceContainer? - needs test vs. client

Location:
TI12-security/trunk/python/ndg.security.test/ndg/security/test/wsSecurity/server
Files:
3 added
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/wsSecurity/server/EchoServer.py

    r1804 r3113  
    33# How to build an echo server using the extended code generation 
    44# 
    5 import sys 
     5import sys, os 
    66 
    77# Import the ZSI stuff you'd need no matter what 
     
    1111from ZSI.ServiceContainer import GetSOAPContext 
    1212 
    13 # Import the generated Server Object 
    14 import EchoServer_interface 
     13from ndg.security.test.wsSecurity.server.Echo_services_server import \ 
     14    Echo as _Echo 
    1515 
    16 # Set security operation by request type 
    17 from EchoServer_messages import * 
     16from ndg.security.common import wsSecurity 
    1817 
    19 import wsSecurity 
     18priKeyPwd = 'JunkJunk' 
     19certFilePath = './Junk-cert.pem' 
     20priKeyFilePath = './Junk-key.pem' 
     21caCertFilePath = './cacert.pem' 
    2022 
    21 psBodyChildName = lambda ps: \ 
    22     ps.dom.childNodes[1].childNodes[1].childNodes[0].localName 
     23class Echo(_Echo): 
    2324 
    24 priKeyPwd = None 
    25 certFilePath = '../webSphereTestcert.pem' 
    26 priKeyFilePath = '../webSphereTestkey.pem' 
     25    def __init__(self, **kw): 
     26         
     27        # Stop in debugger at beginning of SOAP stub if environment variable  
     28        # is set 
     29        self.__debug = bool(os.environ.get('NDGSEC_INT_DEBUG')) 
     30        if self.__debug: 
     31            import pdb 
     32            pdb.set_trace() 
     33             
     34        self.signatureHandler = wsSecurity.SignatureHandler(\ 
     35                                    signingCertFilePath=certFilePath, 
     36                                    signingPriKeyFilePath=priKeyFilePath, 
     37                                    signingPriKeyPwd=priKeyPwd, 
     38                                    caCertFilePathList=[caCertFilePath]) 
     39        _Echo.__init__(self, **kw) 
     40         
     41    def sign(self, sw): 
     42        '''Overrides ServiceInterface class method to allow digital signature 
     43        ''' 
     44        if isinstance(self.request, EchoRequest): 
     45            # Echo response applies digital signature 
     46            self.signatureHandler.sign(sw) 
     47         
     48    def verify(self, ps): 
     49        '''Overrides ServiceInterface class method to allow signature  
     50        verification'''       
     51        if isinstance(self.request, EchoRequest): 
     52            # Echo request checks digital signature 
     53            self.signatureHandler.verify(ps) 
    2754 
    28      
     55    def soap_Echo(self, ps, **kw): 
     56        '''Simple echo method to test WS-Security DSIG 
     57         
     58        @type ps: ZSI ParsedSoap 
     59        @param ps: client SOAP message 
     60        @rtype: tuple 
     61        @return: request and response objects''' 
     62        if self.__debug: 
     63            import pdb 
     64            pdb.set_trace() 
     65             
     66        response = AttAuthorityService.soap_Echo(self, ps) 
     67 
     68        response.EchoResult = self.request._EchoIn 
     69        return response 
     70    
    2971# Create a Server implementation 
    3072 
     
    4890          SOAPRequestHandler.do_POST(self) 
    4991    
    50 # This using a derived server instead 
    51 class EchoServIn(EchoServer_interface.EchoServer): 
    52     def __init__(self, post='', **kw): 
    53         EchoServer_interface.EchoServer.__init__(self, post, **kw) 
    54  
    55         # Fudge to copy methods of this class so that equivalent  
    56         # SimpleCAService class WS stub picks it up 
    57         self.impl = self 
    58          
    59         self.signatureHandler = wsSecurity.SignatureHandler(\ 
    60                                     certFilePath=certFilePath, 
    61                                     priKeyFilePath=priKeyFilePath, 
    62                                     priKeyPwd=priKeyPwd) 
    63  
    64         self.encryptionHandler = wsSecurity.EncryptionHandler(\ 
    65                                     certFilePath=certFilePath, 
    66                                     priKeyFilePath=priKeyFilePath, 
    67                                     priKeyPwd=priKeyPwd) 
    68          
    69          
    70 #    def sign(self, sw): 
    71 #        '''\ 
    72 #        Overrides ServiceInterface class method to allow digital signature''' 
    73 #        if isinstance(self.request, EchoRequest): 
    74 #            # Echo response applies digital signature 
    75 #            self.signatureHandler.sign(sw) 
    76 #         
    77 #    def verify(self, ps): 
    78 #        '''\ 
    79 #        Overrides ServiceInterface class method to allow signature  
    80 #        verification'''       
    81 #        if isinstance(self.request, EchoRequest): 
    82 #            # Echo request checks digital signature 
    83 #            self.signatureHandler.verify(ps) 
    84  
    85     def encrypt(self, sw): 
    86         #if isinstance(self.request, EchoEncrRequest): 
    87         # Assume EchoEncr response - apply encryption 
    88         self.encryptionHandler.encrypt(sw) 
    89  
    90              
    91     def decrypt(self, ps): 
    92         if psBodyChildName(ps) == 'EncryptedData': 
    93             # Assume EchoEncr request 
    94             self.encryptionHandler.decrypt(ps) 
    95          
    96 # 
    97 #         
    98 #    def authorize(self, auth_info, post, action): 
    99 #        print "Authorizing INHERIT Echo" 
    100 #        ctx = GetSOAPContext() 
    101 #        print dir(ctx) 
    102 #        print "Container: ", ctx.connection 
    103 #        print "Parsed SOAP: ", ctx.parsedsoap 
    104 #        print "Container: ", ctx.container 
    105 #        print "HTTP Headers:\n", ctx.httpheaders 
    106 #        print "----" 
    107 #        print "XML Data:\n", ctx.xmldata 
    108 #        return 1 
    109  
    110     def Echo(self, input): 
    111         return "Input message was: %s" % input 
    112  
    113     def EchoEncr(self, input): 
    114         return "Input secret was: %s" % input 
    115  
    116 # Here we set up the server 
    117 serviceContainer = ServiceContainer(('localhost', 7000),#7100), 
    118                                     RequestHandlerClass=EchoSOAPRequestHandler) 
    119  
    120 # Create the TIE version of the server 
    121 #hws = EchoServer() 
    122 #hwsi = EchoServer_interface.EchoServer(impl=hws, 
    123 #                                       auth_method_name="authorize") 
    124 #serviceContainer.setNode(hwsi, url="/EchoServer") 
    125  
    126 # Create the Inherited version of the server 
    127 import sys 
    128 hws2 = EchoServIn(tracefile=sys.stdout) 
    129 serviceContainer.setNode(hws2, url="/EchoServIn") 
    130  
    131 try: 
    132     # Run the service container 
    133     serviceContainer.serve_forever() 
    134 except KeyboardInterrupt: 
    135     sys.exit(0) 
     92if __name__ == "__main__": 
     93    # Here we set up the server 
     94    hostname = 'localhost' 
     95    port = 7000 
     96    path = "/Echo" 
     97    serviceContainer = ServiceContainer((hostname, port)) 
     98     
     99     
     100    # Create the Inherited version of the server 
     101    echo = Echo(tracefile=sys.stdout) 
     102    serviceContainer.setNode(echo, url=path) 
     103     
     104    try: 
     105        # Run the service container 
     106        print "listening at http://%s:%s%s" % (hostname, port, path) 
     107        serviceContainer.serve_forever() 
     108    except KeyboardInterrupt: 
     109        sys.exit(0) 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/wsSecurity/server/Makefile

    r3108 r3113  
    1414# $Id:$ 
    1515WSDL_FILE=../echo.wsdl 
    16 CMD=wsdl2dispatch 
    17 OPTS=-e -f 
     16CMD1=wsdl2py 
     17OPTS1=-be -f 
     18CMD2=wsdl2dispatch 
     19OPTS2=-e -f 
     20 
     21 
     22STUB_FILE=Echo_services_server.py 
     23TMP_FILE=Echo_services_server.py.tmp 
     24 
     25ORIG1=from Echo_services import 
     26REPL1=from ndg.security.test.wsSecurity.server.Echo_services import 
    1827 
    1928generateStubs: ${WSDL_FILE} 
    20         ${CMD} ${OPTS} ${WSDL_FILE} 
     29        @echo Generate stub ... 
     30        ${CMD1} ${OPTS1} ${WSDL_FILE} 
     31        ${CMD2} ${OPTS2} ${WSDL_FILE} 
     32        @echo Make substitutions for compatibility for correct NDG import ... 
     33        @cat ${STUB_FILE}|sed  s/"${ORIG1}"/"${REPL1}"/g > ${TMP_FILE} 
     34        @mv ${TMP_FILE} ${STUB_FILE} 
     35        @echo Done. 
Note: See TracChangeset for help on using the changeset viewer.