Example #1
0
    def generate_seed(self, new_seed_password: str):
        try:
            generate_seed_response = self.node_set.lnd_client.generate_seed(
                seed_password=new_seed_password)
        except _Rendezvous as e:
            log.error('generate_seed', exc_info=True)
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        seed = generate_seed_response.cipher_seed_mnemonic

        keyring_service_name = f'lnd_seed'
        keyring_user_name = ''.join(seed[0:2])
        log.info('generate_seed',
                 keyring_service_name=keyring_service_name,
                 keyring_user_name=keyring_user_name)

        keyring.set_password(service=keyring_service_name,
                             username=keyring_user_name,
                             password='******'.join(seed))

        keyring.set_password(service=f'{keyring_service_name}_seed_password',
                             username=keyring_user_name,
                             password=new_seed_password)
        return seed
Example #2
0
    def generate_seed(self, new_seed_password: str):
        try:
            generate_seed_response = self.client.generate_seed(
                seed_password=new_seed_password
            )
        except _Rendezvous:
            log.error('generate_seed error', exc_info=True)
            raise

        seed = generate_seed_response.cipher_seed_mnemonic

        keyring_service_name = f'lnd_seed'
        keyring_user_name = ''.join(seed[0:2])
        log.info(
            'generate_seed',
            keyring_service_name=keyring_service_name,
            keyring_user_name=keyring_user_name
        )

        keyring.set_password(
            service=keyring_service_name,
            username=keyring_user_name,
            password='******'.join(seed)
        )

        keyring.set_password(
            service=f'{keyring_service_name}_seed_password',
            username=keyring_user_name,
            password=new_seed_password
        )
        return seed
Example #3
0
 def handle_unlock_wallet(self, details: str):
     if details is None:
         return
     details = details.lower()
     # The Wallet Unlocker gRPC service disappears from LND's API
     # after the wallet is unlocked (or created/recovered)
     if 'unknown service lnrpc.walletunlocker' in details:
         pass
     # User needs to create a new wallet
     elif 'wallet not found' in details:
         new_wallet_password = get_random_password()
         keyring_service_name = keyring_user_name = f'lnd_wallet_password'
         log.info('create_wallet',
                  keyring_service_name=keyring_service_name,
                  keyring_user_name=keyring_user_name)
         keyring.set_password(service=keyring_service_name,
                              username=keyring_user_name,
                              password=new_wallet_password)
         seed = self.generate_seed(new_wallet_password)
         try:
             self.node_set.lnd_client.initialize_wallet(
                 wallet_password=new_wallet_password,
                 seed=seed,
                 seed_password=new_wallet_password)
         except _Rendezvous as e:
             log.error('initialize_wallet', exc_info=True)
             # noinspection PyProtectedMember
             self.error_message.showMessage(e._state.details)
             return
         keyring.set_password(
             service=f'lnd_{self.node_set.litecoin.network}_wallet_password',
             username=self.node_set.litecoin.file['rpcuser'],
             password=new_wallet_password)
     else:
         log.warning('unlock_wallet failed', details=details, exc_info=True)
Example #4
0
    def unlock_wallet(self):
        password = self.password_prompt(
            title=f'Unlock {self.node_set.bitcoin.network} LND Wallet',
            label='Wallet Password')

        try:
            self.node_set.lnd_client.unlock(wallet_password=password)
        except _Rendezvous as e:
            log.error('unlock_wallet', exc_info=True)
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        timestamp = str(time.time())
        keyring_service_name = f'lnd_{self.node_set.bitcoin.network}_wallet_password'
        log.info('unlock_wallet',
                 keyring_service_name=keyring_service_name,
                 keyring_user_name=timestamp)

        keyring.set_password(service=keyring_service_name,
                             username=timestamp,
                             password=password)

        keyring.set_password(service=keyring_service_name,
                             username=self.node_set.bitcoin.file['rpcuser'],
                             password=password)
Example #5
0
 def handle_unlock_wallet(self, details: str):
     if details is None:
         return
     details = details.lower()
     # The Wallet Unlocker gRPC service disappears from LND's API
     # after the wallet is unlocked (or created/recovered)
     if 'unknown service lnrpc.walletunlocker' in details:
         pass
     # User needs to create a new wallet
     elif 'wallet not found' in details:
         new_wallet_password = get_random_password()
         keyring_service_name = keyring_user_name = f'lnd_wallet_password'
         log.info('create_wallet',
                  keyring_service_name=keyring_service_name,
                  keyring_user_name=keyring_user_name)
         keyring.set_password(service=keyring_service_name,
                              username=keyring_user_name,
                              password=new_wallet_password)
         seed = self.generate_seed(new_wallet_password)
         try:
             self.lnd.client.initialize_wallet(
                 wallet_password=new_wallet_password,
                 seed=seed,
                 seed_password=new_wallet_password)
         except _Rendezvous:
             log.error('initialize_wallet error', exc_info=True)
             raise
         keyring.set_password(service=f'lnd_mainnet_wallet_password',
                              username=self.lnd.file['bitcoind.rpcuser'],
                              password=new_wallet_password)
     else:
         log.warning('unlock_wallet failed', details=details, exc_info=True)
Example #6
0
    def create_wallet(self):
        new_wallet_password = self.get_new_password(
            title=f'Create {self.node_set.network} LND Wallet',
            password_name='LND Wallet')
        keyring.set_password(
            service=f'lnd_{self.node_set.network}_wallet_password',
            username=str(time.time()),
            password=new_wallet_password)

        new_seed_password = self.get_new_password(
            title=f'Create {self.node_set.network} LND Wallet',
            password_name='Mnemonic Seed')

        seed = self.generate_seed(new_seed_password)
        self.backup_seed(seed)

        try:
            self.node_set.lnd_client.initialize_wallet(
                wallet_password=new_wallet_password,
                seed=seed,
                seed_password=new_seed_password)
        except _Rendezvous as e:
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        keyring.set_password(
            service=f'lnd_{self.node_set.network}_wallet_password',
            username=self.node_set.bitcoin.file['rpcuser'],
            password=new_wallet_password)
Example #7
0
    def test_keyring(self):
        timestamp = str(time.time())

        keyring.set_password(service='test_entry',
                             username=timestamp,
                             password='******')
        password = keyring.get_password(service='test_entry',
                                        username=timestamp)
        assert password == 'test_password'
        keyring.delete_password(service='test_entry', username=timestamp)
Example #8
0
 def unlock_wallet(self):
     password, ok = QInputDialog.getText(self.password_dialog,
                                         f'Unlock {self.node_set.network} LND Wallet',
                                         'Wallet Password',
                                         QLineEdit.Password)
     if not ok:
         return
     try:
         self.node_set.lnd_client.unlock(wallet_password=password)
         keyring.set_password(
             service=f'lnd_{self.node_set.network}_wallet_password',
             username=str(time.time()),
             password=password)
     except _Rendezvous as e:
         # noinspection PyProtectedMember
         self.error_message.showMessage(e._state.details)
         return
    def create_wallet(self):
        try:
            new_wallet_password, ok = QInputDialog.getText(
                self.password_dialog,
                f'Create {self.node_set.network} LND Wallet',
                'New Wallet Password', QLineEdit.Password)
            if not ok:
                return

            seed_password, ok = QInputDialog.getText(
                self.password_dialog,
                f'Create {self.node_set.network} LND Wallet',
                'New Seed Password (Optional)', QLineEdit.Password)
            if not ok:
                return
            if not seed_password:
                seed_password = None
            generate_seed_response = self.node_set.lnd_client.generate_seed(
                seed_password=seed_password)
            seed = generate_seed_response.cipher_seed_mnemonic

            seed_text = ''.join([
                f'{index + 1}: {value}\n' for index, value in enumerate(seed)
            ])
            seed_dialog = SeedDialog()
            seed_dialog.text.setText(seed_text)
            seed_dialog.show()

            timestamp = str(time.time())
            keyring.set_password(
                service=f'lnd_{self.node_set.network}_wallet_password',
                username=timestamp,
                password=new_wallet_password)
            keyring.set_password(service=f'lnd_{self.node_set.network}_seed',
                                 username=timestamp,
                                 password=seed_text)
            if seed_password is not None:
                keyring.set_password(
                    service=f'lnd_{self.node_set.network}_seed_password',
                    username=timestamp,
                    password=seed_password)

            self.node_set.lnd_client.initialize_wallet(
                wallet_password=new_wallet_password,
                seed=seed,
                seed_password=seed_password)

        except _Rendezvous as e:
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        keyring.set_password(
            service=f'lnd_{self.node_set.network}_wallet_password',
            username=self.node_set.bitcoin.file['rpcuser'],
            password=new_wallet_password)
    def recover_wallet(self):
        try:
            new_wallet_password, ok = QInputDialog.getText(
                self.password_dialog,
                f'Recover {self.node_set.network} LND Wallet',
                'New Wallet Password', QLineEdit.Password)
            if not ok:
                return

            seed_password, ok = QInputDialog.getText(
                self.password_dialog,
                f'Recover {self.node_set.network} LND Wallet',
                'Seed Password (Optional)', QLineEdit.Password)
            if not ok:
                return
            if not seed_password:
                seed_password = None

            seed, ok = QInputDialog.getText(
                self.password_dialog,
                f'Recover {self.node_set.network} LND Wallet', 'Seed')
            if not ok:
                return
            seed_list = seed.split(' ')

            timestamp = str(time.time())
            keyring.set_password(
                service=f'lnd_{self.node_set.network}_wallet_password',
                username=timestamp,
                password=new_wallet_password)
            keyring.set_password(service=f'lnd_{self.node_set.network}_seed',
                                 username=timestamp,
                                 password=seed)
            if seed_password is not None:
                keyring.set_password(
                    service=f'lnd_{self.node_set.network}_seed_password',
                    username=timestamp,
                    password=seed_password)

            self.node_set.lnd_client.initialize_wallet(
                wallet_password=new_wallet_password,
                seed=seed_list,
                seed_password=seed_password,
                recovery_window=10000)
        except _Rendezvous as e:
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        keyring.set_password(
            service=f'lnd_{self.node_set.network}_wallet_password',
            username=self.node_set.bitcoin.file['rpcuser'],
            password=new_wallet_password)
