1
0

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:
ThomasV
2024-06-08 11:10:27 +02:00
parent 1705e47a88
commit 912e1a3a5b
3 changed files with 12 additions and 7 deletions

View File

@@ -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'),
}

View File

@@ -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)])

View File

@@ -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):