/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: 2012-11-14 21:03:24 UTC
  • Revision ID: teddy@recompile.se-20121114210324-n7m7k0ki2ncmje3a
* mandos-ctl (string_to_delta): Try to parse RFC 3339 duration before
                                anything else.  This also minimizes
                                the changes from the last release.
  (PGPEngine): Use straight subprocess.Popen() to call "gpg".
* mandos-monitor (UserInterface.run): Fix grammar.

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-2013 Teddy Hogeborn
7
 
# Copyright © 2009-2013 Björn Påhlsson
 
6
# Copyright © 2009-2012 Teddy Hogeborn
 
7
# Copyright © 2009-2012 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
 
try:
29
 
    from future_builtins import *
30
 
except ImportError:
31
 
    pass
 
28
 
 
29
from future_builtins import *
32
30
 
33
31
import sys
34
32
import os
40
38
import urwid
41
39
 
42
40
from dbus.mainloop.glib import DBusGMainLoop
43
 
try:
44
 
    import gobject
45
 
except ImportError:
46
 
    from gi.repository import GObject as gobject
 
41
import gobject
47
42
 
48
43
import dbus
49
44
 
 
45
import UserList
 
46
 
50
47
import locale
51
48
 
52
 
if sys.version_info[0] == 2:
53
 
    str = unicode
54
 
 
55
49
locale.setlocale(locale.LC_ALL, '')
56
50
 
57
51
import logging
61
55
domain = 'se.recompile'
62
56
server_interface = domain + '.Mandos'
63
57
client_interface = domain + '.Mandos.Client'
64
 
version = "1.6.2"
 
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)
65
67
 
66
68
def isoformat_to_datetime(iso):
67
69
    "Parse an ISO 8601 date string to a datetime.datetime()"
208
210
           to log in the future. """
209
211
        #self.logger('Client {0} started checker "{1}"'
210
212
        #            .format(self.properties["Name"],
211
 
        #                    str(command)))
 
213
        #                    unicode(command)))
212
214
        pass
213
215
    
214
216
    def got_secret(self):
277
279
                message = "Approval in {0}. (d)eny?"
278
280
            else:
279
281
                message = "Denial in {0}. (a)pprove?"
280
 
            message = message.format(str(timer).rsplit(".", 1)[0])
 
282
            message = message.format(unicode(timer).rsplit(".", 1)[0])
281
283
            self.using_timer(True)
282
284
        elif self.properties["LastCheckerStatus"] != 0:
283
285
            # When checker has failed, show timer until client expires
291
293
                            datetime.timedelta())
292
294
            message = ('A checker has failed! Time until client'
293
295
                       ' gets disabled: {0}'
294
 
                       .format(str(timer).rsplit(".", 1)[0]))
 
296
                       .format(unicode(timer).rsplit(".", 1)[0]))
295
297
            self.using_timer(True)
296
298
        else:
297
299
            message = "enabled"
380
382
    def property_changed(self, property=None, **kwargs):
381
383
        """Call self.update() if old value is not new value.
382
384
        This overrides the method from MandosClientPropertyCache"""
383
 
        property_name = str(property)
 
385
        property_name = unicode(property)
384
386
        old_value = self.properties.get(property_name)
385
387
        super(MandosClientWidget, self).property_changed(
386
388
            property=property, **kwargs)
413
415
                ("normal",
414
416
                 "default", "default", None),
415
417
                ("bold",
416
 
                 "bold", "default", "bold"),
 
418
                 "default", "default", "bold"),
417
419
                ("underline-blink",
418
 
                 "underline,blink", "default", "underline,blink"),
 
420
                 "default", "default", "underline"),
419
421
                ("standout",
420
 
                 "standout", "default", "standout"),
 
422
                 "default", "default", "standout"),
421
423
                ("bold-underline-blink",
422
 
                 "bold,underline,blink", "default", "bold,underline,blink"),
 
424
                 "default", "default", ("bold", "underline")),
423
425
                ("bold-standout",
424
 
                 "bold,standout", "default", "bold,standout"),
 
426
                 "default", "default", ("bold", "standout")),
425
427
                ("underline-blink-standout",
426
 
                 "underline,blink,standout", "default",
427
 
                 "underline,blink,standout"),
 
428
                 "default", "default", ("underline", "standout")),
428
429
                ("bold-underline-blink-standout",
429
 
                 "bold,underline,blink,standout", "default",
430
 
                 "bold,underline,blink,standout"),
 
430
                 "default", "default", ("bold", "underline",
 
431
                                          "standout")),
431
432
                ))
432
433
        
433
434
        if urwid.supports_unicode():
507
508
        self.log_visible = not self.log_visible
508
509
        self.rebuild()
509
510
        #self.log_message("Log visibility changed to: "
510
 
        #                 + str(self.log_visible))
 
511
        #                 + unicode(self.log_visible))
511
512
    
512
513
    def change_log_display(self):
513
514
        """Change type of log display.
553
554
        if path is None:
554
555
            path = client.proxy.object_path
555
556
        self.clients_dict[path] = client
556
 
        self.clients.sort(key=lambda c: c.properties["Name"])
 
557
        self.clients.sort(None, lambda c: c.properties["Name"])
557
558
        self.refresh()
558
559
    
559
560
    def remove_client(self, client, path=None):
561
562
        if path is None:
562
563
            path = client.proxy.object_path
563
564
        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()
564
570
        self.refresh()
565
571
    
566
572
    def refresh(self):
600
606
                            self.client_not_found,
601
607
                            dbus_interface=server_interface,
602
608
                            byte_arrays=True))
603
 
        for path, client in mandos_clients.items():
 
609
        for path, client in mandos_clients.iteritems():
604
610
            client_proxy_object = self.bus.get_object(self.busname,
605
611
                                                      path)
606
612
            self.add_client(MandosClientWidget(server_proxy_object
718
724
    ui.run()
719
725
except KeyboardInterrupt:
720
726
    ui.screen.stop()
721
 
except Exception as e:
722
 
    ui.log_message(str(e))
 
727
except Exception, e:
 
728
    ui.log_message(unicode(e))
723
729
    ui.screen.stop()
724
730
    raise