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());
 }
Exemple #2
0
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 ) ;
	} ) ;
}