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

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/NDG/attAuthority_services_server.py@930
Revision 930, 6.6 KB checked in by pjkersha, 15 years ago (diff)
  • Added Gatekeeper class.
  • Changed 'cvsID' ref global var in all files to 'reposID'
  • 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                   
68            trustedHosts = self.__srv.getTrustedHostInfo(role=reqKeys['role'])
69            trustedHostInfoResp = TrustedHostInfoResp(\
70                                                   trustedHosts=trustedHosts)                                         
71        except Exception, e:
72            trustedHostInfoResp = TrustedHostInfoResp(errMsg=str(e))
73           
74           
75        try:
76            # Encrypt response and convert into XML formatted string
77            if 'encrCert' in reqKeys:
78               
79                # ConnectResp class expects the public key to be in a file
80                # - Copy public key string content into a temporary file
81                encrCertTmpFile = tempfile.NamedTemporaryFile()                   
82                open(encrCertTmpFile.name, "w").write(reqKeys['encrCert'])
83   
84                trustedHostInfoResp.encrypt(\
85                                    encrPubKeyFilePath=encrCertTmpFile.name)
86               
87        except Exception, e:
88            trustedHostInfoResp = TrustedHostInfoResp(\
89                                  statCode=TrustedHostInfoResp.accessError,
90                                  errMsg=str(e))
91
92       
93        # Convert response into encrypted XML formatted string   
94        resp._trustedHostInfoResp = trustedHostInfoResp()
95        return resp
96
97
98    #_________________________________________________________________________
99    def soap_reqAuthorisation(self, ps):
100
101        if self.__debug:
102            import pdb
103            pdb.set_trace()
104       
105        # input vals in request object
106        reqArgs = ps.Parse(authorisationRequestWrapper)
107        reqTxt = str(reqArgs._authorisationReq)
108
109        # assign return values to response object
110        resp = authorisationResponseWrapper()
111       
112               
113        try:
114            # Decrypt and parse input
115            reqKeys = AuthorisationReq(xmlTxt=reqTxt,
116                                     encrPriKeyFilePath=self.__srv['keyFile'],
117                                     encrPriKeyPwd=self.__srv['keyPwd'])
118
119            # Make request to local instance
120            attCert = self.__srv.authorise(**reqKeys.xmlTags)
121           
122            authResp = AuthorisationResp(\
123                                    credential=attCert,
124                                    statCode=AuthorisationResp.accessGranted)
125           
126        except AttAuthorityAccessDenied, e:
127            authResp = AuthorisationResp(errMsg=str(e),
128                                    statCode=AuthorisationResp.accessDenied)
129           
130        except Exception, e:
131            authResp = AuthorisationResp(errMsg=str(e),
132                                    statCode=AuthorisationResp.accessError)
133
134
135        try:
136            # Encrypt response and convert into XML formatted string
137            if 'encrCert' in reqKeys:
138               
139                # ConnectResp class expects the public key to be in a file
140                # - Copy public key string content into a temporary file
141                encrCertTmpFile = tempfile.NamedTemporaryFile()                   
142                open(encrCertTmpFile.name, "w").write(reqKeys['encrCert'])
143   
144                authResp.encrypt(encrPubKeyFilePath=encrCertTmpFile.name)
145               
146        except Exception, e:
147            authResp = AuthorisationResp(\
148                                      statCode=AuthorisationResp.accessError,
149                                      errMsg=str(e))
150
151       
152        # Convert response into encrypted XML formatted string   
153        resp._authorisationResp = authResp()                                                           
154        return resp
155
156
157    #_________________________________________________________________________
158    def soap_getPubKey(self, ps):
159        """Get session manager public key in order to initiate a encrypted
160        request"""
161       
162        if self.__debug:
163            import pdb
164            pdb.set_trace()
165       
166        # assign return values to response object
167        resp = pubKeyResponseWrapper()
168
169        try:
170            # Get public key file and read into string     
171            pubKey = open(self.__srv['certFile']).read()
172            pubKeyResp = PubKeyResp(pubKey=pubKey)
173           
174        except IOError, (errNo, errMsg):
175            pubKeyResp = PubKeyResp(errMsg="Reading public key \"%s\": %s" % \
176                                    (self.__srv['certFile'], errMsg))               
177        except Exception, e:
178            pubKeyResp = PubKeyResp(errMsg=str(e))
179
180       
181        # Convert response into encrypted XML formatted string   
182        resp._pubKeyResp = pubKeyResp()                                                           
183        return resp
184       
Note: See TracBrowser for help on using the repository browser.