modified password input routines to allow for input through stdin
This commit is contained in:
parent
b8c1c0c317
commit
b615fe0c8c
31
electrum
31
electrum
|
@ -16,7 +16,7 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import re, sys, getpass
|
import re, sys
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ecdsa
|
import ecdsa
|
||||||
|
@ -31,9 +31,9 @@ except:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from lib import Wallet, WalletSynchronizer, format_satoshis, mnemonic
|
from lib import Wallet, WalletSynchronizer, format_satoshis, mnemonic, prompt_password
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from electrum import Wallet, WalletSynchronizer, format_satoshis, mnemonic
|
from electrum import Wallet, WalletSynchronizer, format_satoshis, mnemonic, prompt_password
|
||||||
|
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
@ -178,14 +178,7 @@ if __name__ == '__main__':
|
||||||
if wallet.file_exists:
|
if wallet.file_exists:
|
||||||
print "remove the existing wallet first!"
|
print "remove the existing wallet first!"
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
password = getpass.getpass("Password (hit return if you do not wish to encrypt your wallet):")
|
password = prompt_password("Password (hit return if you do not wish to encrypt your wallet):")
|
||||||
if password:
|
|
||||||
password2 = getpass.getpass("Confirm password:")
|
|
||||||
if password != password2:
|
|
||||||
print "error"
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
password = None
|
|
||||||
|
|
||||||
w_host, w_port, w_protocol = wallet.server.split(':')
|
w_host, w_port, w_protocol = wallet.server.split(':')
|
||||||
host = raw_input("server (default:%s):"%w_host)
|
host = raw_input("server (default:%s):"%w_host)
|
||||||
|
@ -269,12 +262,12 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
# commands needing password
|
# commands needing password
|
||||||
if cmd in protected_commands or ( cmd=='addresses' and options.show_keys):
|
if cmd in protected_commands or ( cmd=='addresses' and options.show_keys):
|
||||||
password = getpass.getpass('Password:') if wallet.use_encryption and not is_temporary else None
|
password = prompt_password('Password:') if wallet.use_encryption and not is_temporary else None
|
||||||
# check password
|
# check password
|
||||||
try:
|
try:
|
||||||
wallet.pw_decode( wallet.seed, password)
|
wallet.pw_decode( wallet.seed, password)
|
||||||
except:
|
except:
|
||||||
print "invalid password"
|
print "Error: This password does not decode this wallet."
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
if cmd == 'import':
|
if cmd == 'import':
|
||||||
|
@ -435,7 +428,7 @@ if __name__ == '__main__':
|
||||||
elif cmd in ['payto', 'mktx']:
|
elif cmd in ['payto', 'mktx']:
|
||||||
if from_addr and is_temporary:
|
if from_addr and is_temporary:
|
||||||
if from_addr.find(":") == -1:
|
if from_addr.find(":") == -1:
|
||||||
keypair = from_addr + ":" + getpass.getpass('Private key:')
|
keypair = from_addr + ":" + prompt_password('Private key:', False)
|
||||||
else:
|
else:
|
||||||
keypair = from_addr
|
keypair = from_addr
|
||||||
from_addr = keypair.split(':')[0]
|
from_addr = keypair.split(':')[0]
|
||||||
|
@ -484,13 +477,11 @@ if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
seed = wallet.pw_decode( wallet.seed, password)
|
seed = wallet.pw_decode( wallet.seed, password)
|
||||||
except:
|
except:
|
||||||
print "sorry"
|
print "Error: Password does not decrypt this wallet."
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
new_password = getpass.getpass('New password:')
|
|
||||||
if new_password == getpass.getpass('Confirm new password:'):
|
new_password = prompt_password('New password:')
|
||||||
wallet.update_password(seed, password, new_password)
|
wallet.update_password(seed, password, new_password)
|
||||||
else:
|
|
||||||
print "error: mismatch"
|
|
||||||
|
|
||||||
elif cmd == 'signmessage':
|
elif cmd == 'signmessage':
|
||||||
address = args[1]
|
address = args[1]
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
from wallet import Wallet, format_satoshis
|
from wallet import Wallet, format_satoshis, prompt_password
|
||||||
from interface import WalletSynchronizer
|
from interface import WalletSynchronizer
|
||||||
from interface import TcpStratumInterface
|
from interface import TcpStratumInterface
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
import sys, base64, os, re, hashlib, copy, operator, ast, threading, random
|
import sys, base64, os, re, hashlib, copy, operator, ast, threading, random, getpass
|
||||||
import aes, ecdsa
|
import aes, ecdsa
|
||||||
from ecdsa.util import string_to_number, number_to_string
|
from ecdsa.util import string_to_number, number_to_string
|
||||||
|
|
||||||
|
@ -147,6 +147,26 @@ def ASecretToSecret(key):
|
||||||
|
|
||||||
########### end pywallet functions #######################
|
########### end pywallet functions #######################
|
||||||
|
|
||||||
|
# get password routine
|
||||||
|
def prompt_password(prompt, confirm=True):
|
||||||
|
if sys.stdin.isatty():
|
||||||
|
password = getpass.getpass(prompt)
|
||||||
|
|
||||||
|
if password and confirm:
|
||||||
|
password2 = getpass.getpass("Confirm: ")
|
||||||
|
|
||||||
|
if password != password2:
|
||||||
|
print "Error: Passwords do not match."
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
else:
|
||||||
|
password = raw_input(prompt)
|
||||||
|
|
||||||
|
if not password:
|
||||||
|
password = None
|
||||||
|
|
||||||
|
return password
|
||||||
|
|
||||||
# URL decode
|
# URL decode
|
||||||
_ud = re.compile('%([0-9a-hA-H]{2})', re.MULTILINE)
|
_ud = re.compile('%([0-9a-hA-H]{2})', re.MULTILINE)
|
||||||
urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
|
urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
|
||||||
|
|
Loading…
Reference in New Issue