Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
[myslice.git] / rest / sfa_api.py
1 from sfa.trust.certificate              import Keypair, Certificate
2 from sfa.client.sfaserverproxy import SfaServerProxy
3 from sfa.client.return_value import ReturnValue
4
5 from manifold.core.query        import Query
6
7 from django.shortcuts               import render_to_response
8
9 from unfold.loginrequired           import LoginRequiredView
10
11 from rest import ObjectRequest, error
12
13 from string import join
14
15 from django.http import HttpResponse
16 from rest import error
17 import os,json
18
19 def dispatch(request, method):
20     platforms = list()
21     options   = list()
22     rspec = ''
23     results = dict()
24
25     if request.method == 'POST':
26         req_items = request.POST
27     elif request.method == 'GET':
28         req_items = request.GET
29
30     for el in req_items.items():
31         if el[0].startswith('rspec'):
32             rspec += el[1]
33         if el[0].startswith('platform'):
34             platforms += req_items.getlist('platform[]')
35         elif el[0].startswith('options'):
36             options += req_items.getlist('options[]')
37
38     if len(platforms)==0:
39         platforms.append('myslice')
40     #results = {'method':method,'platforms':platforms,'rspec':rspec,'options':options}
41
42     from manifoldapi.manifoldapi    import execute_admin_query
43     for pf in platforms:
44         platform_query = Query().get('local:platform').filter_by('platform', '==', pf).select('config')
45         platform_result = execute_admin_query(request, platform_query)
46         platform = json.loads(platform_result[0]['config'])
47         print platform
48         if 'sm' in platform and len(platform['sm']) > 0:
49             print 'sm'
50             server_url = platform['sm']
51         if 'rm' in platform and len(platform['rm']) > 0:
52             print 'rm'
53             server_url = platform['rm']
54         if 'registry' in platform and len(platform['registry']) > 0:
55             print 'registry'
56             server_url = platform['registry']
57     
58         pkey_path = os.path.abspath(platform['user_private_key'])
59         if not os.path.isfile(pkey_path) :
60              return HttpResponse(json.dumps({'error' : '-2'}), content_type="application/json")
61         pkey_file = open(pkey_path,'r')
62         pkey = pkey_file.read()
63         x = pkey.encode('latin1')
64         keypair = Keypair(string=x)
65         self_signed = Certificate(subject = platform['user'])
66         self_signed.set_pubkey(keypair)
67         self_signed.set_issuer(keypair, subject=platform['user'].encode('latin1'))
68         self_signed.sign()
69         sscert_path = self_signed.save_to_random_tmp_file()
70         print "path of tmp sscert: %s" % sscert_path
71         print server_url
72         server = SfaServerProxy(server_url, pkey_path, sscert_path)
73         os.remove(sscert_path)
74        
75         if method == "GetVersion": 
76             print "this is the result of GetVersion:"
77             result = server.GetVersion()
78         else:
79             return HttpResponse(json.dumps({'error' : '-1','msg':'method not supported yet'}), content_type="application/json")
80
81         results[pf] = result
82     return HttpResponse(json.dumps(results), content_type="application/json")