wallet(const QString &password, const QString &walletName, const QString &applicationName) { m_error = lxqt_wallet_open(&m_wallet, password.toLatin1().constData(), password.size(), walletName.toLatin1().constData(), applicationName.toLatin1().constData()); }
static zuluValue_t _get_key_from_wallet( const zuluKey_t * key ) { zuluValue_t value ; lxqt_wallet_t w ; lxqt_wallet_key_values_t key_value ; lxqt_wallet_error r ; /* * make sure these are NULL terminated */ char wallet_name[ sizeof( key->wallet_name ) ] ; char application_name[ sizeof( key->wallet_name ) ] ; memcpy( wallet_name,key->wallet_name,sizeof( key->wallet_name ) ) ; memcpy( application_name,key->application_name,sizeof( key->application_name ) ) ; *( wallet_name + sizeof( key->wallet_name ) - 1 ) = '\0' ; *( application_name + sizeof( key->application_name ) - 1 ) = '\0' ; memset( &value,'\0',sizeof( zuluValue_t ) ) ; if( key->wallet_key_length > sizeof( key->wallet_key ) || key->key_0_length > sizeof( key->key_0 ) || key->key_1_length > sizeof( key->key_1 ) ){ return value ; }else{ r = lxqt_wallet_open( &w,key->wallet_key,key->wallet_key_length,wallet_name,application_name ) ; if( r == lxqt_wallet_no_error ){ if( lxqt_wallet_read_key_value( w,key->key_0,key->key_0_length,&key_value ) ){ if( key_value.key_value_size <= sizeof( value.value ) ){ value.key_found = 1 ; value.value_length = key_value.key_value_size ; memcpy( value.value,key_value.key_value,key_value.key_value_size ) ; } }else if( lxqt_wallet_read_key_value( w,key->key_1,key->key_1_length,&key_value ) ){ if( key_value.key_value_size <= sizeof( value.value ) ){ value.key_found = 1 ; value.value_length = key_value.key_value_size ; memcpy( value.value,key_value.key_value,key_value.key_value_size ) ; } } lxqt_wallet_close( &w ) ; } return value ; } }
void LXQt::Wallet::internalWallet::openWallet() { if( m_password.isEmpty() ){ /* * to prevent an unnecessary prompt,try to open a wallet without a password and then * prompt on failure,this will allow a silent opening of the wallet set without a password. */ Task::run< lxqt_wallet_error >( [ this ](){ return lxqt_wallet_open( &m_wallet, m_password.toLatin1().constData(), m_password.size(), m_walletName.toLatin1().constData(), m_applicationName.toLatin1().constData() ) ; } ).then( [ this ]( lxqt_wallet_error r ){ if( r == lxqt_wallet_no_error ){ this->opened( true ) ; }else{ /* * passwordless opening failed,prompt a user for a password */ using pwd = LXQt::Wallet::password_dialog ; auto _cancelled = [ this ](){ m_opened = false ; m_loop.exit() ; this->walletIsOpen( false ) ; } ; pwd::instance( this, m_walletName, m_displayApplicationName, [ this ]( const QString& p ){ this->openWallet( p ) ; }, std::move( _cancelled ), &m_correctPassword ) ; } } ) ; }else{ this->openWallet( m_password ) ; } }
void LXQt::Wallet::internalWallet::openWallet( QString password ) { m_password = password ; Task::run< lxqt_wallet_error >( [ this ](){ return lxqt_wallet_open( &m_wallet, m_password.toLatin1().constData(), m_password.size(),m_walletName.toLatin1().constData(), m_applicationName.toLatin1().constData() ) ; } ).then( [ this ]( lxqt_wallet_error r ){ this->opened( r == lxqt_wallet_no_error ) ; } ) ; }