GPG is now optional

This commit is contained in:
Yann Leboulanger 2004-10-16 09:37:32 +00:00
parent c4f47e9de6
commit 2e6c33719c
3 changed files with 171 additions and 159 deletions

View file

@ -22,8 +22,6 @@ import sys, os, time, string, logging
import common.hub, common.optparser import common.hub, common.optparser
import common.jabber import common.jabber
import socket, select, pickle import socket, select, pickle
import GnuPGInterface
from common import i18n from common import i18n
_ = i18n._ _ = i18n._
@ -48,6 +46,12 @@ def XMLunescape(txt):
txt = txt.replace("&", "&") txt = txt.replace("&", "&")
return txt return txt
USE_GPG = 1
try:
import GnuPGInterface
except:
USE_GPG = 0
else:
class MyGnuPG(GnuPGInterface.GnuPG): class MyGnuPG(GnuPGInterface.GnuPG):
def __init__(self): def __init__(self):
GnuPGInterface.GnuPG.__init__(self) GnuPGInterface.GnuPG.__init__(self)
@ -220,10 +224,12 @@ class GajimCore:
#connexions {con: name, ...} #connexions {con: name, ...}
self.connexions = {} self.connexions = {}
self.gpg = {} self.gpg = {}
if USE_GPG:
self.gpg_common = MyGnuPG() self.gpg_common = MyGnuPG()
for a in self.accounts: for a in self.accounts:
self.connected[a] = 0 #0:offline, 1:online, 2:away, self.connected[a] = 0 #0:offline, 1:online, 2:away,
#3:xa, 4:dnd, 5:invisible #3:xa, 4:dnd, 5:invisible
if USE_GPG:
self.gpg[a] = MyGnuPG() self.gpg[a] = MyGnuPG()
self.myVCardID = [] self.myVCardID = []
self.loadPlugins(self.cfgParser.tab['Core']['modules']) self.loadPlugins(self.cfgParser.tab['Core']['modules'])
@ -344,7 +350,7 @@ class GajimCore:
if xtag.getNamespace() == common.jabber.NS_XENCRYPTED: if xtag.getNamespace() == common.jabber.NS_XENCRYPTED:
encTag = xtag encTag = xtag
break break
if encTag: if encTag and USE_GPG:
#decrypt #decrypt
encmsg = encTag.getData() encmsg = encTag.getData()
keyID = '' keyID = ''
@ -382,7 +388,7 @@ class GajimCore:
if xtag.getNamespace() == common.jabber.NS_XSIGNED: if xtag.getNamespace() == common.jabber.NS_XSIGNED:
sigTag = xtag sigTag = xtag
break break
if sigTag: if sigTag and USE_GPG:
#verify #verify
sigmsg = sigTag.getData() sigmsg = sigTag.getData()
keyID = self.gpg[self.connexions[con]].verify(status, sigmsg) keyID = self.gpg[self.connexions[con]].verify(status, sigmsg)
@ -523,9 +529,8 @@ class GajimCore:
self.hub.sendPlugin('WARNING', None, _("Couldn't connect to %s : %s") \ self.hub.sendPlugin('WARNING', None, _("Couldn't connect to %s : %s") \
% (hostname, e)) % (hostname, e))
return 0 return 0
except: # except:
sys.exc_info()[1][0] # print sys.exc_info()[1]
sys.exc_info()[1][1]
else: else:
log.debug("Connected to server") log.debug("Connected to server")
@ -567,7 +572,7 @@ class GajimCore:
def request_infos(self, account, con, jid): def request_infos(self, account, con, jid):
identities, features = con.discoverInfo(jid) identities, features = con.discoverInfo(jid)
if not identities: if not identities:
identities, features, items = con.browseAgent(jid) identities, features, items = con.browseAgents(jid)
else: else:
items = con.discoverItems(jid) items = con.discoverItems(jid)
self.hub.sendPlugin('AGENT_INFO', account, (jid, identities, features, items)) self.hub.sendPlugin('AGENT_INFO', account, (jid, identities, features, items))
@ -619,11 +624,12 @@ class GajimCore:
for item in ev[2][2].keys(): for item in ev[2][2].keys():
if not config.has_key(item): if not config.has_key(item):
config[item] = ev[2][2][item] config[item] = ev[2][2][item]
self.hub.sendPlugin('CONFIG', None, (ev[2][0], config))
else: else:
self.cfgParser.tab[ev[2][1]] = ev[2][2] config = ev[2][2]
self.cfgParser.tab[ev[2][1]] = config
self.cfgParser.writeCfgFile() self.cfgParser.writeCfgFile()
self.hub.sendPlugin('CONFIG', None, (ev[2][0], ev[2][2])) config['usegpg'] = USE_GPG
self.hub.sendPlugin('CONFIG', None, (ev[2][0], config))
#('CONFIG', account, (section, config)) #('CONFIG', account, (section, config))
elif ev[0] == 'CONFIG': elif ev[0] == 'CONFIG':
if ev[2][0] == 'accounts': if ev[2][0] == 'accounts':
@ -642,7 +648,7 @@ class GajimCore:
self.cfgParser.tab[a] = ev[2][1][a] self.cfgParser.tab[a] = ev[2][1][a]
if not a in self.connected.keys(): if not a in self.connected.keys():
self.connected[a] = 0 self.connected[a] = 0
if not self.gpg.has_key(a): if not self.gpg.has_key(a) and USE_GPG:
self.gpg[a] = MyGnuPG() self.gpg[a] = MyGnuPG()
else: else:
self.cfgParser.tab[ev[2][0]] = ev[2][1] self.cfgParser.tab[ev[2][0]] = ev[2][1]
@ -658,7 +664,7 @@ class GajimCore:
keyID = '' keyID = ''
if self.cfgParser.tab[ev[1]].has_key("keyid"): if self.cfgParser.tab[ev[1]].has_key("keyid"):
keyID = self.cfgParser.tab[ev[1]]["keyid"] keyID = self.cfgParser.tab[ev[1]]["keyid"]
if keyID: if keyID and USE_GPG:
signed = self.gpg[ev[1]].sign(msg, keyID) signed = self.gpg[ev[1]].sign(msg, keyID)
if signed == 'BAD_PASSPHRASE': if signed == 'BAD_PASSPHRASE':
signed = '' signed = ''
@ -709,7 +715,7 @@ class GajimCore:
elif ev[0] == 'MSG': elif ev[0] == 'MSG':
msgtxt = ev[2][1] msgtxt = ev[2][1]
msgenc = '' msgenc = ''
if ev[2][2]: if ev[2][2] and USE_GPG:
#encrypt #encrypt
msgenc = self.gpg[ev[1]].encrypt(ev[2][1], [ev[2][2]]) msgenc = self.gpg[ev[1]].encrypt(ev[2][1], [ev[2][2]])
if msgenc: msgtxt = '[this message is encrypted]' if msgenc: msgtxt = '[this message is encrypted]'
@ -766,7 +772,6 @@ class GajimCore:
groups=ev[2][2]) groups=ev[2][2])
#('REQ_AGENTS', account, ()) #('REQ_AGENTS', account, ())
elif ev[0] == 'REQ_AGENTS': elif ev[0] == 'REQ_AGENTS':
# agents = con.requestAgents()
#do we need that ? #do we need that ?
#con.discoverInfo('jabber.lagaule.org') #con.discoverInfo('jabber.lagaule.org')
agents = con.discoverItems('jabber.lagaule.org') agents = con.discoverItems('jabber.lagaule.org')
@ -810,6 +815,7 @@ class GajimCore:
elif ev[0] == 'ACC_CHG': elif ev[0] == 'ACC_CHG':
self.connected[ev[2]] = self.connected[ev[1]] self.connected[ev[2]] = self.connected[ev[1]]
del self.connected[ev[1]] del self.connected[ev[1]]
if USE_GPG:
self.gpg[ev[2]] = self.gpg[ev[1]] self.gpg[ev[2]] = self.gpg[ev[1]]
del self.gpg[ev[1]] del self.gpg[ev[1]]
if con: if con:
@ -891,8 +897,10 @@ class GajimCore:
'available', show=ev[2][2], status = ev[2][3])) 'available', show=ev[2][2], status = ev[2][3]))
#('PASSPHRASE', account, passphrase) #('PASSPHRASE', account, passphrase)
elif ev[0] == 'PASSPHRASE': elif ev[0] == 'PASSPHRASE':
if USE_GPG:
self.gpg[ev[1]].passphrase = ev[2] self.gpg[ev[1]].passphrase = ev[2]
elif ev[0] == 'GPG_SECRETE_KEYS': elif ev[0] == 'GPG_SECRETE_KEYS':
if USE_GPG:
keys = self.gpg_common.get_secret_keys() keys = self.gpg_common.get_secret_keys()
self.hub.sendPlugin('GPG_SECRETE_KEYS', ev[1], keys) self.hub.sendPlugin('GPG_SECRETE_KEYS', ev[1], keys)
else: else:

