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
This commit is contained in:
@@ -246,16 +246,13 @@ class Commands:
|
||||
]
|
||||
|
||||
@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
|
||||
"""
|
||||
wallet = self.daemon.load_wallet(wallet_path, password, upgrade=True)
|
||||
if wallet is None:
|
||||
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)
|
||||
|
||||
@command('n')
|
||||
@@ -368,6 +365,11 @@ class Commands:
|
||||
sh = bitcoin.address_to_scripthash(address)
|
||||
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')
|
||||
async def listunspent(self, wallet: Abstract_Wallet = None):
|
||||
"""List unspent outputs. Returns the list of unspent transaction
|
||||
@@ -1470,7 +1472,6 @@ command_options = {
|
||||
'from_amount': (None, "Amount to convert (default: 1)"),
|
||||
'from_ccy': (None, "Currency to convert from"),
|
||||
'to_ccy': (None, "Currency to convert to"),
|
||||
'unlock': (None, "Unlock the wallet (store the password in memory)."),
|
||||
'public': (None, 'Channel will be announced'),
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,11 @@ class SwapServer(Logger, EventListener):
|
||||
@ignore_exceptions
|
||||
@log_exceptions
|
||||
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.add_routes([web.get('/getpairs', self.get_pairs)])
|
||||
app.add_routes([web.post('/createswap', self.create_swap)])
|
||||
|
||||
@@ -3274,8 +3274,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
||||
|
||||
def unlock(self, password):
|
||||
self.logger.info(f'unlocking wallet')
|
||||
if self.has_password():
|
||||
self.check_password(password)
|
||||
self.check_password(password)
|
||||
self._password_in_memory = password
|
||||
|
||||
def get_unlocked_password(self):
|
||||
|
||||
Reference in New Issue
Block a user