Browse Source
			 
			
			Fix importing Bitwarden exports (#4030 ) 
 
When importing Bitwarden JSON exports, these would fail because the last
modification date was also imported and caused our out-off-sync check to
kick-in. This PR fixes this by checking if we are doing an import, and
skip this check.
Fixes  #4005  
			
			
				 
		
			
				
					
						Mathijs van Veluw 
					
					2 years ago 
							GitHub 
							
						 
					
				 
				
			 
		 
		
			
				
					GPG Key ID:  
		
		
		
	
		
			
				 1 changed files  with 
10 additions  and 
7 deletions 
			 
			
		 
		
			
				
					
					
					  
					src/api/core/ciphers.rs 
				 
			
		 
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					
						
						
							
								 
						
						
					 
				
				@ -359,14 +359,17 @@ pub async fn update_cipher_from_data( 
			
		
	
		
			
				
					     enforce_personal_ownership_policy ( Some ( & data ) ,   headers ,   conn ) . await ? ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					     // Check that the client isn't updating an existing cipher with stale data.
  
			
		
	
		
			
				
					     if   let   Some ( dt )   =   data . LastKnownRevisionDate   {  
			
		
	
		
			
				
					         match   NaiveDateTime ::parse_from_str ( & dt ,   "%+" )   {  
			
		
	
		
			
				
					             // ISO 8601 format
  
			
		
	
		
			
				
					             Err ( err )   = >   warn ! ( "Error parsing LastKnownRevisionDate '{}': {}" ,   dt ,   err ) ,  
			
		
	
		
			
				
					             Ok ( dt )   if   cipher . updated_at . signed_duration_since ( dt ) . num_seconds ( )   >   1   = >   {  
			
		
	
		
			
				
					                 err ! ( "The client copy of this cipher is out of date. Resync the client and try again." )  
			
		
	
		
			
				
					     // And only perform this check when not importing ciphers, else the date/time check will fail.
  
			
		
	
		
			
				
					     if   ut   ! =   UpdateType ::None   {  
			
		
	
		
			
				
					         if   let   Some ( dt )   =   data . LastKnownRevisionDate   {  
			
		
	
		
			
				
					             match   NaiveDateTime ::parse_from_str ( & dt ,   "%+" )   {  
			
		
	
		
			
				
					                 // ISO 8601 format
  
			
		
	
		
			
				
					                 Err ( err )   = >   warn ! ( "Error parsing LastKnownRevisionDate '{}': {}" ,   dt ,   err ) ,  
			
		
	
		
			
				
					                 Ok ( dt )   if   cipher . updated_at . signed_duration_since ( dt ) . num_seconds ( )   >   1   = >   {  
			
		
	
		
			
				
					                     err ! ( "The client copy of this cipher is out of date. Resync the client and try again." )  
			
		
	
		
			
				
					                 }  
			
		
	
		
			
				
					                 Ok ( _ )   = >   ( ) ,  
			
		
	
		
			
				
					             }  
			
		
	
		
			
				
					             Ok ( _ )   = >   ( ) ,  
			
		
	
		
			
				
					         }  
			
		
	
		
			
				
					     }