/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to mandos-monitor

  • Committer: Teddy Hogeborn
  • Date: 2011-03-08 20:19:46 UTC
  • mfrom: (237.4.14 release)
  • Revision ID: teddy@fukt.bsnet.se-20110308201946-xbwvwbexb5qh0wmv
Merge from release branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# Contact the authors at <mandos@fukt.bsnet.se>.
23
23
24
24
 
25
 
from __future__ import (division, absolute_import, print_function,
26
 
                        unicode_literals)
 
25
from __future__ import division, absolute_import, print_function, unicode_literals
27
26
 
28
27
import sys
29
28
import os
52
51
domain = 'se.bsnet.fukt'
53
52
server_interface = domain + '.Mandos'
54
53
client_interface = domain + '.Mandos.Client'
55
 
version = "1.3.1"
 
54
version = "1.3.0"
56
55
 
57
56
# Always run in monochrome mode
58
57
urwid.curses_display.curses.has_colors = lambda : False
87
86
        self.proxy = proxy_object # Mandos Client proxy object
88
87
        
89
88
        self.properties = dict()
90
 
        self.property_changed_match = (
91
 
            self.proxy.connect_to_signal("PropertyChanged",
92
 
                                         self.property_changed,
93
 
                                         client_interface,
94
 
                                         byte_arrays=True))
 
89
        self.proxy.connect_to_signal("PropertyChanged",
 
90
                                     self.property_changed,
 
91
                                     client_interface,
 
92
                                     byte_arrays=True)
95
93
        
96
94
        self.properties.update(
97
95
            self.proxy.GetAll(client_interface,
98
96
                              dbus_interface = dbus.PROPERTIES_IFACE))
99
97
 
100
 
        #XXX This breaks good super behaviour
 
98
        #XXX This break good super behaviour!
101
99
#        super(MandosClientPropertyCache, self).__init__(
102
100
#            *args, **kwargs)
103
101
    
107
105
        """
108
106
        # Update properties dict with new value
109
107
        self.properties[property] = value
110
 
    
111
 
    def delete(self, *args, **kwargs):
112
 
        self.property_changed_match.remove()
113
 
        super(MandosClientPropertyCache, self).__init__(
114
 
            *args, **kwargs)
115
108
 
116
109
 
117
110
class MandosClientWidget(urwid.FlowWidget, MandosClientPropertyCache):
161
154
        if self.need_approval:
162
155
            self.using_timer(True)
163
156
        
164
 
        self.match_objects = (
165
 
            self.proxy.connect_to_signal("CheckerCompleted",
166
 
                                         self.checker_completed,
167
 
                                         client_interface,
168
 
                                         byte_arrays=True),
169
 
            self.proxy.connect_to_signal("CheckerStarted",
170
 
                                         self.checker_started,
171
 
                                         client_interface,
172
 
                                         byte_arrays=True),
173
 
            self.proxy.connect_to_signal("GotSecret",
174
 
                                         self.got_secret,
175
 
                                         client_interface,
176
 
                                         byte_arrays=True),
177
 
            self.proxy.connect_to_signal("NeedApproval",
178
 
                                         self.need_approval,
179
 
                                         client_interface,
180
 
                                         byte_arrays=True),
181
 
            self.proxy.connect_to_signal("Rejected",
182
 
                                         self.rejected,
183
 
                                         client_interface,
184
 
                                         byte_arrays=True))
185
 
        #self.logger('Created client %s' % (self.properties["Name"]))
 
157
        self.proxy.connect_to_signal("CheckerCompleted",
 
158
                                     self.checker_completed,
 
159
                                     client_interface,
 
160
                                     byte_arrays=True)
 
161
        self.proxy.connect_to_signal("CheckerStarted",
 
162
                                     self.checker_started,
 
163
                                     client_interface,
 
164
                                     byte_arrays=True)
 
165
        self.proxy.connect_to_signal("GotSecret",
 
166
                                     self.got_secret,
 
167
                                     client_interface,
 
168
                                     byte_arrays=True)
 
169
        self.proxy.connect_to_signal("NeedApproval",
 
170
                                     self.need_approval,
 
171
                                     client_interface,
 
172
                                     byte_arrays=True)
 
173
        self.proxy.connect_to_signal("Rejected",
 
174
                                     self.rejected,
 
175
                                     client_interface,
 
176
                                     byte_arrays=True)
186
177
    
187
178
    def property_changed(self, property=None, value=None):
188
179
        super(self, MandosClientWidget).property_changed(property,
350
341
        self.update()
351
342
        return True             # Keep calling this
352
343
    
353
 
    def delete(self, *args, **kwargs):
 
344
    def delete(self):
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:
358
 
            match.remove()
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)
363
350
    
364
351
    def render(self, maxcolrow, focus=False):
365
352
        """Render differently if we have focus.
371
358
        """Handle keys.
372
359
        This overrides the method from urwid.FlowWidget"""
373
360
        if key == "+":
374
 
            self.proxy.Enable(dbus_interface = client_interface,
375
 
                              ignore_reply=True)
 
361
            self.proxy.Enable(dbus_interface = client_interface)
376
362
        elif key == "-":
377
 
            self.proxy.Disable(dbus_interface = client_interface,
378
 
                               ignore_reply=True)
 
363
            self.proxy.Disable(dbus_interface = client_interface)
379
364
        elif key == "a":
380
365
            self.proxy.Approve(dbus.Boolean(True, variant_level=1),
381
 
                               dbus_interface = client_interface,
382
 
                               ignore_reply=True)
 
366
                               dbus_interface = client_interface)
383
367
        elif key == "d":
384
368
            self.proxy.Approve(dbus.Boolean(False, variant_level=1),
385
 
                                  dbus_interface = client_interface,
386
 
                               ignore_reply=True)
 
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
389
 
                                                  .object_path,
390
 
                                                  ignore_reply=True)
 
372
                                                  .object_path)
391
373
        elif key == "s":
392
 
            self.proxy.StartChecker(dbus_interface = client_interface,
393
 
                                    ignore_reply=True)
 
374
            self.proxy.StartChecker(dbus_interface = client_interface)
394
375
        elif key == "S":
395
 
            self.proxy.StopChecker(dbus_interface = client_interface,
396
 
                                   ignore_reply=True)
 
376
            self.proxy.StopChecker(dbus_interface = client_interface)
397
377
        elif key == "C":
398
 
            self.proxy.CheckedOK(dbus_interface = client_interface,
399
 
                                 ignore_reply=True)
 
378
            self.proxy.CheckedOK(dbus_interface = client_interface)
400
379
        # xxx
401
380
#         elif key == "p" or key == "=":
402
381
#             self.proxy.pause()
593
572
        #self.log_message("Wrap mode: " + self.log_wrap)
594
573
    
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.
597
576
        
598
577
        This is connected to the ClientRemoved signal from the
599
578
        Mandos server object."""
601
580
            client = self.clients_dict[path]
602
581
        except KeyError:
603
582
            # not found?
604
 
            self.log_message("Unknown client %r (%r) removed", name,
605
 
                             path)
606
583
            return
607
 
        client.delete()
 
584
        self.remove_client(client, path)
608
585
    
609
586
    def add_new_client(self, path):
610
587
        client_proxy_object = self.bus.get_object(self.busname, path)