@@ -66,18 +66,18 @@ impl OTPElement {
6666 }
6767}
6868
69- pub fn read_from_file ( ) -> Vec < OTPElement > {
69+ pub fn read_from_file ( ) -> Result < Vec < OTPElement > , String > {
7070 let mut encrypted_contents = read_to_string ( & get_db_path ( ) ) . unwrap ( ) ;
7171 //rust close files at the end of the function
7272 let contents = cryptograpy:: decrypt_string ( & mut encrypted_contents, & cryptograpy:: prompt_for_passwords ( "Password: " ) ) ;
7373 match contents {
7474 Ok ( contents) => {
7575 let vector: Vec < OTPElement > = serde_json:: from_str ( & contents) . unwrap ( ) ;
76- return vector;
76+ return Ok ( vector) ;
7777 } ,
7878 Err ( e) => {
7979 println ! ( "{}" , e) ;
80- return Vec :: new ( ) ;
80+ return Err ( String :: from ( "Cannot decrypt existing database" ) ) ;
8181 }
8282 }
8383}
@@ -88,28 +88,39 @@ pub fn check_secret(secret: &str) -> bool{
8888 return upper_secret. chars ( ) . all ( char:: is_alphanumeric) ;
8989}
9090
91- pub fn add_element ( secret : & String , issuer : & String , label : & String ) -> bool {
91+ pub fn add_element ( secret : & String , issuer : & String , label : & String ) -> Result < ( ) , String > {
9292 if !check_secret ( & secret) {
93- return false ;
93+ return Err ( String :: from ( "Bad secret" ) )
9494 }
9595 let otp_element = OTPElement :: new ( secret. to_string ( ) , issuer. to_string ( ) , label. to_string ( ) , 6 , String :: from ( "TOTP" ) , String :: from ( "SHA1" ) , String :: from ( "Default" ) , 0 , 0 , 30 , vec ! [ ] ) ;
96- let mut elements = read_from_file ( ) ;
96+ let mut elements;
97+ match read_from_file ( ) {
98+ Ok ( result) => elements = result,
99+ Err ( e) => return Err ( e)
100+ }
97101 elements. push ( otp_element) ;
98102 overwrite_database ( elements) ;
99- true
103+ Ok ( ( ) )
100104}
101105
102- pub fn remove_element_from_db ( mut id : usize ) -> bool {
106+ pub fn remove_element_from_db ( mut id : usize ) -> Result < ( ) , String > {
103107 if id == 0 {
104- return false ;
108+ return Err ( String :: from ( "0 is a bad index" ) ) ;
105109 }
106110 //user inserts numbers starting from 1, so we will decrement the value becouse we use array indexes instead
107111 id -= 1 ;
108112
109- let mut elements: Vec < OTPElement > = read_from_file ( ) ;
113+ let mut elements: Vec < OTPElement > ;
114+
115+ match read_from_file ( ) {
116+ Ok ( result) => elements = result,
117+ Err ( e) => {
118+ return Err ( e) ;
119+ }
120+ }
110121
111122 if id >= elements. len ( ) {
112- return false ;
123+ return Err ( format ! ( "{} is a bad index" , id+ 1 ) ) ;
113124 }
114125
115126 for i in 0 ..elements. len ( ) {
@@ -119,15 +130,21 @@ pub fn remove_element_from_db(mut id: usize) -> bool{
119130 }
120131 }
121132 overwrite_database ( elements) ;
122- true
133+ Ok ( ( ) )
123134}
124135
125136pub fn edit_element ( mut id : usize , secret : & str , issuer : & str , label : & str ) -> Result < ( ) , String > {
126137 if id == 0 {
127138 return Err ( String :: from ( "Invalid element" ) ) ;
128139 }
129140 id -= 1 ;
130- let mut elements: Vec < OTPElement > = read_from_file ( ) ;
141+
142+ let mut elements: Vec < OTPElement > ;
143+ match read_from_file ( ) {
144+ Ok ( result) => elements = result,
145+ Err ( e) => return Err ( String :: from ( "Cannot decrypt existing database" ) )
146+ }
147+
131148
132149 if id >= elements. len ( ) {
133150 return Err ( String :: from ( "Invalid element" ) ) ;
0 commit comments