View file

@ -423,8 +423,11 @@ class accountPreference_Window:
if infos.has_key('proxyport'): if infos.has_key('proxyport'):
self.xml.get_widget("entry_proxyport").set_text(str(\ self.xml.get_widget("entry_proxyport").set_text(str(\
infos['proxyport'])) infos['proxyport']))
if infos.has_key('keyid'): if not infos.has_key('usegpg'):
if infos['keyid']: self.xml.get_widget('gpg_key_label').set_text('GPG is not usable on this computer')
self.xml.get_widget('gpg_choose_key_button').set_sensitive(False)
if infos.has_key('keyid') and infos.has_key('usegpg'):
if infos['keyid'] and infos['usegpg']:
self.xml.get_widget('gpg_key_label').set_text(infos['keyid']) self.xml.get_widget('gpg_key_label').set_text(infos['keyid'])
if infos.has_key('keyname'): if infos.has_key('keyname'):
self.xml.get_widget('gpg_name_label').set_text(infos['keyname']) self.xml.get_widget('gpg_name_label').set_text(infos['keyname'])

View file

@ -1355,7 +1355,8 @@ class roster_Window:
save_gpg_pass = self.plugin.accounts[account]["savegpgpass"] save_gpg_pass = self.plugin.accounts[account]["savegpgpass"]
if self.plugin.accounts[account].has_key("keyid"): if self.plugin.accounts[account].has_key("keyid"):
keyid = self.plugin.accounts[account]["keyid"] keyid = self.plugin.accounts[account]["keyid"]
if keyid and not self.plugin.connected[account]: if keyid and not self.plugin.connected[account] and \
self.plugin.config['usegpg']:
if save_gpg_pass: if save_gpg_pass:
passphrase = self.plugin.accounts[account]['gpgpass'] passphrase = self.plugin.accounts[account]['gpgpass']
else: else: