1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23
24 import gtk
25
26 from twisted.internet import defer
27
28 from flumotion.common import errors, componentui
29 from flumotion.twisted import flavors
30 from flumotion.component.base.admin_gtk import BaseAdminGtk, BaseAdminGtkNode
31
32 (
33 COLUMN_ID,
34 COLUMN_USER,
35 COLUMN_ADDRESS,
36 ) = range(3)
37
40 self._iters = {}
41 self.model = gtk.ListStore(str, str, str)
42
43 gladeFile = os.path.join('flumotion', 'component', 'bouncers',
44 'bouncer.glade')
45 d = self.loadGladeFile(gladeFile)
46 d.addCallback(self._loadGladeFileCallback)
47 return d
48
50 self.wtree = widgetTree
51
52 self.widget = self.wtree.get_widget('keycards-widget')
53 self.tree = self.wtree.get_widget('keycards-treeview')
54 self.tree.set_model(self.model)
55 self.tree.set_headers_clickable(True)
56 treeselection = self.tree.get_selection()
57 treeselection.set_mode(gtk.SELECTION_MULTIPLE)
58
59 button = self.wtree.get_widget('expire-button')
60 button.connect('clicked', self._expire_clicked, treeselection)
61
62 col = gtk.TreeViewColumn('ID', gtk.CellRendererText(), text=COLUMN_ID)
63 self.tree.append_column(col)
64 col = gtk.TreeViewColumn('user', gtk.CellRendererText(),
65 text=COLUMN_USER)
66 self.tree.append_column(col)
67 col = gtk.TreeViewColumn('address', gtk.CellRendererText(),
68 text=COLUMN_ADDRESS)
69 self.tree.append_column(col)
70
71 d = self.callRemote('getUIState')
72 d.addCallback(self._gotStateCallback)
73 d.addCallback(lambda x: self.widget)
74 return d
75
77
78
79 self._uiState = result
80 keycardsData = result.get('keycards')
81 self.debug('_gotState: got %d keycards' % len(keycardsData))
82
83 for data in keycardsData:
84 self._append(data)
85
86 def append(object, key, value):
87 self._append(value)
88 def remove(object, key, value):
89 self._remove(value)
90
91 self._uiState.addListener(self, append=append, remove=remove)
92
94 (model, pathlist) = treeselection.get_selected_rows()
95 ids = []
96 for path in pathlist:
97 iter = model.get_iter(path)
98 id = model.get_value(iter, COLUMN_ID)
99 ids.append(id)
100
101 self.debug('expiring %d keycards' % len(ids))
102
103 d = defer.succeed(None)
104 for id in ids:
105
106
107 d.addCallback(lambda res, i: self.callRemote('expireKeycardId', i),
108 id)
109
110 return d
111
123
125 id = data['id']
126 iter = self._iters[id]
127 del self._iters[id]
128 self.model.remove(iter)
129
132
139
141 self.nodes['Keycards'].cleanup()
142
143 GUIClass = HTPasswdCryptAdminGtk
144