@@ -720,26 +720,19 @@ impl Db {
720720 exchange_account : & str ,
721721 exchange_credentials : ExchangeCredentials ,
722722 ) -> DbResult < ( ) > {
723- for entry in [
724- ( "api_key" , exchange_credentials. api_key ) ,
725- ( "secret" , exchange_credentials. secret ) ,
726- ( "subaccount" , exchange_credentials. subaccount . unwrap_or_default ( ) ) ,
727- ] {
728- let user = format ! ( "{exchange_account}_{}" , entry. 0 ) ;
729- let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
730- Ok ( entry) => entry,
731- Err ( e) => {
732- return Err ( DbError :: KeyringFailed ( format ! (
733- "Failed to create keyring entry {user}: {e}"
734- ) ) )
735- }
736- } ;
737- if let Err ( e) = keyring_entry. set_secret ( entry. 1 . as_bytes ( ) ) {
723+ let ec = serde_json:: to_string ( & exchange_credentials) . unwrap ( ) ;
724+ // user can't be an empty string
725+ let user = format ! ( "{}_{exchange_account}" , exchange. to_string( ) ) ;
726+ let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
727+ Ok ( entry) => entry,
728+ Err ( e) => {
738729 return Err ( DbError :: KeyringFailed ( format ! (
739- "Failed to set {}: {e}" ,
740- entry. 0
741- ) ) ) ;
730+ "Failed to create keyring entry: {e}"
731+ ) ) )
742732 }
733+ } ;
734+ if let Err ( e) = keyring_entry. set_secret ( ec. as_bytes ( ) ) {
735+ return Err ( DbError :: KeyringFailed ( format ! ( "Failed to set: {e}" ) ) ) ;
743736 }
744737 self . add_exchange ( exchange)
745738 }
@@ -749,57 +742,48 @@ impl Db {
749742 exchange : Exchange ,
750743 exchange_account : & str ,
751744 ) -> Option < ExchangeCredentials > {
752- let mut values = vec ! [ ] ;
753- for entry in [ "api_key" , "secret" , "subaccount" ] {
754- let user = format ! ( "{exchange_account}_{entry}" ) ;
755- let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
756- Ok ( entry) => entry,
757- Err ( e) => {
758- eprintln ! ( "Failed to create keyring entry {user}: {e}" ) ;
759- return None ;
760- }
761- } ;
762- let value = match keyring_entry. get_secret ( ) {
763- Ok ( secret) => String :: from_utf8 ( secret) . unwrap ( ) ,
764- Err ( e) => {
765- eprintln ! ( "Failed to get the {entry}: {e}" ) ;
766- return None ;
767- }
768- } ;
769- values. push ( value) ;
770- }
771- let subaccount = if values[ 2 ] != "" {
772- Some ( values[ 2 ] . clone ( ) )
773- } else {
774- None
745+ let user = format ! ( "{}_{exchange_account}" , exchange. to_string( ) ) ;
746+ let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
747+ Ok ( entry) => entry,
748+ Err ( e) => {
749+ eprintln ! ( "Failed to create keyring entry: {e}" ) ;
750+ return None ;
751+ }
775752 } ;
776- Some ( ExchangeCredentials {
777- api_key : values[ 0 ] . clone ( ) ,
778- secret : values[ 1 ] . clone ( ) ,
779- subaccount,
780- } )
753+ let value = match keyring_entry. get_secret ( ) {
754+ Ok ( secret) => String :: from_utf8 ( secret) . unwrap ( ) ,
755+ Err ( e) => {
756+ eprintln ! ( "Failed to get the secret: {e}" ) ;
757+ return None ;
758+ }
759+ } ;
760+ match serde_json:: from_str ( & value) {
761+ Ok ( v) => Some ( v) ,
762+ Err ( e) => {
763+ eprintln ! ( "Failed to deserialize credentials: {e}" ) ;
764+ None
765+ } ,
766+ }
781767 }
782768
783769 pub fn clear_exchange_credentials (
784770 & mut self ,
785771 exchange : Exchange ,
786772 exchange_account : & str ,
787773 ) -> DbResult < ( ) > {
788- for entry in [ "api_key" , "secret" , "subaccount" ] {
789- let user = format ! ( "{exchange_account}_{entry}" ) ;
790- let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
791- Ok ( entry) => entry,
792- Err ( e) => {
793- return Err ( DbError :: KeyringFailed ( format ! (
794- "Failed to create keyring entry {user}: {e}"
795- ) ) )
796- }
797- } ;
798- if let Err ( e) = keyring_entry. delete_credential ( ) {
774+ let user = format ! ( "{}_{exchange_account}" , exchange. to_string( ) ) ;
775+ let keyring_entry = match keyring:: Entry :: new ( & exchange. to_string ( ) , & user) {
776+ Ok ( entry) => entry,
777+ Err ( e) => {
799778 return Err ( DbError :: KeyringFailed ( format ! (
800- "Failed to delete { entry} : {e}"
801- ) ) ) ;
779+ "Failed to create keyring entry: {e}"
780+ ) ) )
802781 }
782+ } ;
783+ if let Err ( e) = keyring_entry. delete_credential ( ) {
784+ return Err ( DbError :: KeyringFailed ( format ! (
785+ "Failed to delete credential: {e}"
786+ ) ) ) ;
803787 }
804788 self . remove_exchange ( exchange)
805789 }
0 commit comments