/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
399.3.28 by Daniel Schierbeck
Added license and copyright information to crypt module.
1
# This program is free software; you can redistribute it and/or modify
2
# it under the terms of the GNU General Public License as published by
3
# the Free Software Foundation; either version 2 of the License, or
4
# (at your option) any later version.
5
6
# This program is distributed in the hope that it will be useful,
7
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9
# GNU General Public License for more details.
10
11
# You should have received a copy of the GNU General Public License
12
# along with this program; if not, write to the Free Software
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14
399.3.32 by Daniel Schierbeck
Fixed encoding error.
15
__copyright__ = 'Copyright (C) 2008 Daniel Schierbeck'
399.3.28 by Daniel Schierbeck
Added license and copyright information to crypt module.
16
__author__ = 'Daniel Schierbeck <daniel.schierbeck@gmail.com>'
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
17
18
import dbus
19
20
BUS_NAME = 'org.gnome.seahorse'
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
21
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
22
CRYPTO_INTERFACE = 'org.gnome.seahorse.CryptoService'
23
CRYPTO_PATH = '/org/gnome/seahorse/crypto'
24
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
25
OPENPGP_INTERFACE = 'org.gnome.seahorse.Keys'
26
OPENPGP_PATH = '/org/gnome/seahorse/keys/openpgp'
27
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
28
KEY_TYPE_OPENPGP = 'openpgp'
29
KEY_TYPE_SSH = 'ssh'
30
31
bus = dbus.SessionBus()
399.3.27 by Daniel Schierbeck
Only show Signature tab if DBus and Seahorse are installed.
32
487.4.4 by Sabin Iacob (m0n5t3r)
gracefully handle old versions of dbus-python (it appears that DBusException.get_bus_name was introduced in 0.81.1)
33
if hasattr(bus, 'list_activatable_names'):
34
    bus_names = bus.list_activatable_names()
35
else:
36
    bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
37
    bus_names = bus_object.ListNames(dbus_interface='org.freedesktop.DBus')
38
39
if BUS_NAME not in bus_names:
40
    raise ImportError
41
42
crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH), 
43
                        CRYPTO_INTERFACE)
44
openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
45
                         OPENPGP_INTERFACE)
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
46
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
47
FLAG_VALID = 0x0001
48
FLAG_CAN_ENCRYPT = 0x0002
49
FLAG_CAN_SIGN = 0x0004
50
FLAG_EXPIRED = 0x0100
51
FLAG_REVOKED = 0x0200
52
FLAG_DISABLED = 0x0400
53
FLAG_TRUSTED = 0x1000
54
399.3.6 by Daniel Schierbeck
Added support for key trust.
55
TRUST_NEVER = -1
56
TRUST_UNKNOWN = 0
57
TRUST_MARGINAL = 1
58
TRUST_FULL = 5
59
TRUST_ULTIMATE = 10
60
399.3.24 by Daniel Schierbeck
Added key location getter.
61
LOCATION_MISSING = 10
62
LOCATION_SEARCHING = 20
63
LOCATION_REMOTE = 50
64
LOCATION_LOCAL = 100
65
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
66
keyset = dict()
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
67
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
68
def verify(crypttext):
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
69
    (cleartext, key) = crypto.VerifyText(KEY_TYPE_OPENPGP, 1, crypttext)
70
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
71
    if key != "":
72
        if key not in keyset:
73
            keyset[key] = Key(key)
74
75
        return keyset[key]
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
76
77
class Key:
78
79
    def __init__(self, key):
80
        self.key = key
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
81
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
82
        (keys, unmatched) = openpgp.MatchKeys([self.get_id()], 0x00000010)
83
        self.available = (key in keys)
399.3.25 by Daniel Schierbeck
Added discovery of unknown keys.
84
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
85
        if self.available:
86
            fields = openpgp.GetKeyFields(key, ['fingerprint', 'trust', 'flags', 'display-name', 'location'])
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
87
        else:
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
88
            fields = dict()
89
90
        self.fingerprint = fields.get('fingerprint', 'N/A')
91
        self.trust = fields.get('trust', TRUST_UNKNOWN)
92
        self.flags = fields.get('flags', 0)
93
        self.display_name = fields.get('display-name', '')
94
        self.location = fields.get('location', LOCATION_MISSING)
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
95
    
96
    def get_flags(self):
97
        return self.flags
98
399.3.10 by Daniel Schierbeck
Added getter for display name field.
99
    def get_display_name(self):
100
        return self.display_name
101
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
102
    def get_id(self):
103
        return self.key.split(':')[1][8:]
104
105
    def get_fingerprint(self):
106
        return self.fingerprint
107
108
    def get_trust(self):
109
        return self.trust
110
399.3.24 by Daniel Schierbeck
Added key location getter.
111
    def get_location(self):
112
        return self.location
113
399.3.11 by Daniel Schierbeck
Fixed error with unavailable keys.
114
    def is_available(self):
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
115
        return self.available
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
116
117
    def is_trusted(self):
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
118
        return self.flags & FLAG_TRUSTED != 0