Browse Source

reintroduce 'unlock' command

- the unlock command was replaced by an option to load_wallet,
because some applications (the swapserver plugin) need to be
executed with an unlocked password. Now the swapserver plugin
waits until the wallet is unlocked.
- wallet.unlock now checks password unconditionally, see #8799
master
ThomasV 2 years ago
parent
commit
912e1a3a5b
  1. 11
      electrum/commands.py
  2. 5
      electrum/plugins/swapserver/server.py
  3. 1
      electrum/wallet.py

11
electrum/commands.py

@ -246,16 +246,13 @@ class Commands:
] ]
@command('n') @command('n')
async def load_wallet(self, wallet_path=None, unlock=False, password=None): async def load_wallet(self, wallet_path=None, password=None):
""" """
Load the wallet in memory Load the wallet in memory
""" """
wallet = self.daemon.load_wallet(wallet_path, password, upgrade=True) wallet = self.daemon.load_wallet(wallet_path, password, upgrade=True)
if wallet is None: if wallet is None:
raise UserFacingException('could not load wallet') raise UserFacingException('could not load wallet')
if unlock:
# FIXME if this raises, load_wallet() above still succeeded...
wallet.unlock(password)
run_hook('load_wallet', wallet, None) run_hook('load_wallet', wallet, None)
@command('n') @command('n')
@ -368,6 +365,11 @@ class Commands:
sh = bitcoin.address_to_scripthash(address) sh = bitcoin.address_to_scripthash(address)
return await self.network.get_history_for_scripthash(sh) return await self.network.get_history_for_scripthash(sh)
@command('wp')
async def unlock(self, wallet: Abstract_Wallet = None, password=None):
"""Unlock the wallet (store the password in memory)."""
wallet.unlock(password)
@command('w') @command('w')
async def listunspent(self, wallet: Abstract_Wallet = None): async def listunspent(self, wallet: Abstract_Wallet = None):
"""List unspent outputs. Returns the list of unspent transaction """List unspent outputs. Returns the list of unspent transaction
@ -1470,7 +1472,6 @@ command_options = {
'from_amount': (None, "Amount to convert (default: 1)"), 'from_amount': (None, "Amount to convert (default: 1)"),
'from_ccy': (None, "Currency to convert from"), 'from_ccy': (None, "Currency to convert from"),
'to_ccy': (None, "Currency to convert to"), 'to_ccy': (None, "Currency to convert to"),
'unlock': (None, "Unlock the wallet (store the password in memory)."),
'public': (None, 'Channel will be announced'), 'public': (None, 'Channel will be announced'),
} }

5
electrum/plugins/swapserver/server.py

@ -38,6 +38,11 @@ class SwapServer(Logger, EventListener):
@ignore_exceptions @ignore_exceptions
@log_exceptions @log_exceptions
async def run(self): async def run(self):
while self.wallet.has_password() and self.wallet.get_unlocked_password() is None:
self.logger.info("This wallet is password-protected. Please unlock it to start the swapserver plugin")
await asyncio.sleep(10)
app = web.Application() app = web.Application()
app.add_routes([web.get('/getpairs', self.get_pairs)]) app.add_routes([web.get('/getpairs', self.get_pairs)])
app.add_routes([web.post('/createswap', self.create_swap)]) app.add_routes([web.post('/createswap', self.create_swap)])

1
electrum/wallet.py

@ -3274,7 +3274,6 @@ class Abstract_Wallet(ABC, Logger, EventListener):
def unlock(self, password): def unlock(self, password):
self.logger.info(f'unlocking wallet') self.logger.info(f'unlocking wallet')
if self.has_password():
self.check_password(password) self.check_password(password)
self._password_in_memory = password self._password_in_memory = password

Loading…
Cancel
Save