URI: 
       tadd cmdline support for 2fa wallets - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 4836adff84df2e7cadcb76f200095523cc99f15a
   DIR parent 401d8bc534cea5838206fea41a4d818f14a0b0e0
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 10 Oct 2017 13:44:25 +0200
       
       add cmdline support for 2fa wallets
       
       Diffstat:
         M lib/commands.py                     |       2 ++
         M plugins/trustedcoin/__init__.py     |       2 +-
         A plugins/trustedcoin/cmdline.py      |      62 +++++++++++++++++++++++++++++++
       
       3 files changed, 65 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/lib/commands.py b/lib/commands.py
       t@@ -47,6 +47,7 @@ from .transaction import Transaction
        from .import paymentrequest
        from .paymentrequest import PR_PAID, PR_UNPAID, PR_UNKNOWN, PR_EXPIRED
        from .import contacts
       +from .plugins import run_hook
        
        known_commands = {}
        
       t@@ -428,6 +429,7 @@ class Commands:
                if rbf:
                    tx.set_rbf(True)
                if not unsigned:
       +            run_hook('sign_tx', self.wallet, tx)
                    self.wallet.sign_transaction(tx, password)
                return tx
        
   DIR diff --git a/plugins/trustedcoin/__init__.py b/plugins/trustedcoin/__init__.py
       t@@ -8,4 +8,4 @@ description = ''.join([
        ])
        requires_wallet_type = ['2fa']
        registers_wallet_type = '2fa'
       -available_for = ['qt']
       +available_for = ['qt', 'cmdline']
   DIR diff --git a/plugins/trustedcoin/cmdline.py b/plugins/trustedcoin/cmdline.py
       t@@ -0,0 +1,62 @@
       +#!/usr/bin/env python
       +#
       +# Electrum - Lightweight Bitcoin Client
       +# Copyright (C) 2015 Thomas Voegtlin
       +#
       +# Permission is hereby granted, free of charge, to any person
       +# obtaining a copy of this software and associated documentation files
       +# (the "Software"), to deal in the Software without restriction,
       +# including without limitation the rights to use, copy, modify, merge,
       +# publish, distribute, sublicense, and/or sell copies of the Software,
       +# and to permit persons to whom the Software is furnished to do so,
       +# subject to the following conditions:
       +#
       +# The above copyright notice and this permission notice shall be
       +# included in all copies or substantial portions of the Software.
       +#
       +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
       +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
       +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
       +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
       +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
       +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
       +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
       +# SOFTWARE.
       +
       +from functools import partial
       +from threading import Thread
       +import re
       +from decimal import Decimal
       +
       +from PyQt5.QtGui import *
       +from PyQt5.QtCore import *
       +
       +from electrum_gui.qt.util import *
       +from electrum_gui.qt.qrcodewidget import QRCodeWidget
       +from electrum_gui.qt.amountedit import AmountEdit
       +from electrum_gui.qt.main_window import StatusBarButton
       +from electrum.i18n import _
       +from electrum.plugins import hook
       +from .trustedcoin import TrustedCoinPlugin, server
       +
       +
       +class QTOSSignalObject(QObject):
       +    two_factor_tos_signal = pyqtSignal()
       +
       +
       +class Plugin(TrustedCoinPlugin):
       +
       +    @hook
       +    def sign_tx(self, wallet, tx):
       +        if not isinstance(wallet, self.wallet_class):
       +            return
       +        if not wallet.can_sign_without_server():
       +            self.print_error("twofactor:sign_tx")
       +            auth_code = None
       +            if wallet.keystores['x3/'].get_tx_derivations(tx):
       +                msg = _('Please enter your Google Authenticator code:')
       +                auth_code = int(input(msg))
       +            else:
       +                self.print_error("twofactor: xpub3 not needed")
       +            wallet.auth_code = auth_code
       +