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