/mandos/release

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

« back to all changes in this revision

Viewing changes to mandos-monitor

  • Committer: Teddy Hogeborn
  • Date: 2013-10-22 19:46:35 UTC
  • mto: (237.7.272 trunk)
  • mto: This revision was merged to the branch mainline in revision 305.
  • Revision ID: teddy@recompile.se-20131022194635-ll6jyg1snrxwe94o
* TODO

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
4
4
# Mandos Monitor - Control and monitor the Mandos server
5
5
6
 
# Copyright © 2009-2012 Teddy Hogeborn
7
 
# Copyright © 2009-2012 Björn Påhlsson
 
6
# Copyright © 2009-2013 Teddy Hogeborn
 
7
# Copyright © 2009-2013 Björn Påhlsson
8
8
9
9
# This program is free software: you can redistribute it and/or modify
10
10
# it under the terms of the GNU General Public License as published by
25
25
 
26
26
from __future__ import (division, absolute_import, print_function,
27
27
                        unicode_literals)
28
 
 
29
 
from future_builtins import *
 
28
try:
 
29
    from future_builtins import *
 
30
except ImportError:
 
31
    pass
30
32
 
31
33
import sys
32
34
import os
38
40
import urwid
39
41
 
40
42
from dbus.mainloop.glib import DBusGMainLoop
41
 
import gobject
 
43
try:
 
44
    import gobject
 
45
except ImportError:
 
46
    from gi.repository import GObject as gobject
42
47
 
43
48
import dbus
44
49
 
45
 
import UserList
46
 
 
47
50
import locale
48
51
 
 
52
if sys.version_info[0] == 2:
 
53
    str = unicode
 
54
 
49
55
locale.setlocale(locale.LC_ALL, '')
50
56
 
51
57
import logging
55
61
domain = 'se.recompile'
56
62
server_interface = domain + '.Mandos'
57
63
client_interface = domain + '.Mandos.Client'
58
 
version = "1.6.0"
59
 
 
60
 
# Always run in monochrome mode
61
 
urwid.curses_display.curses.has_colors = lambda : False
62
 
 
63
 
# Urwid doesn't support blinking, but we want it.  Since we have no
64
 
# use for underline on its own, we make underline also always blink.
65
 
urwid.curses_display.curses.A_UNDERLINE |= (
66
 
    urwid.curses_display.curses.A_BLINK)
 
64
version = "1.6.1"
67
65
 
68
66
def isoformat_to_datetime(iso):
69
67
    "Parse an ISO 8601 date string to a datetime.datetime()"
210
208
           to log in the future. """
211
209
        #self.logger('Client {0} started checker "{1}"'
212
210
        #            .format(self.properties["Name"],
213
 
        #                    unicode(command)))
 
211
        #                    str(command)))
214
212
        pass
215
213
    
216
214
    def got_secret(self):
279
277
                message = "Approval in {0}. (d)eny?"
280
278
            else:
281
279
                message = "Denial in {0}. (a)pprove?"
282
 
            message = message.format(unicode(timer).rsplit(".", 1)[0])
 
280
            message = message.format(str(timer).rsplit(".", 1)[0])
283
281
            self.using_timer(True)
284
282
        elif self.properties["LastCheckerStatus"] != 0:
285
283
            # When checker has failed, show timer until client expires
293
291
                            datetime.timedelta())
294
292
            message = ('A checker has failed! Time until client'
295
293
                       ' gets disabled: {0}'
296
 
                       .format(unicode(timer).rsplit(".", 1)[0]))
 
294
                       .format(str(timer).rsplit(".", 1)[0]))
297
295
            self.using_timer(True)
298
296
        else:
299
297
            message = "enabled"
382
380
    def property_changed(self, property=None, **kwargs):
383
381
        """Call self.update() if old value is not new value.
384
382
        This overrides the method from MandosClientPropertyCache"""
385
 
        property_name = unicode(property)
 
383
        property_name = str(property)
386
384
        old_value = self.properties.get(property_name)
387
385
        super(MandosClientWidget, self).property_changed(
388
386
            property=property, **kwargs)
415
413
                ("normal",
416
414
                 "default", "default", None),
417
415
                ("bold",
418
 
                 "default", "default", "bold"),
 
416
                 "bold", "default", "bold"),
419
417
                ("underline-blink",
420
 
                 "default", "default", "underline"),
 
418
                 "underline,blink", "default", "underline,blink"),
421
419
                ("standout",
422
 
                 "default", "default", "standout"),
 
420
                 "standout", "default", "standout"),
423
421
                ("bold-underline-blink",
424
 
                 "default", "default", ("bold", "underline")),
 
422
                 "bold,underline,blink", "default", "bold,underline,blink"),
425
423
                ("bold-standout",
426
 
                 "default", "default", ("bold", "standout")),
 
424
                 "bold,standout", "default", "bold,standout"),
427
425
                ("underline-blink-standout",
428
 
                 "default", "default", ("underline", "standout")),
 
426
                 "underline,blink,standout", "default",
 
427
                 "underline,blink,standout"),
429
428
                ("bold-underline-blink-standout",
430
 
                 "default", "default", ("bold", "underline",
431
 
                                          "standout")),
 
429
                 "bold,underline,blink,standout", "default",
 
430
                 "bold,underline,blink,standout"),
432
431
                ))
433
432
        
434
433
        if urwid.supports_unicode():
508
507
        self.log_visible = not self.log_visible
509
508
        self.rebuild()
510
509
        #self.log_message("Log visibility changed to: "
511
 
        #                 + unicode(self.log_visible))
 
510
        #                 + str(self.log_visible))
512
511
    
513
512
    def change_log_display(self):
514
513
        """Change type of log display.
554
553
        if path is None:
555
554
            path = client.proxy.object_path
556
555
        self.clients_dict[path] = client
557
 
        self.clients.sort(None, lambda c: c.properties["Name"])
 
556
        self.clients.sort(key=lambda c: c.properties["Name"])
558
557
        self.refresh()
559
558
    
560
559
    def remove_client(self, client, path=None):
562
561
        if path is None:
563
562
            path = client.proxy.object_path
564
563
        del self.clients_dict[path]
565
 
        if not self.clients_dict:
566
 
            # Work around bug in Urwid 0.9.8.3 - if a SimpleListWalker
567
 
            # is completely emptied, we need to recreate it.
568
 
            self.clients = urwid.SimpleListWalker([])
569
 
            self.rebuild()
570
564
        self.refresh()
571
565
    
572
566
    def refresh(self):
588
582
            if not mandos_clients:
589
583
                self.log_message_raw(("bold", "Note: Server has no clients."))
590
584
        except dbus.exceptions.DBusException:
591
 
            self.log_message_raw(("bold", "Note: No Mandos servers running."))
 
585
            self.log_message_raw(("bold", "Note: No Mandos server running."))
592
586
            mandos_clients = dbus.Dictionary()
593
587
        
594
588
        (self.mandos_serv
606
600
                            self.client_not_found,
607
601
                            dbus_interface=server_interface,
608
602
                            byte_arrays=True))
609
 
        for path, client in mandos_clients.iteritems():
 
603
        for path, client in mandos_clients.items():
610
604
            client_proxy_object = self.bus.get_object(self.busname,
611
605
                                                      path)
612
606
            self.add_client(MandosClientWidget(server_proxy_object
724
718
    ui.run()
725
719
except KeyboardInterrupt:
726
720
    ui.screen.stop()
727
 
except Exception, e:
728
 
    ui.log_message(unicode(e))
 
721
except Exception as e:
 
722
    ui.log_message(str(e))
729
723
    ui.screen.stop()
730
724
    raise