/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
1
import dbus
2
3
BUS_NAME = 'org.gnome.seahorse'
4
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
5
CRYPTO_INTERFACE = 'org.gnome.seahorse.CryptoService'
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
6
CRYPTO_PATH = '/org/gnome/seahorse/crypto'
7
8
OPENPGP_INTERFACE = 'org.gnome.seahorse.Keys'
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
9
OPENPGP_PATH = '/org/gnome/seahorse/keys/openpgp'
10
11
KEY_TYPE_OPENPGP = 'openpgp'
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
12
KEY_TYPE_SSH = 'ssh'
13
14
bus = dbus.SessionBus()
15
crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH), 
16
                        CRYPTO_INTERFACE)
17
openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
18
                         OPENPGP_INTERFACE)
399.3.25 by Daniel Schierbeck
Added discovery of unknown keys.
19
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
20
FLAG_VALID = 0x0001
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
21
FLAG_CAN_ENCRYPT = 0x0002
22
FLAG_CAN_SIGN = 0x0004
23
FLAG_EXPIRED = 0x0100
24
FLAG_REVOKED = 0x0200
25
FLAG_DISABLED = 0x0400
26
FLAG_TRUSTED = 0x1000
27
28
TRUST_NEVER = -1
399.3.6 by Daniel Schierbeck
Added support for key trust.
29
TRUST_UNKNOWN = 0
30
TRUST_MARGINAL = 1
31
TRUST_FULL = 5
32
TRUST_ULTIMATE = 10
33
34
LOCATION_MISSING = 10
399.3.24 by Daniel Schierbeck
Added key location getter.
35
LOCATION_SEARCHING = 20
36
LOCATION_REMOTE = 50
37
LOCATION_LOCAL = 100
38
39
def discover(*key_ids):
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
40
    return openpgp.DiscoverKeys(key_ids, 0)
41
42
def verify(crypttext):
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
43
    (cleartext, key) = crypto.VerifyText(KEY_TYPE_OPENPGP, 1, crypttext)
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
44
45
    return Key(key)
46
47
class Key:
48
49
    def __init__(self, key):
50
        self.key = key
51
        self.fingerprint = None
52
        self.trust = None
53
        self.flags = None
54
        self.display_name = None
399.3.10 by Daniel Schierbeck
Added getter for display name field.
55
        self.location = None
399.3.24 by Daniel Schierbeck
Added key location getter.
56
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
57
        discover(key)
399.3.25 by Daniel Schierbeck
Added discovery of unknown keys.
58
59
    def get_field(self, field, default=None):
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
60
        (valid, value) = openpgp.GetKeyField(self.key, field)
61
62
        if valid:
63
            return value
64
        else:
65
            return default
66
    
67
    def get_flags(self):
68
        if self.flags is None:
69
            self.flags = self.get_field('flags', 0)
70
71
        return self.flags
72
73
    def get_display_name(self):
399.3.10 by Daniel Schierbeck
Added getter for display name field.
74
        if self.display_name is None:
75
            self.display_name = self.get_field('display-name')
76
77
        return self.display_name
78
79
    def get_id(self):
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
80
        return self.key.split(':')[1][8:]
81
82
    def get_fingerprint(self):
83
        if self.fingerprint is None:
84
            self.fingerprint = self.get_field('fingerprint')
85
86
        return self.fingerprint
87
88
    def get_trust(self):
89
        if self.trust is None:
90
            self.trust = self.get_field('trust', TRUST_UNKNOWN)
91
92
        return self.trust
93
94
    def get_location(self):
399.3.24 by Daniel Schierbeck
Added key location getter.
95
        if self.location is None:
96
            self.location = self.get_field('location', LOCATION_MISSING)
97
98
        return self.location
99
100
    def is_available(self):
399.3.11 by Daniel Schierbeck
Fixed error with unavailable keys.
101
        return self.key != ""
102
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
103
    def is_trusted(self):
104
        return self.get_flags() & FLAG_TRUSTED
105