Ticket #733: gpg-agent.patch

File gpg-agent.patch, 5.7 KB (added by lucky@…, 5 years ago)

patch to support gpg-agent

  • src/common/connection.py

     
    14011401                        if lowered_uf_status_msg == _('invisible'): # do not show I'm invisible! 
    14021402                                lowered_uf_status_msg = _('offline') 
    14031403                        msg = _("I'm %s") % lowered_uf_status_msg 
     1404 
     1405                # sign presence 
    14041406                keyID = gajim.config.get_per('accounts', self.name, 'keyid') 
     1407                use_gpg_agent = gajim.config.get_per('accounts', self.name, 'gpguseagent') 
    14051408                if keyID and USE_GPG: 
    1406                         if self.connected < 2 and self.gpg.passphrase is None: 
     1409                        # translates to: 
     1410                        # if we are not yet online, 
     1411                        # were not given a passphrase 
     1412                        # and won't use the gpg-agent 
     1413                        #   then cry out loud. 
     1414                        if self.connected < 2 and self.gpg.passphrase is None and not use_gpg_agent: 
    14071415                                # We didn't set a passphrase 
    14081416                                self.dispatch('ERROR', (_('OpenPGP passphrase was not given'), 
    14091417                                        #%s is the account name here 
    14101418                                        _('You will be connected to %s without OpenPGP.') % self.name)) 
    1411                         else: 
     1419                        # ... we have a passphrase or use the agent, so we can sign 
     1420                        elif self.gpg.passphrase is not None or use_gpg_agent: 
    14121421                                signed = self.gpg.sign(msg, keyID) 
    14131422                                if signed == 'BAD_PASSPHRASE': 
    14141423                                        signed = '' 
    14151424                                        if self.connected < 2: 
    14161425                                                self.dispatch('BAD_PASSPHRASE', ()) 
     1426                        else: 
     1427                                signed = '' 
    14171428                self.status = msg 
    14181429                if show != 'offline' and not self.connected: 
    14191430                        self.connection = self.connect() 
     
    18451856 
    18461857        def gpg_passphrase(self, passphrase): 
    18471858                if USE_GPG: 
    1848                         self.gpg.passphrase = passphrase 
     1859                        use_gpg_agent = gajim.config.get_per('accounts', self.name, 'gpguseagent') 
     1860                        if use_gpg_agent: 
     1861                                self.gpg.passphrase = None 
     1862                        else: 
     1863                                self.gpg.passphrase = passphrase 
    18491864 
    18501865        def ask_gpg_keys(self): 
    18511866                if USE_GPG: 
  • src/common/config.py

     
    154154                        'custom_port': [ opt_int, 5222 ], 
    155155                        'custom_host': [ opt_str, '' ], 
    156156                        'savegpgpass': [ opt_bool, False ], 
     157                        'gpguseagent': [ opt_bool, True ], 
    157158                        'gpgpassword': [ opt_str, '' ], 
    158159                        'sync_with_global_status': [ opt_bool, False ], 
    159160                        'no_log_for': [ opt_str, '' ], 
  • src/roster_window.py

     
    12271227                                        gajim.config.set_per('accounts', account, 'password', passphrase) 
    12281228 
    12291229                        keyid = None 
    1230                         save_gpg_pass = True 
    1231                         save_gpg_pass = gajim.config.get_per('accounts', account,  
    1232                                 'savegpgpass') 
     1230                        use_gpg_agent = False 
     1231                        use_gpg_agent = gajim.config.get_per('accounts', account, 'gpguseagent') 
     1232                        # we only need to bother with the passphrase if we don't use the agent 
     1233                        if use_gpg_agent: 
     1234                                save_gpg_pass = False 
     1235                        else: 
     1236                                save_gpg_pass = True 
     1237                                save_gpg_pass = gajim.config.get_per('accounts', account,  
     1238                                        'savegpgpass') 
    12331239                        keyid = gajim.config.get_per('accounts', account, 'keyid') 
    12341240                        if keyid and gajim.connections[account].connected < 2 and \ 
    12351241                                gajim.config.get('usegpg'): 
    1236                                 if save_gpg_pass: 
    1237                                         passphrase = gajim.config.get_per('accounts', account,  
    1238                                                                                                                                         'gpgpassword') 
     1242                                 
     1243                                if use_gpg_agent: 
     1244                                        self.gpg_passphrase[keyid] = None 
    12391245                                else: 
    1240                                         if self.gpg_passphrase.has_key(keyid): 
    1241                                                 passphrase = self.gpg_passphrase[keyid] 
    1242                                                 save = False 
     1246                                        if save_gpg_pass: 
     1247                                                passphrase = gajim.config.get_per('accounts', account, 'gpgpassword') 
    12431248                                        else: 
    1244                                                 w = dialogs.PassphraseDialog( 
    1245                                                         _('Passphrase Required'), 
    1246                                                         _('Enter GPG key passphrase for account %s') % account,  
    1247                                                         _('Save passphrase')) 
    1248                                                 passphrase, save = w.run() 
    1249                                         if passphrase == -1: 
    1250                                                 passphrase = None 
    1251                                         else: 
    1252                                                 self.gpg_passphrase[keyid] = passphrase 
    1253                                                 gobject.timeout_add(30000, self.forget_gpg_passphrase, keyid) 
    1254                                         if save: 
    1255                                                 gajim.config.set_per('accounts', account, 'savegpgpass', True) 
    1256                                                 gajim.config.set_per('accounts', account, 'gpgpassword',  
    1257                                                                                                         passphrase) 
    1258                                 gajim.connections[account].gpg_passphrase(passphrase) 
     1249                                                if self.gpg_passphrase.has_key(keyid): 
     1250                                                        passphrase = self.gpg_passphrase[keyid] 
     1251                                                        save = False 
     1252                                                else: 
     1253                                                        w = dialogs.PassphraseDialog( 
     1254                                                                _('Passphrase Required'), 
     1255                                                                _('Enter GPG key passphrase for account %s') % account,  
     1256                                                                _('Save passphrase')) 
     1257                                                        passphrase, save = w.run() 
     1258                                                if passphrase == -1: 
     1259                                                        passphrase = None 
     1260                                                else: 
     1261                                                        self.gpg_passphrase[keyid] = passphrase 
     1262                                                        gobject.timeout_add(30000, self.forget_gpg_passphrase, keyid) 
     1263                                                if save: 
     1264                                                        gajim.config.set_per('accounts', account, 'savegpgpass', True) 
     1265                                                        gajim.config.set_per('accounts', account, 'gpgpassword',  
     1266                                                                                                                passphrase) 
     1267                                        gajim.connections[account].gpg_passphrase(passphrase) 
     1268                                         
    12591269                gajim.connections[account].change_status(status, txt, sync) 
    12601270                for room_jid in self.plugin.windows[account]['gc']: 
    12611271                        if room_jid != 'tabbed': 
  • src/gajim.py

     
    656656                        config.GroupchatConfigWindow(self, account, jid, array[1]) 
    657657 
    658658        def handle_event_bad_passphrase(self, account, array): 
     659                use_gpg_agent = gajim.config.get_per('accounts', account, 'gpguseagent') 
     660                if use_gpg_agent: 
     661                  return 
    659662                keyID = gajim.config.get_per('accounts', account, 'keyid') 
    660663                self.roster.forget_gpg_passphrase(keyID) 
    661664                dialogs.WarningDialog(_('Your passphrase is incorrect'),