use self.get_auth_info
[sfa.git] / sfa / util / geniticket.py
1 # tickets.py
2 #
3 # implements GENI tickets
4 #
5
6 ### $Id$
7 ### $URL$
8
9 import xmlrpclib
10
11 from sfa.trust.certificate import Certificate
12 from sfa.trust.rights import *
13 from sfa.trust.gid import *
14
15 # Ticket is tuple:
16 #   (gidCaller, gidObject, attributes, rspec, delegate)
17 #
18 #    gidCaller = GID of the caller performing the operation
19 #    gidObject = GID of the slice
20 #    attributes = slice attributes (keys, vref, instantiation, etc)
21 #    rspec = resources
22
23 class Ticket(Certificate):
24     gidCaller = None
25     gidObject = None
26     attributes = {}
27     rspec = {}
28     delegate = False
29
30     def __init__(self, create=False, subject=None, string=None, filename=None):
31         Certificate.__init__(self, create, subject, string, filename)
32
33     def set_gid_caller(self, gid):
34         self.gidCaller = gid
35
36     def get_gid_caller(self):
37         if not self.gidCaller:
38             self.decode()
39         return self.gidCaller
40
41     def set_gid_object(self, gid):
42         self.gidObject = gid
43
44     def get_gid_object(self):
45         if not self.gidObject:
46             self.decode()
47         return self.gidObject
48
49     def set_attributes(self, gid):
50         self.attributes = gid
51
52     def get_attributes(self):
53         if not self.attributes:
54             self.decode()
55         return self.attributes
56
57     def set_rspec(self, gid):
58         self.rspec = gid
59
60     def get_rspec(self):
61         if not self.rspec:
62             self.decode()
63         return self.rspec
64
65     def set_delegate(self, delegate):
66         self.delegate = delegate
67
68     def get_delegate(self):
69         if not self.delegate:
70             self.decode()
71         return self.delegate
72
73     def encode(self):
74         dict = {"gidCaller": None,
75                 "gidObject": None,
76                 "attributes": self.attributes,
77                 "rspec": self.rspec,
78                 "delegate": self.delegate}
79         if self.gidCaller:
80             dict["gidCaller"] = self.gidCaller.save_to_string(save_parents=True)
81         if self.gidObject:
82             dict["gidObject"] = self.gidObject.save_to_string(save_parents=True)
83         str = xmlrpclib.dumps((dict,), allow_none=True)
84         self.set_data(str)
85
86     def decode(self):
87         data = self.get_data()
88         if data:
89             dict = xmlrpclib.loads(self.get_data())[0][0]
90         else:
91             dict = {}
92
93         self.attributes = dict.get("attributes", {})
94         self.rspec = dict.get("rspec", {})
95         self.delegate = dict.get("delegate", False)
96
97         gidCallerStr = dict.get("gidCaller", None)
98         if gidCallerStr:
99             self.gidCaller = GID(string=gidCallerStr)
100         else:
101             self.gidCaller = None
102
103         gidObjectStr = dict.get("gidObject", None)
104         if gidObjectStr:
105             self.gidObject = GID(string=gidObjectStr)
106         else:
107             self.gidObject = None
108
109     def dump(self, dump_parents=False):
110         print "TICKET", self.get_subject()
111
112         print "  gidCaller:"
113         gidCaller = self.get_gid_caller()
114         if gidCaller:
115             gidCaller.dump(8, dump_parents)
116
117         print "  gidObject:"
118         gidObject = self.get_gid_object()
119         if gidObject:
120             gidObject.dump(8, dump_parents)
121
122         print "  attributes:"
123         for attrname in self.get_attributes().keys():
124             print "        ", attrname, self.get_attributes()[attrname]
125
126         print "       rspec:"
127         for attrname in self.get_rspec().keys():
128             print "        ", attrname, self.get_rspec()[attrname]
129
130         if self.parent and dump_parents:
131            print "PARENT",
132            self.parent.dump(dump_parents)