Example #11
0
    def generate_seed(self, new_seed_password: str):
        try:
            generate_seed_response = self.node_set.lnd_client.generate_seed(
                seed_password=new_seed_password)
        except _Rendezvous as e:
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        seed = generate_seed_response.cipher_seed_mnemonic

        keyring.set_password(service=f'lnd_{self.node_set.network}_seed',
                             username=''.join(seed[0:2]),
                             password='******'.join(seed))

        if new_seed_password is not None:
            keyring.set_password(
                service=f'lnd_{self.node_set.network}_seed_password',
                username=''.join(seed[0:2]),
                password=new_seed_password)
        return seed
Example #12
0
    def recover_wallet(self):
        title = f'Recover {self.node_set.bitcoin.network} LND Wallet'
        new_wallet_password = self.get_new_password(title=title,
                                                    password_name='LND Wallet')

        seed_password = self.password_prompt(title=title,
                                             label='Seed Password (Optional)')

        seed, ok = QInputDialog.getText(
            self.password_dialog, title,
            'Mnemonic Seed (one line with spaces)')
        if not ok:
            raise Exception()
        seed_list = seed.split(' ')

        keyring_service_name = f'lnd_{self.node_set.bitcoin.network}'
        keyring_user_name = str(time.time())
        log.info('recover_wallet',
                 keyring_service_name=keyring_service_name,
                 keyring_user_name=keyring_user_name)

        keyring.set_password(service=f'{keyring_service_name}_wallet_password',
                             username=keyring_user_name,
                             password=new_wallet_password)
        keyring.set_password(service=f'{keyring_service_name}_seed',
                             username=keyring_user_name,
                             password=seed)
        if seed_password is not None:
            keyring.set_password(
                service=f'{keyring_service_name}_seed_password',
                username=keyring_user_name,
                password=seed_password)

        try:
            self.node_set.lnd_client.initialize_wallet(
                wallet_password=new_wallet_password,
                seed=seed_list,
                seed_password=seed_password,
                recovery_window=10000)
        except _Rendezvous as e:
            log.error('recover_wallet_initialize_wallet', exc_info=True)
            # noinspection PyProtectedMember
            self.error_message.showMessage(e._state.details)
            return

        keyring.set_password(
            service=f'lnd_{self.node_set.bitcoin.network}_wallet_password',
            username=self.node_set.bitcoin.file['rpcuser'],
            password=new_wallet_password)