source: TI12-security/trunk/python/Tests/xmlsec/WS-Security/wsInterface.py @ 1461

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/Tests/xmlsec/WS-Security/wsInterface.py@1461
Revision 1461, 7.0 KB checked in by pjkersha, 13 years ago (diff)

Working version passes SignatureHandler? instance to ZSI.Binding.Send via sig_handler keyword to sign messages
from WS client.

Still to do:

  • Fix SignatureHandler? verify to handle replies from server
  • Server side - fix appropriate place for signature and verify code.
Line 
1import ZSI
2from ZSI import dispatch, TCcompound, TC
3from ZSI.TC import TypeDefinition, ElementDeclaration
4from ZSI.generate.pyclass import pyclass_type
5
6class echoRequest(TCcompound.Struct): 
7    def __init__(self, name=None, ns=None):
8        self._message = None
9
10        oname = None
11        if name:
12            oname = name
13            if ns:
14                oname += ' xmlns="%s"' % ns
15            TC.Struct.__init__(self, 
16                               echoRequest, 
17                               [TC.String(pname="message",
18                                          aname="_message",
19                                          optional=1),], 
20                               pname=name, 
21                               aname="_%s" % name, 
22                               oname=oname)
23
24           
25class echoRequestWrapper(echoRequest):
26    """wrapper for message"""
27
28    typecode = echoRequest(name='echo', ns='urn:echoServer')
29   
30    def __init__( self, name=None, ns=None, **kw ):
31        echoRequest.__init__(self, name='echo', ns='urn:echoServer')
32
33       
34class echoResponse(TCcompound.Struct): 
35    def __init__(self, name=None, ns=None):
36        self._message = None
37
38        oname = None
39        if name:
40            oname = name
41            if ns:
42                oname += ' xmlns="%s"' % ns
43            TC.Struct.__init__(self, 
44                               echoResponse, 
45                               [TC.String(pname="message",
46                                          aname="_message",
47                                          optional=1),], 
48                               pname=name, 
49                               aname="_%s" % name, 
50                               oname=oname)
51
52           
53class echoResponseWrapper(echoResponse):
54    """wrapper for message"""
55
56    typecode = echoResponse(name='echoResponse', ns='urn:echoServer')
57   
58    def __init__( self, name=None, ns=None, **kw ):
59        echoResponse.__init__(self, name='echoResponse', ns='urn:echoServer')
60
61
62class SecurityHeaderType_Def(ZSI.TCcompound.ComplexType, TypeDefinition):
63    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
64    type = (schema, "SecurityHeaderType")
65    def __init__(self, pname, ofwhat=(), attributes=None, extend=False, restrict=False, **kw):
66        ns = SecurityHeaderType_Def.schema
67        TClist = [ZSI.TC.AnyElement(aname="_any", minOccurs=0, maxOccurs="unbounded", nillable=False, processContents="lax")]
68        self.attribute_typecode_dict = attributes or {}
69        if extend: TClist += ofwhat
70        if restrict: TClist = ofwhat
71        else:
72            # attribute handling code
73            self.attribute_typecode_dict[("http://www.w3.org/2001/XMLSchema","anyAttribute")] = ZSI.TC.AnyElement()
74        ZSI.TCcompound.ComplexType.__init__(self, None, TClist, pname=pname, inorder=0, **kw)
75        class Holder:
76            __metaclass__ = pyclass_type
77            typecode = self
78            def __init__(self):
79                # pyclass
80                self._None = []
81                return
82        Holder.__name__ = "SecurityHeaderType_Holder"
83        self.pyclass = Holder
84
85
86class Security_Dec(ElementDeclaration):
87    literal = "Security"
88    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
89    def __init__(self, **kw):
90        kw["pname"] = ("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security")
91        kw["aname"] = "_Security"
92        if SecurityHeaderType_Def not in Security_Dec.__bases__:
93            bases = list(Security_Dec.__bases__)
94            bases.insert(0, SecurityHeaderType_Def)
95            Security_Dec.__bases__ = tuple(bases)
96
97        SecurityHeaderType_Def.__init__(self, **kw)
98        if self.pyclass is not None: self.pyclass.__name__ = "Security_Dec_Holder"
99           
100class AttributedString_Def(TC.String, TypeDefinition):
101    # ComplexType/SimpleContent derivation of built-in type
102    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
103    type = (schema, "AttributedString")
104    def __init__(self, pname, **kw):
105        if getattr(self, "attribute_typecode_dict", None) is None: self.attribute_typecode_dict = {}
106        # attribute handling code
107        self.attribute_typecode_dict[("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd","Id")] = TC.AnyType()
108        self.attribute_typecode_dict[("http://www.w3.org/2001/XMLSchema","anyAttribute")] = TC.AnyElement()
109        TC.String.__init__(self, pname, **kw)
110        class Holder(str):
111            __metaclass__ = pyclass_type
112            typecode = self
113        self.pyclass = Holder
114
115class EncodedString_Def(TypeDefinition):
116    # ComplexType/SimpleContent derivation of user-defined type
117    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
118    type = (schema, "EncodedString")
119    def __init__(self, pname, **kw):
120        ns = EncodedString_Def.schema
121        if AttributedString_Def not in EncodedString_Def.__bases__:
122            bases = list(EncodedString_Def.__bases__)
123            bases.insert(0, AttributedString_Def)
124            EncodedString_Def.__bases__ = tuple(bases)
125
126        if getattr(self, "attribute_typecode_dict", None) is None: self.attribute_typecode_dict = {}
127        # attribute handling code
128        self.attribute_typecode_dict["EncodingType"] = TC.URI()
129        AttributedString_Def.__init__(self, pname, **kw)
130
131
132class BinarySecurityTokenType_Def(TypeDefinition):
133    # ComplexType/SimpleContent derivation of user-defined type
134    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
135    type = (schema, "BinarySecurityTokenType")
136    def __init__(self, pname, **kw):
137        ns = BinarySecurityTokenType_Def.schema
138        if EncodedString_Def not in BinarySecurityTokenType_Def.__bases__:
139            bases = list(BinarySecurityTokenType_Def.__bases__)
140            bases.insert(0, EncodedString_Def)
141            BinarySecurityTokenType_Def.__bases__ = tuple(bases)
142
143        if getattr(self, "attribute_typecode_dict", None) is None: self.attribute_typecode_dict = {}
144        # attribute handling code
145        self.attribute_typecode_dict["ValueType"] = TC.URI()
146        EncodedString_Def.__init__(self, pname, **kw)
147       
148class BinarySecurityToken_Dec(ElementDeclaration):
149    literal = "BinarySecurityToken"
150    schema = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
151    def __init__(self, **kw):
152        kw["pname"] = ("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","BinarySecurityToken")
153        kw["aname"] = "_BinarySecurityToken"
154        if BinarySecurityTokenType_Def not in BinarySecurityToken_Dec.__bases__:
155            bases = list(BinarySecurityToken_Dec.__bases__)
156            bases.insert(0, BinarySecurityTokenType_Def)
157            BinarySecurityToken_Dec.__bases__ = tuple(bases)
158
159        BinarySecurityTokenType_Def.__init__(self, **kw)
160        if self.pyclass is not None: self.pyclass.__name__ = "BinarySecurityToken_Dec_Holder"
Note: See TracBrowser for help on using the repository browser.