22
22
# Contact the authors at <mandos@fukt.bsnet.se>.
25
from __future__ import (division, absolute_import, print_function,
25
from __future__ import division, absolute_import, print_function, unicode_literals
87
86
self.proxy = proxy_object # Mandos Client proxy object
89
88
self.properties = dict()
90
self.property_changed_match = (
91
self.proxy.connect_to_signal("PropertyChanged",
92
self.property_changed,
89
self.proxy.connect_to_signal("PropertyChanged",
90
self.property_changed,
96
94
self.properties.update(
97
95
self.proxy.GetAll(client_interface,
98
96
dbus_interface = dbus.PROPERTIES_IFACE))
100
#XXX This breaks good super behaviour
98
#XXX This break good super behaviour!
101
99
# super(MandosClientPropertyCache, self).__init__(
102
100
# *args, **kwargs)
108
106
# Update properties dict with new value
109
107
self.properties[property] = value
111
def delete(self, *args, **kwargs):
112
self.property_changed_match.remove()
113
super(MandosClientPropertyCache, self).__init__(
117
110
class MandosClientWidget(urwid.FlowWidget, MandosClientPropertyCache):
161
154
if self.need_approval:
162
155
self.using_timer(True)
164
self.match_objects = (
165
self.proxy.connect_to_signal("CheckerCompleted",
166
self.checker_completed,
169
self.proxy.connect_to_signal("CheckerStarted",
170
self.checker_started,
173
self.proxy.connect_to_signal("GotSecret",
177
self.proxy.connect_to_signal("NeedApproval",
181
self.proxy.connect_to_signal("Rejected",
185
#self.logger('Created client %s' % (self.properties["Name"]))
157
self.proxy.connect_to_signal("CheckerCompleted",
158
self.checker_completed,
161
self.proxy.connect_to_signal("CheckerStarted",
162
self.checker_started,
165
self.proxy.connect_to_signal("GotSecret",
169
self.proxy.connect_to_signal("NeedApproval",
173
self.proxy.connect_to_signal("Rejected",
187
178
def property_changed(self, property=None, value=None):
188
179
super(self, MandosClientWidget).property_changed(property,
351
342
return True # Keep calling this
353
def delete(self, *args, **kwargs):
354
345
if self._update_timer_callback_tag is not None:
355
346
gobject.source_remove(self._update_timer_callback_tag)
356
347
self._update_timer_callback_tag = None
357
for match in self.match_objects:
359
self.match_objects = ()
360
348
if self.delete_hook is not None:
361
349
self.delete_hook(self)
362
return super(MandosClientWidget, self).delete(*args, **kwargs)
364
351
def render(self, maxcolrow, focus=False):
365
352
"""Render differently if we have focus.
372
359
This overrides the method from urwid.FlowWidget"""
374
self.proxy.Enable(dbus_interface = client_interface,
361
self.proxy.Enable(dbus_interface = client_interface)
377
self.proxy.Disable(dbus_interface = client_interface,
363
self.proxy.Disable(dbus_interface = client_interface)
380
365
self.proxy.Approve(dbus.Boolean(True, variant_level=1),
381
dbus_interface = client_interface,
366
dbus_interface = client_interface)
384
368
self.proxy.Approve(dbus.Boolean(False, variant_level=1),
385
dbus_interface = client_interface,
369
dbus_interface = client_interface)
387
370
elif key == "R" or key == "_" or key == "ctrl k":
388
371
self.server_proxy_object.RemoveClient(self.proxy
392
self.proxy.StartChecker(dbus_interface = client_interface,
374
self.proxy.StartChecker(dbus_interface = client_interface)
395
self.proxy.StopChecker(dbus_interface = client_interface,
376
self.proxy.StopChecker(dbus_interface = client_interface)
398
self.proxy.CheckedOK(dbus_interface = client_interface,
378
self.proxy.CheckedOK(dbus_interface = client_interface)
401
380
# elif key == "p" or key == "=":
402
381
# self.proxy.pause()
593
572
#self.log_message("Wrap mode: " + self.log_wrap)
595
574
def find_and_remove_client(self, path, name):
596
"""Find a client by its object path and remove it.
575
"""Find an client from its object path and remove it.
598
577
This is connected to the ClientRemoved signal from the
599
578
Mandos server object."""
601
580
client = self.clients_dict[path]
604
self.log_message("Unknown client %r (%r) removed", name,
584
self.remove_client(client, path)
609
586
def add_new_client(self, path):
610
587
client_proxy_object = self.bus.get_object(self.busname, path)