source: TI12-security/trunk/python/NDG/attAuthority_services_server.py @ 1021

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/NDG/attAuthority_services_server.py@1021
Revision 1021, 6.7 KB checked in by pjkersha, 14 years ago (diff)

Tests/SecurityClientTest?.py: added testAAgetTrustedHostInfoWithNoRoleSet to test with no role input

dist/NDG-Security-0.66.tar.gz: updated distro for testing

NDG/AttAuthorityIO.py: Extra fail safes in TrustedHostInfoResp? - check 'trustedHosts' key is present before referencings
it.

NDG/attAuthority_services_server.py: fix for where no role is set - input to AttAuthority?.getTrustHostInfo as None.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1"""NDG Attribute Authority Web service server side interface.  Generated and
2adapted from:
3
4wsdl2dispatch -f attAuthority.wsdl
5
6NERC Data Grid Project
7
8P J Kershaw 19/01/06
9
10Copyright (C) 2006 CCLRC & NERC
11
12This software may be distributed under the terms of the Q Public License,
13version 1.0 or later.
14"""
15
16reposID = '$Id$'
17
18from attAuthority_services import *
19from ZSI.ServiceContainer import ServiceSOAPBinding
20
21from AttAuthority import *
22
23# Create custom XML formatted error response where needed
24from AttAuthorityIO import *
25
26
27class attAuthority(ServiceSOAPBinding):
28    soapAction = {
29        'urn:attAuthority#getTrustedHostInfo': 'soap_getTrustedHostInfo',
30        'urn:attAuthority#reqAuthorisation': 'soap_reqAuthorisation',
31        'urn:attAuthority#getPubKey': 'soap_getPubKey',
32        }
33
34    def __init__(self, srv, debug=False, post='/attAuthority.wsdl', **kw):
35       
36        ServiceSOAPBinding.__init__(self, post)
37
38        # Link WS to underlying attribute authority class instance
39        if not isinstance(srv, AttAuthority):
40            AttAuthorityError("Expecting AttAuthority type")
41           
42        self.__srv = srv
43       
44        self.__debug = debug
45       
46
47    #_________________________________________________________________________
48    def soap_getTrustedHostInfo(self, ps):
49       
50        if self.__debug:
51            import pdb
52            pdb.set_trace()
53       
54        # input vals in request object
55        reqArgs = ps.Parse(trustedHostInfoRequestWrapper)
56        reqTxt = str(reqArgs._trustedHostInfoReq)
57       
58        # assign return values to response object
59        resp = trustedHostInfoResponseWrapper()
60       
61       
62        try:
63            # Decrypt and parse input
64            reqKeys = TrustedHostInfoReq(xmlTxt=reqTxt,
65                                     encrPriKeyFilePath=self.__srv['keyFile'],
66                                     encrPriKeyPwd=self.__srv['keyPwd'])
67            if 'role' in reqKeys:
68                role = reqKeys['role']
69            else:
70                role = None
71                     
72            trustedHosts = self.__srv.getTrustedHostInfo(role=role)
73            trustedHostInfoResp = TrustedHostInfoResp(\
74                                                   trustedHosts=trustedHosts)                                         
75        except Exception, e:
76            trustedHostInfoResp = TrustedHostInfoResp(errMsg=str(e))
77           
78           
79        try:
80            # Encrypt response and convert into XML formatted string
81            if 'encrCert' in reqKeys:
82               
83                # ConnectResp class expects the public key to be in a file
84                # - Copy public key string content into a temporary file
85                encrCertTmpFile = tempfile.NamedTemporaryFile()                   
86                open(encrCertTmpFile.name, "w").write(reqKeys['encrCert'])
87   
88                trustedHostInfoResp.encrypt(\
89                                    encrPubKeyFilePath=encrCertTmpFile.name)
90               
91        except Exception, e:
92            trustedHostInfoResp = TrustedHostInfoResp(\
93                                  statCode=TrustedHostInfoResp.accessError,
94                                  errMsg=str(e))
95
96       
97        # Convert response into encrypted XML formatted string   
98        resp._trustedHostInfoResp = trustedHostInfoResp()
99        return resp
100
101
102    #_________________________________________________________________________
103    def soap_reqAuthorisation(self, ps):
104
105        if self.__debug:
106            import pdb
107            pdb.set_trace()
108       
109        # input vals in request object
110        reqArgs = ps.Parse(authorisationRequestWrapper)
111        reqTxt = str(reqArgs._authorisationReq)
112
113        # assign return values to response object
114        resp = authorisationResponseWrapper()
115       
116               
117        try:
118            # Decrypt and parse input
119            reqKeys = AuthorisationReq(xmlTxt=reqTxt,
120                                     encrPriKeyFilePath=self.__srv['keyFile'],
121                                     encrPriKeyPwd=self.__srv['keyPwd'])
122
123            # Make request to local instance
124            attCert = self.__srv.authorise(**reqKeys.xmlTags)
125           
126            authResp = AuthorisationResp(\
127                                    credential=attCert,
128                                    statCode=AuthorisationResp.accessGranted)
129           
130        except AttAuthorityAccessDenied, e:
131            authResp = AuthorisationResp(errMsg=str(e),
132                                    statCode=AuthorisationResp.accessDenied)
133           
134        except Exception, e:
135            authResp = AuthorisationResp(errMsg=str(e),
136                                    statCode=AuthorisationResp.accessError)
137
138
139        try:
140            # Encrypt response and convert into XML formatted string
141            if 'encrCert' in reqKeys:
142               
143                # ConnectResp class expects the public key to be in a file
144                # - Copy public key string content into a temporary file
145                encrCertTmpFile = tempfile.NamedTemporaryFile()                   
146                open(encrCertTmpFile.name, "w").write(reqKeys['encrCert'])
147   
148                authResp.encrypt(encrPubKeyFilePath=encrCertTmpFile.name)
149               
150        except Exception, e:
151            authResp = AuthorisationResp(\
152                                      statCode=AuthorisationResp.accessError,
153                                      errMsg=str(e))
154
155       
156        # Convert response into encrypted XML formatted string   
157        resp._authorisationResp = authResp()                                                           
158        return resp
159
160
161    #_________________________________________________________________________
162    def soap_getPubKey(self, ps):
163        """Get session manager public key in order to initiate a encrypted
164        request"""
165       
166        if self.__debug:
167            import pdb
168            pdb.set_trace()
169       
170        # assign return values to response object
171        resp = pubKeyResponseWrapper()
172
173        try:
174            # Get public key file and read into string     
175            pubKey = open(self.__srv['certFile']).read()
176            pubKeyResp = PubKeyResp(pubKey=pubKey)
177           
178        except IOError, (errNo, errMsg):
179            pubKeyResp = PubKeyResp(errMsg="Reading public key \"%s\": %s" % \
180                                    (self.__srv['certFile'], errMsg))               
181        except Exception, e:
182            pubKeyResp = PubKeyResp(errMsg=str(e))
183
184       
185        # Convert response into encrypted XML formatted string   
186        resp._pubKeyResp = pubKeyResp()                                                           
187        return resp
188       
Note: See TracBrowser for help on using the repository browser.